序列化和反序列化是指什么?序列化(seriallization): 将对象转化为便于传输的数据格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串。 反序列化(deseriallization):将
反序列化(deseriallization):将序列化的数据恢复为对象的过程。 XmlSerializer类
- 该类用一种高度松散耦合的方式提供串行化服务。你的类不需要继承特别的基类,而且它们也不需要实现特别的接口。相反,你只需在你的类或者这些类的公共域以及读/写属性里加上自定义的特性。XmlSerializer通过反射机制读取这些特性并用它们将你的类和类成员映射到xml元素和属性(在对象和 XML 文档之间进行序列化和反序列化操作)。
using System.IO; using System.Xml.Serialization; namespace Practices.Common { public class SimpleSerializer { /// <summary> /// Model实体对象序列化为XML字符串 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="t">Model实体对象</param> /// <returns></returns> public static string SerializeXMLL<T>(T t) { using (StringWriter sw = new StringWriter()) { XmlSerializer xmlSerializer = new XmlSerializer(t.GetType()); xmlSerializer.Serialize(sw, t); return sw.ToString(); } } /// <summary> /// XML反序列化为对象 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="xml">xml字符串</param> /// <returns></returns> public static T Deserialize<T>(string xml) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); StringReader stringReader = new StringReader(xml); return (T)xmlSerializer.Deserialize(stringReader); } } }XmlTypeAttribute类
该类主要控制当属性目标由XML序列化时生成的XML节点。
应用示例/// <summary> /// Envelope /// </summary> [XmlType(TypeName = "envelope")] public class CityRes { public Header header { get; set; } public Response response { get; set; } }XmlElementAttribute类
该类用于指示公共字段或属性在XML序列化或反序列化包含它们的对象时表示XML元素。
应用示例/// <summary> /// Envelope /// </summary> public class CityRes { /// <summary> /// header /// </summary> [XmlElement("header")] public Header header { get; set; } /// <summary> /// response /// </summary> [XmlElement("response")] public Response response { get; set; } }XmlAttributeAttribute类
该类指定XML序列化必须将类成员序列化为XML属性。
应用示例/// <summary> /// Version /// </summary> public class Version { /// <summary> /// port /// </summary> [XmlAttribute("port")] public string port { get; set; } /// <summary> /// host /// </summary> [XmlAttribute("host")] public string host { get; set; } /// <summary> /// text /// </summary> [XmlAttribute("text")] public string text { get; set; } }XmlArrayAttribute类
该类主要用于XML元素数组的应用(相当于就是集合的声明)。
应用示例[XmlArray] public Item []Items { get{return items;} set{items = value;} }XmlTextAttribute类
当Xml文档序列化或反序列化时使用该特性修饰的成员会作为XML文本处理。
应用示例[System.Xml.Serialization.XmlTextAttribute()] public string[] Text { get { return this.textField; } set { this.textField = value; } }XmlIgnoreAttribute类
指示该特性修饰的对象在Xml序列化时不会序列化该特性指定的元素。
应用示例public class TeamGroup { [XmlIgnore] public string Comment; public string GroupName; }用来控制XML序列化的属性汇总
通过将下表中的特性应用于类和类成员,可以控制 XmlSerializer 序列化或反序列化该类的实例的方式。 若要了解这些属性如何控制 XML 序列化,请参阅使用属性控制 XML 序列化。
参考文章
C#: .net序列化及反序列化
用来控制XML序列化的属性
使用属性控制XML序列化
微软官方文档-XML相关类汇总