C#.NET解析XML(使用属性控制 XML 序列化)分类:DotNet 发布时间:2016/3/10 20:59:45
今天需要解析一个XML,这个XML和一般情况用.NET的序列化出来的格式不太一样。 我就又补习了一下。 分享一下学习成果吧。 示例代码下载: http://download.csdn.net/detail/bdstjk/4028340 先给大家看看基础知识吧,后面再给大家贴一个复杂实例
使用属性可以控制对象的 XML 序列化。 默认情况下,XML 元素名称由类或成员名称确定。在名为
XmlArrayAttribute 和 XmlArrayItemAttribute 属性旨在用于控制数组的序列化。使用这些属性可以控制元素名称、命名空间以及 XML 架构 (XSD) 数据类型(在万维网联合会 [www.w3.org] 文档“XML 架构第 2 部分:数据类型”中进行了定义)。此外,还可以指定数组所能包含的类型。 对于序列化数组时生成的封闭 XML 元素,其属性将由 XmlArrayAttribute 确定。例如,默认情况下,序列化下面的数组时,将会生成名为
通过应用 XmlArrayAttribute,可以按照以下方式更改 XML 元素的名称。
生成的 XML 可能如下所示。
另一方面,XmlArrayItemAttribute 可以控制如何序列化数组中包含的项。请注意,该属性将应用于返回数组的字段。
生成的 XML 可能如下所示。
序列化派生类XmlArrayItemAttribute 的另一种用法是,允许序列化派生类。例如,可将派生自
序列化实例可能如下所示。
将数组作为元素序列进行序列化通过将 XmlElementAttribute 应用于返回数组的字段,还可以将该数组作为 XML 元素的平面序列进行序列化,如下所示。
序列化实例可能如下所示。
区别两种 XML 流的另一个方法是,使用 XML 架构定义工具,从编译好的代码生成 XML 架构 (XSD) 文档文件。没有将属性应用于字段时,架构会以下列方式描述元素。
将 XmlElementAttribute 应用于字段时,生成的架构会以下列方式描述元素。
序列化 ArrayListArrayList 类可能包含各种不同对象的集合。因此,可以按照使用数组的类似方式使用 ArrayList。您可以创建返回单个ArrayList 的字段,而不用创建返回类型化对象的数组的字段。但是,与数组相同的是,必须将ArrayList 包含的对象的类型告知 XmlSerializer。为此,需要为该字段分配XmlElementAttribute 的多个实例,如下面的示例所示。
使用 XmlRootAttribute 和 XmlTypeAttribute 控制类的序列化能且只能应用于一个类的属性有下面两种:XmlRootAttribute 和 XmlTypeAttribute。这两种属性非常相似。XmlRootAttribute 只能应用于一个类:序列化时,该类表示 XML 文档的开始和结束元素,也就是根元素。另一方面,XmlTypeAttribute 可以应用于任何一个类,包括根类。 例如,在上面的示例中, 使用 XmlTypeAttribute 可以控制所生成 XML 的架构。需要通过 XML Web services 发布架构时,这项功能很有用。下面的示例将XmlTypeAttribute 和XmlRootAttribute 同时应用于同一个类。
如果对该类进行编译,并且使用 XML 架构定义工具生成其架构,可能会找到下面描述
相比之下,如果是对该类的实例进行序列化,则只能在 XML 文档中找到
最后来贴一个自己的XML解析实例 XML结构如下:
实例 C#代码如下: 代码有点多
|
|
||||||||||||||


最新评论