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解 ...
随机推荐
- (转)基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作
http://www.cnblogs.com/wuhuacong/p/3872890.html 我们在使用EasyUI的时候,很多情况下需要使用到表格控件datagrid,这个控件控件非常强大,使用起 ...
- POJ_2594_最小路径覆盖
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8085 Accepted: 3 ...
- js手机移动端选择插件 mobileSelect.js
一.mobileSelect获取方法 mobileSelect支持单选.多级联动.自定义回调函数.二次渲染.最新版本下载地址[2017-09-21更新]: https://github.com/onl ...
- redis与其可视化工具在win7上的安装
步骤 1.下载安装Redis服务. 2.调用执行文件创建服务器以及测试缓存. 3.使用可视化工具redis-desktop-manager管理查询缓存. 1.下载安装Redis服务. 下载地址:htt ...
- 【转载】Jmeter之Bean shell
一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...
- eas中删除原来的监听事件添加新的监听事件
kdtEntrys.removeKDTEditListener(kdtEntrys.getListeners(KDTEditListener.class)[0]); kdtEntrys.addKDT ...
- Git 基础教程 之 从远程库克隆
③ 克隆一个本地仓库 a, 在合适的地方,在Git Bash下执行命令: git clone git@github.com:hardy9sap/gittutorial.git
- Request中通过文件流获取文件
第一次写博客,希望能帮到以后接触到这里的同学,废话不多说,面对疾风吧. /** * 获取文件相信信息 * @param request HttpServletRequest实例 * @param im ...
- 什么是hashMap,初始长度,高并发死锁,java8 hashMap做的性能提升
问题1:HashM安排的初始长度,为什么? 初始长度是 16,每次扩展或者是手动初始化,长度必须是 2的幂. 因为: index = HashCode(Key) & (length - 1), ...
- Spring Boot-springbootHelloword(一)
什么是springboot sprng家族一个全新的框架 简化我们应用程序的创建和开发的过程,使用默认配置简化了我们以前传统的配置 springboot的特性 能够快速创建spring程序 ...