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解 ...
随机推荐
- 工作中总结的经验之git篇
不要以为你会git,你要知道,git不是只有commit和push 由于系统分析与设计的期末Project需要团队合作开发,因此在这里想谈谈GitHub团队项目合作开发的流程: 项目创建 项目负责人在 ...
- C# ref 和 out 的使用
private void button1_Click(object sender, EventArgs e) { ; ; Fun(ref a,ref b); //把a的地址和b的地址 传递过去 Mes ...
- React Native未来导航者:react-navigation 使用详解
该库包含三类组件: (1)StackNavigator:用来跳转页面和传递参数 (2)TabNavigator:类似底部导航栏,用来在同一屏幕下切换不同界面 (3)DrawerNavigator:侧滑 ...
- Swoole server函数列表(转载)
swoole_server::__construct swoole_server::set swoole_server::on swoole_server::addlistener swoole_se ...
- SP1825 FTOUR2 - Free tour II 点分治+启发式合并+未调完
题意翻译 给定一棵n个点的树,树上有m个黑点,求出一条路径,使得这条路径经过的黑点数小于等于k,且路径长度最大 Code: #include <bits/stdc++.h> using n ...
- vue,基础整理,夯实基础,为进阶打基础
把基础部分,再次系统的了解一遍,整理成文档.
- Git 基础教程 之 解决合并冲突
① 解决冲突 把Git合并失败的文件手动编辑成我们希望的内容 ② 提交,合并完成 场景: ① 新分支feature1,修改后,add, commit: ② 切回master后,修改后,add, ...
- [bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划
食物链 bzoj-4562 Haoi-2016 题目大意:给你n个点,m条边的DAG,求所有的满足条件的链,使得每条链的起点是一个入度为0的点,中点是一条出度为0的点. 注释:$1\le n\le 1 ...
- pl/sql developer 自带汉化选项
pl/sql developer 自带汉化选项 版本:11.0.2 工具 -> 选项 -> 用户界面 ->外观, 第一项就是选择语言: 选择Chinese.lang,如果有的话:
- spring学习笔记(22)声明式事务配置,readOnly无效写无异常
在上一节内容中.我们使用了编程式方法来配置事务,这种优点是我们对每一个方法的控制性非常强.比方我须要用到什么事务,在什么位置假设出现异常须要回滚等.能够进行非常细粒度的配置.但在实际开发中.我们可能并 ...