C#中关于XML与对象,集合的相互转换
XML与对象,集合的相互转化
今天小伙伴在群里问了一下关于XML与对象之间的相互转换,作为菜鸟的我正好趁着闲着的时间学习了一波,直接上代码了,有疑问或者有错误的地方还请大家指正,谢谢。。。。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.Xml; namespace xml序列化
{
class Program
{
static void Main(string[] args)
{ var stu = new Student();
stu.Name = "华哥";
stu.Age = ;
stu.Sex = "男神";
var stu1 = new Student("xiuxiu", , "女");
var stuList = new List<Student>();
stuList.Add(stu);
stuList.Add(stu1); var xmlStr = XmlConvert<Student>.SerializeObject(stu);//序列化
Console.WriteLine(xmlStr); var student = XmlConvert<Student>.DeserializeObject(xmlStr);//反序列化
Console.WriteLine(student.Name + "," + student.Age + "," + student.Sex); var listXml = XmlConvert<Student>.ListSerializeObject(stuList);//List序列化
Console.WriteLine(listXml); var xmlList = XmlConvert<Student>.ListDeserializeObject(listXml);//反序列化 Console.ReadKey();
} public class XmlConvert<T> where T : new()
{ //序列化对象成xml字符串
public static string SerializeObject(T myObj)
{
var xmlStr = string.Empty;
if (myObj != null)
{
XmlSerializer xs = new XmlSerializer(typeof(T));
using (var stringWriter = new StringWriter())
{
xs.Serialize(stringWriter, myObj);
xmlStr = stringWriter + "";
}
}
return xmlStr;
} //序列化对象成xml字符串
public static string SerializeObject1(T Object)
{
var xmlStr = string.Empty;
if (Object != null)
{
XmlSerializer xs = new XmlSerializer(typeof(T));//初始化XmlSerializer对象
MemoryStream stream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(stream, System.Text.Encoding.UTF8);
//writer.Formatting = Formatting.None;// 不应用特殊的格式设置。这是默认值。
writer.Formatting = Formatting.Indented; //设置缩进。
xs.Serialize(writer, Object);
stream.Position = ; // 获取或设置流中的当前位置。 必须设置,否则默认最后位置,读取不到流中的数据
using (StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
xmlStr += line;
}
}
writer.Close();
}
return xmlStr;
} //xml反序列化成对象
public static T DeserializeObject(string xml)
{
var t = default(T)
if (!string.IsNullOrEmpty(xml))
{
var xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
StringReader reader = new StringReader(xml);//将xml字符串转换成stringreader
t = (T)xs.Deserialize(reader);
reader.Close();
}
return t;
} //序列化List成xml字符串
public static string ListSerializeObject(List<T> list)
{
var xmlStr = string.Empty;
if (list.Count > )
{
using (StringWriter sw = new StringWriter())
{
XmlSerializer xz = new XmlSerializer(list.GetType());
xz.Serialize(sw, list);
xmlStr = sw + "";
}
}
return xmlStr;
} //xml反序列化成List集合
public static List<T> ListDeserializeObject(string xml)
{
List<T> t =null;
if (!string.IsNullOrEmpty(xml))
{
t = new List<T>();
XmlSerializer xs = new XmlSerializer(typeof(List<T>));
using (var sw = new StringReader(xml))
{
t = (List<T>)xs.Deserialize(sw);
}
}
return t;
}
}
}
public class Student
{
public Student() { }
public Student(string name, int age, string sex)
{
Name = name;
Age = age;
Sex = sex;
}
public string Name { get; set; }
public int? Age { get; set; }
public string Sex { get; set; }
}
}
根据JsonConvert类的习惯,改良了一下XMLConvert类,见如下代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.Xml; namespace xml序列化
{
class Program
{
static void Main(string[] args)
{ var stu = new Student();
stu.Name = "华哥";
stu.Age = ;
stu.Sex = "男神";
var stu1 = new Student("xiuxiu", , "女");
var stuList = new List<Student>();
stuList.Add(stu);
stuList.Add(stu1); var xmlStr = XmlConvert.SerializeObject(stu);//序列化
Console.WriteLine(xmlStr); var student = XmlConvert.DeserializeObject<Student>("");//反序列化
Console.WriteLine(student.Name + "," + student.Age + "," + student.Sex); var listXml = XmlConvert.SerializeObject(stuList);//List序列化
Console.WriteLine(listXml); var xmlList = XmlConvert.ListDeserializeObject<Student>(listXml);//反序列化 Console.ReadKey();
} public class XmlConvert
{ //序列化对象成xml字符串
public static string SerializeObject(object myObj)
{
var xmlStr = string.Empty;
if (myObj != null)
{
XmlSerializer xs = new XmlSerializer(myObj.GetType());
using (var stringWriter = new StringWriter())
{
xs.Serialize(stringWriter, myObj);
xmlStr = stringWriter + "";
}
}
return xmlStr;
} //序列化对象成xml字符串
public static string SerializeObject1(object Object)
{
var xmlStr = string.Empty;
if (Object != null)
{
XmlSerializer xs = new XmlSerializer(Object.GetType());//初始化XmlSerializer对象
MemoryStream stream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(stream, System.Text.Encoding.UTF8);
//writer.Formatting = Formatting.None;// 不应用特殊的格式设置。这是默认值。
writer.Formatting = Formatting.Indented; //设置缩进。
xs.Serialize(writer, Object);
stream.Position = ; // 获取或设置流中的当前位置。 必须设置,否则默认最后位置,读取不到流中的数据
using (StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
xmlStr += line;
}
}
writer.Close();
}
return xmlStr;
} //xml反序列化成对象
public static T DeserializeObject<T>(string xml) where T : new()
{
T t = default(T);
if (!string.IsNullOrEmpty(xml))
{
t = new T();
var xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
StringReader reader = new StringReader(xml);//将xml字符串转换成stream
t = (T)xs.Deserialize(reader);
reader.Close();
}
return t;
} //序列化List成xml字符串
public static string ListSerializeObject(object list)
{
var xmlStr = string.Empty;
if (list != null)
{
using (StringWriter sw = new StringWriter())
{
XmlSerializer xz = new XmlSerializer(list.GetType());
xz.Serialize(sw, list);
xmlStr = sw + "";
}
}
return xmlStr;
} //xml反序列化成List集合
public static List<T> ListDeserializeObject<T>(string xml) where T : new()
{
List<T> t = null;
if (!string.IsNullOrEmpty(xml))
{
t = new List<T>();
XmlSerializer xs = new XmlSerializer(typeof(List<T>));
using (var sw = new StringReader(xml))
{
t = (List<T>)xs.Deserialize(sw);
}
}
return t;
}
}
}
public class Student
{
public Student() { }
public Student(string name, int age, string sex)
{
Name = name;
Age = age;
Sex = sex;
}
public string Name { get; set; }
public int? Age { get; set; }
public string Sex { get; set; }
}
}
进一步的简化,直接跟JsonConvert类的方法一致。。。。。
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.Xml; namespace xml序列化
{
class Program
{
static void Main(string[] args)
{ var stu = new Student();
stu.Name = "华哥";
stu.Age = ;
stu.Sex = "男神";
var stu1 = new Student("xiuxiu", , "女");
var stuList = new List<Student>();
stuList.Add(stu);
stuList.Add(stu1); var xmlStr = XmlConvert.SerializeObject(stu);//序列化
Console.WriteLine(xmlStr); var student = XmlConvert.DeserializeObject<Student>("");//反序列化
Console.WriteLine(student.Name + "," + student.Age + "," + student.Sex); var listXml = XmlConvert.SerializeObject(stuList);//List序列化
Console.WriteLine(listXml); var xmlList = XmlConvert.DeserializeObject<List<Student>>(listXml);//反序列化 Console.ReadKey();
}
public class XmlConvert
{
//序列化对象成xml字符串
public static string SerializeObject(object myObj)
{
var xmlStr = string.Empty;
if (myObj != null)
{
XmlSerializer xs = new XmlSerializer(myObj.GetType());
using (var stringWriter = new StringWriter())
{
xs.Serialize(stringWriter, myObj);
xmlStr = stringWriter + "";
}
}
return xmlStr;
} //xml反序列化成对象
public static T DeserializeObject<T>(string xml) where T : new()
{
T t = default(T);
if (!string.IsNullOrEmpty(xml))
{
t = new T();
var xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
StringReader reader = new StringReader(xml);//将xml字符串转换成stream
t = (T)xs.Deserialize(reader);
reader.Close();
}
return t;
}
}
}
public class Student
{
public Student() { }
public Student(string name, int age, string sex)
{
Name = name;
Age = age;
Sex = sex;
}
public string Name { get; set; }
public int? Age { get; set; }
public string Sex { get; set; }
}
C#中关于XML与对象,集合的相互转换的更多相关文章
- java中拼接两个对象集合
目标: 根据两个list中每条记录的某个属性是否相同来拼接. 1.首先定义一个字符串 String str = "[{\"ITEMID\":2,\"ITEMN ...
- hibernate 中多对多关系对象集合的保存
多对多关系映射和一对多关系映射开发步骤差不多, 例子如下:员工和项目之间的关系,一个员工可以参与多个项目:一个项目可以有多个开发人员参与.因此是多对多的关系. 1 分析数据表 1.1)员工表 CREA ...
- #WEB安全基础 : HTTP协议 | 0x12 MIME多用途邮件扩展以及多部分对象集合
我们是怎么让邮件里又有图片又有文字的? 文字和图片是两个不同的类型,而邮件又是一个类型. C语言的结构体允许用户定义一个含有多类型的自定义类型 像这样,看不懂没关系,你只要知道邮件里有多个类型就可以了 ...
- hibernate中对象集合的保存
一.在java web设计中经常使用对象进行操作,在hibernate中对象集合的保存(一对多) 1需要进行如下步骤: 1) 设计数据表关系 2)引入jar包,需要注意引入数据库connector 3 ...
- C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。
C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
转自:http://blog.csdn.net/zhao19861029/article/details/8473245 首先实现生成对应的JAVAbean的XML文件方法 /** * DMO4J写入 ...
- android开发中json与java对象相互转换
json与java对象的相互转换.(使用com.google.gson) 在Android开发过程中,客户端总是需要从服务器获取数据,包括XML和json格式,目前json格式的数据使用较为普遍,所以 ...
- ASP.NET中的XML和JSON
一.DOM简介 1.XML 定义:XML是一种跨语言.跨平台的数据储存格式 2.什么是DOM DOM(document object model)文档对象模型:是一种允许程序或脚本动态的访问更新文档内 ...
- Android中解析XML
XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...
随机推荐
- windows下安装Python-Whl文件
原文链接:http://blog.sciencenet.cn/home.php?mod=space&uid=1181151&do=blog&id=865515 Note1. 整 ...
- C#异步Async、Task、Await
参考http://www.cnblogs.com/jesse2013/p/async-and-await.html 事例: static void Main(string[] args) { ; i ...
- 小程序组件 Vant Weapp 安装
文件夹的名称必须是英文 第一步:npm init -y 第二步:npm i vant-weapp -S --production
- ivew使用星星评分
这组件好像有问题,不知道是我们项目环境造成的还是什么,初始化半星不能正常显示,显示的全星. 1.template <div style="display:inline-block;ma ...
- Labview学习笔记(二)
一.编程基础 LABVIEW程序成为虚拟.仪器程序,简称VI,一个最基本的VI包括三个部分:前面板.程序框图和图标/连接端口. 1.前面板 在前面板窗口中,可以添加输入控件和显示控件,同时,可以用快捷 ...
- HDU 4405 Aeroplane chess(概率dp,数学期望)
题目 http://kicd.blog.163.com/blog/static/126961911200910168335852/ 根据里面的例子,就可以很简单的写出来了,虽然我现在还是不是很理解为什 ...
- Codeforces 816C/815A - Karen and Game
传送门:http://codeforces.com/contest/816/problem/C 本题是一个模拟问题. 有一个n×m的矩阵.最初,这个矩阵为零矩阵O.现有以下操作: a.行操作“row ...
- BZOJ 4567 [SCOI2016]背单词 (Trie树、贪心)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4567 题解: 显然答案一定小于\(n\times n\), 字符串倒过来变成前缀建Tr ...
- dev的汉化
dev汉化网上有很多介绍.自己感觉还是用ini文件,用Localization Component来的简单方便. 但是根据其16.1.6的demo死活出问题.原因是ini文件的编码问题.转换到位自然就 ...
- 关于autoupgader的狗屎问题
由于win7和xp的权限问题,导致这个自动升级玩意不正常.这个狗屎问题很简单,把exe文件的兼容性设定该一下.真是气死洒家了.