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与对象,集合的相互转换的更多相关文章

  1. java中拼接两个对象集合

    目标:  根据两个list中每条记录的某个属性是否相同来拼接. 1.首先定义一个字符串 String str = "[{\"ITEMID\":2,\"ITEMN ...

  2. hibernate 中多对多关系对象集合的保存

    多对多关系映射和一对多关系映射开发步骤差不多, 例子如下:员工和项目之间的关系,一个员工可以参与多个项目:一个项目可以有多个开发人员参与.因此是多对多的关系. 1 分析数据表 1.1)员工表 CREA ...

  3. #WEB安全基础 : HTTP协议 | 0x12 MIME多用途邮件扩展以及多部分对象集合

    我们是怎么让邮件里又有图片又有文字的? 文字和图片是两个不同的类型,而邮件又是一个类型. C语言的结构体允许用户定义一个含有多类型的自定义类型 像这样,看不懂没关系,你只要知道邮件里有多个类型就可以了 ...

  4. hibernate中对象集合的保存

    一.在java web设计中经常使用对象进行操作,在hibernate中对象集合的保存(一对多) 1需要进行如下步骤: 1) 设计数据表关系 2)引入jar包,需要注意引入数据库connector 3 ...

  5. C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。

    C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...

  6. 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合

    转自:http://blog.csdn.net/zhao19861029/article/details/8473245 首先实现生成对应的JAVAbean的XML文件方法 /** * DMO4J写入 ...

  7. android开发中json与java对象相互转换

    json与java对象的相互转换.(使用com.google.gson) 在Android开发过程中,客户端总是需要从服务器获取数据,包括XML和json格式,目前json格式的数据使用较为普遍,所以 ...

  8. ASP.NET中的XML和JSON

    一.DOM简介 1.XML 定义:XML是一种跨语言.跨平台的数据储存格式 2.什么是DOM DOM(document object model)文档对象模型:是一种允许程序或脚本动态的访问更新文档内 ...

  9. Android中解析XML

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

随机推荐

  1. C#如何判断操作系统语言版本

    using System.Runtime.InteropServices; static void Main(string[] args) { System.Console.WriteLine(Sys ...

  2. 【sqli-labs】 less27a GET- Blind based -All you Union&Select Belong to us -Double Quotes(GET型基于盲注的去除了Union和Select的双引号注入)

    和less 27一样,单引号换双引号 http://192.168.136.128/sqli-labs-master/Less-27a/?id=0"%a0uNion%a0sElect%a01 ...

  3. How to add jdk8 in Eclipse Indigo

    I just read How to have Eclipse use JDK8 to compile a project? What i added jdk8 to eclipse as,  Fro ...

  4. Oracle中REGEXP_SUBSTR函数

    Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下: 在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20',' ...

  5. day36 类的三大特性---封装以及Property特性

    目录 类的封装 如果真的要拿 类的property特性 setter & deleter 类属性用法 类与对象的绑定方法和非绑定方法 对象方法&类方法&静态方法 隐藏模块内的函 ...

  6. python sqlalthemy 总结

    orm 数据状态的预知识 瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过Sessi ...

  7. 【笔记】Linux就该这么学-第六课第四章

    vim使用    a 在光标后一位置插入    i 在光标当前位置插入    o 在光标下面创建个空行    dd 删除(剪切)光标所在行    5dd 删除(剪切)从光标处开始的5行    yy 复 ...

  8. xpath 获取深圳房源信息并导出csv

    # -*- coding: utf-8 -*- # @Time : 2019/4/28 10:44 # @Author : wujf # @Email : 1028540310@qq.com # @F ...

  9. 爬虫系列(十) 用requests和xpath爬取豆瓣电影

    这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...

  10. C#学习笔记_03_运算符

    03_运算符 算数运算符 + - * / % ++ -- 赋值运算符 = += -= *= /= %= 关系运算符 > < >= <= == != 逻辑运算符 &:逻辑 ...