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); } }}该类主要控制当属性目标由XML序列化时生成的XML节点。
/// <summary> /// Envelope /// </summary> [XmlType(TypeName = "envelope")] public class CityRes { public Header header { get; set; } public Response response { get; set; } }该类用于指示公共字段或属性在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; } }该类指定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; } }该类主要用于XML元素数组的应用(相当于就是集合的声明)。
[XmlArray] public Item []Items { get{return items;} set{items = value;} }当序列化或反序列化包含该成员的类时,向XML序列化指示应将该成员作为XML文本处理。
[System.Xml.Serialization.XmlTextAttribute()] public string[] Text { get { return this.textField; } set { this.textField = value; } }
指示该特性修饰的对象在Xml序列化时不会序列化该特性指定的元素。
public class TeamGroup{ [XmlIgnore] public string Comment; public string GroupName;}通过将下表中的特性应用于类和类成员,可以控制 XmlSerializer 序列化或反序列化该类的实例的方式。 若要了解这些属性如何控制 XML 序列化,请参阅使用属性控制 XML 序列化。
| 特性 | 适用对象 | 指定 |
|---|---|---|
| XmlAnyAttributeAttribute | 公共字段、属性、参数或返回 XmlAttribute 对象数组的返回值。 | 反序列化时,将会使用 XmlAttribute 对象填充数组,而这些对象代表对于架构未知的所有 XML 特性。 |
| XmlAnyElementAttribute | 公共字段、属性、参数或返回 XmlElement 对象数组的返回值。 | 反序列化时,将会使用 XmlElement 对象填充数组,而这些对象代表对于架构未知的所有 XML 元素。 |
| XmlArrayAttribute | 公共字段、属性、参数或返回复杂对象的数组的返回值。 | 数组成员将作为 XML 数组的成员生成。 |
| XmlArrayItemAttribute | 公共字段、属性、参数或返回复杂对象的数组的返回值。 | 可以插入数组的派生类型。 通常与 XmlArrayAttribute 一起应用。 |
| XmlAttributeAttribute | 公共字段、属性、参数或返回值。 | 成员将作为 XML 属性进行序列化。 |
| XmlChoiceIdentifierAttribute | 公共字段、属性、参数或返回值。 | 可以使用枚举进一步消除成员的歧义。 |
| XmlElementAttribute | 公共字段、属性、参数或返回值。 | 字段或属性将作为 XML 元素进行序列化。 |
| XmlEnumAttribute | 作为枚举标识符的公共字段。 | 枚举成员的元素名称。 |
| XmlIgnoreAttribute | 公共属性和公共字段。 | 序列化包含类时,应该忽略属性或字段。 |
| XmlIncludeAttribute | 公共派生类声明,以及 Web 服务描述语言 (WSDL) 文档的公共方法的返回值。 | 生成要在序列化时识别的架构时,应该将该类包括在内。 |
| XmlRootAttribute | 公共类声明。 | 控制视为 XML 根元素的属性目标的 XML 序列化。 使用该属性可进一步指定命名空间和元素名称。 |
| XmlTextAttribute | 公共属性和公共字段。 | 属性或字段应该作为 XML 文本进行序列化。 |
| XmlTypeAttribute | 公共类声明。 | XML 类型的名称和命名空间。 |
C#: .net序列化及反序列化
用来控制XML序列化的属性
使用属性控制XML序列化
微软官方文档-XML相关类汇总
作者:追逐时光者
作者简介:一个热爱编程,善于分享,喜欢学习、探索、尝试新事物,新技术的程序猿。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【♥推荐♥】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确或错误的地方,欢迎指正、补充,不胜感激 !