您现在的位置是:网站首页> 编程资料编程资料

.NET中XML序列化和反序列化常用类和属性小结_实用技巧_

2023-05-24 466人已围观

简介 .NET中XML序列化和反序列化常用类和属性小结_实用技巧_

序列化和反序列化是指什么?

序列化(seriallization): 将对象转化为便于传输的数据格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串。
反序列化(deseriallization):将序列化的数据恢复为对象的过程。

XmlSerializer类

  该类用一种高度松散耦合的方式提供串行化服务。你的类不需要继承特别的基类,而且它们也不需要实现特别的接口。相反,你只需在你的类或者这些类的公共域以及读/写属性里加上自定义的特性。XmlSerializer通过反射机制读取这些特性并用它们将你的类和类成员映射到xml元素和属性(在对象和 XML 文档之间进行序列化和反序列化操作)。

.NET-XML序列化和反序列化简单示例代码

using System.IO; using System.Xml.Serialization; namespace Practices.Common { public class SimpleSerializer { ///  /// Model实体对象序列化为XML字符串 ///  /// 对象类型 /// Model实体对象 ///  public static string SerializeXMLL(T t) { using (StringWriter sw = new StringWriter()) { XmlSerializer xmlSerializer = new XmlSerializer(t.GetType()); xmlSerializer.Serialize(sw, t); return sw.ToString(); } } ///  /// XML反序列化为对象 ///  /// 对象类型 /// xml字符串 ///  public static T Deserialize(string xml) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); StringReader stringReader = new StringReader(xml); return (T)xmlSerializer.Deserialize(stringReader); } } } 

XmlTypeAttribute类

   该类主要控制当属性目标由XML序列化时生成的XML节点。

应用示例

///  /// Envelope ///  [XmlType(TypeName = "envelope")] public class CityRes { public Header header { get; set; } public Response response { get; set; } }

XmlElementAttribute类

   该类用于指示公共字段或属性在XML序列化或反序列化包含它们的对象时表示XML元素。

应用示例

///  /// Envelope ///  public class CityRes { ///  /// header ///  [XmlElement("header")] public Header header { get; set; } ///  /// response ///  [XmlElement("response")] public Response response { get; set; } }

XmlAttributeAttribute类

  该类指定XML序列化必须将类成员序列化为XML属性。

应用示例

///  /// Version ///  public class Version { ///  /// port ///  [XmlAttribute("port")] public string port { get; set; } ///  /// host ///  [XmlAttribute("host")] public string host { get; set; } ///  /// text ///  [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 序列化

特性适用对象指定
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序列化

提示: 本文由整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!

-六神源码网