C# XML与对象序列化和反序列化故事
使用场景:
1.在WebService服务定义基于SOAP协议的接口,返回XMLNode对象,XML字符串等
2.文件上传,需要解析xml文件里面的内容
using System; using System.Collections.Generic; using System.Diagnostics; using System.Xml; using System.Xml.Serialization; namespace ConsoleAppTest { public class Program { static void Main(string[] args) { ChildrenTest ct = new ChildrenTest() { ChildernName = "xiaoming", Age = 20, }; PersonTest p = new PersonTest() { Id = 25, Name = "liwei", Childrens = ct, CustomerList = new List<CustomerInfo>(), }; p.CustomerList.Add(new CustomerInfo() { OrderId = "1222", Result = "Success" }); p.CustomerList.Add(new CustomerInfo() { OrderId = "1222", Result = "5562iik" }); //返回序列化之后的xml字符串 string xmlStr =XMLTool.XMLSerialize(p); //对象序列化xml字符串返回结果如下图://xml字符串反序列化为对象 var pt = XMLTool.XmlDeserialize<PersonTest>(xmlStr);
xml反序列为对象结果如下图:XmlDocument document = new XmlDocument(); document.LoadXml(xmlStr); //把xmldocument文档的所有节点和值克隆给xmlNode XmlNode personXmlNode = document.CloneNode(true); //把xmlNode对象反序列化为指定的对象 var person = XMLTool.XmlNodeDeserialize<PersonTest>(personXmlNode);
xmlNode对象反序列化为指定的对象返回结果如下图:Console.ReadKey(); } //复杂的对象,如果不需要使用到别名的话,无需声明XmlRoot,XmlElement,XmlType这些标识 [XmlRoot("PersonInfo")] public class PersonTest { public int Id { get; set; } public string Name { get; set; } //声明xml节点标识 [XmlElement("PersonChildren")] public ChildrenTest Childrens { get; set; } public List<CustomerInfo> CustomerList { get; set; } } public class ChildrenTest { public string ChildernName { get; set; } public int Age { get; set; } } //用户信息 [XmlType(TypeName ="Customers")] public class CustomerInfo { public string Result { get; set; } public string OrderId { get; set; } } }
using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace ConsoleAppTest { //对象与XML互转工具 public class XMLTool { //对象序列化为xml字符串 public static string XMLSerialize<T>(T entity) { StringBuilder buffer = new StringBuilder(); XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); using (TextWriter writer = new StringWriter(buffer)) { xmlSerializer.Serialize(writer, entity, null); } return buffer.ToString(); } //xml字符串反序列化为字符串 public static T XmlDeserialize<T>(string xmlString) { T myObject = default; XmlSerializer serializer = new XmlSerializer(typeof(T)); using (StringReader reader = new StringReader(xmlString)) { myObject = (T)serializer.Deserialize(reader); } return myObject; } //xmlnode反序列化为指定的对象 public static T XmlNodeDeserialize<T>(XmlNode xmlNode) { T myObject = default; XmlSerializer serializer = new XmlSerializer(typeof(T)); using (XmlNodeReader xmlNodeReader = new XmlNodeReader(xmlNode)) { myObject = (T)serializer.Deserialize(xmlNodeReader); } return myObject; } }



浙公网安备 33010602011771号