今天需要解析一个XML,这个XML和一般情况用.NET的序列化出来的格式不太一样。
我就又补习了一下。
分享一下学习成果吧。
示例代码下载:
http://download.csdn.net/detail/bdstjk/4028340
先给大家看看基础知识吧,后面再给大家贴一个复杂实例
使用属性可以控制对象的 XML 序列化。
默认情况下,XML 元素名称由类或成员名称确定。在名为 Book
的简单类中,字段 ISBN
将生成 XML 元素标记 <ISBN>,如下面的示例所示。
若要重新命名元素,可以更改这种默认行为。下面的代码演示属性 (Attribute) 如何通过设置 XmlElementAttribute 的 ElementName 属性 (Property) 实现此目的。
XmlArrayAttribute 和 XmlArrayItemAttribute 属性旨在用于控制数组的序列化。使用这些属性可以控制元素名称、命名空间以及 XML 架构 (XSD) 数据类型(在万维网联合会 [www.w3.org] 文档“XML 架构第 2 部分:数据类型”中进行了定义)。此外,还可以指定数组所能包含的类型。
对于序列化数组时生成的封闭 XML 元素,其属性将由 XmlArrayAttribute 确定。例如,默认情况下,序列化下面的数组时,将会生成名为Employees
的 XML 元素。Employees
元素将包含在数组类型Employee
之后命名的一系列元素。
序列化实例可能如下所示。
通过应用 XmlArrayAttribute,可以按照以下方式更改 XML 元素的名称。
生成的 XML 可能如下所示。
另一方面,XmlArrayItemAttribute 可以控制如何序列化数组中包含的项。请注意,该属性将应用于返回数组的字段。
生成的 XML 可能如下所示。
序列化派生类
XmlArrayItemAttribute 的另一种用法是,允许序列化派生类。例如,可将派生自 Employee
的另一个名为Manager
的类添加至上一示例中。如果没有应用XmlArrayItemAttribute,代码将在运行时失败,原因是无法识别派生类类型。若要解决这个问题,每次为每个可接受类型(基类和派生类)设置 Type 属性 (Property) 时,需要应用该属性 (Attribute)
两次。
序列化实例可能如下所示。
将数组作为元素序列进行序列化
通过将 XmlElementAttribute 应用于返回数组的字段,还可以将该数组作为 XML 元素的平面序列进行序列化,如下所示。
序列化实例可能如下所示。
区别两种 XML 流的另一个方法是,使用 XML 架构定义工具,从编译好的代码生成 XML 架构 (XSD) 文档文件。没有将属性应用于字段时,架构会以下列方式描述元素。
<xs:element minOccurs="0" maxOccurs ="1" name="Employees" type="ArrayOfEmployee" />
|
将 XmlElementAttribute 应用于字段时,生成的架构会以下列方式描述元素。
<xs:element minOccurs="0" maxOccurs="unbounded" name="Employees" type="Employee" />
|
序列化 ArrayList
ArrayList 类可能包含各种不同对象的集合。因此,可以按照使用数组的类似方式使用 ArrayList。您可以创建返回单个ArrayList 的字段,而不用创建返回类型化对象的数组的字段。但是,与数组相同的是,必须将ArrayList 包含的对象的类型告知 XmlSerializer。为此,需要为该字段分配XmlElementAttribute 的多个实例,如下面的示例所示。
使用 XmlRootAttribute 和 XmlTypeAttribute 控制类的序列化
能且只能应用于一个类的属性有下面两种:XmlRootAttribute 和 XmlTypeAttribute。这两种属性非常相似。XmlRootAttribute 只能应用于一个类:序列化时,该类表示 XML 文档的开始和结束元素,也就是根元素。另一方面,XmlTypeAttribute 可以应用于任何一个类,包括根类。
例如,在上面的示例中,Group
类就是根类,而其所有的公共字段和属性变成 XML 文档中的 XML 元素。因此,只能有一个根类。通过应用XmlRootAttribute,可以控制XmlSerializer 所生成的 XML 流。例如,可以更改元素名称和命名空间。
使用 XmlTypeAttribute 可以控制所生成 XML 的架构。需要通过 XML Web services 发布架构时,这项功能很有用。下面的示例将XmlTypeAttribute 和XmlRootAttribute 同时应用于同一个类。
如果对该类进行编译,并且使用 XML 架构定义工具生成其架构,可能会找到下面描述 Group
的 XML。
<xs:element name="NewGroupName" type="NewTypeName">
|
相比之下,如果是对该类的实例进行序列化,则只能在 XML 文档中找到 NewGroupName
。
<NewGroupName> . . .</NewGroupName>
|
最后来贴一个自己的XML解析实例
XML结构如下:
实例
C#代码如下:
代码有点多
http://write.blog.csdn.net/postedit/7210742
分享到:
相关推荐
.NET xml的序列化及反序列化 c#语言
C# xml序列化及反序列化(解析xml为对象及对象转xml保存),方法一反序列化取节点KV值,方法二反序列化取节点标签值,方法三取节点KV值,并增加节点对象数组及节点标签组合反序列化
天健接口完整版(C#解析XML).使用属性可以控制对象的 XML 序列化. 博客有详细介绍http://blog.csdn.net/bdstjk/article/details/7210742
C#读取XML相关节点,属性,修改XMl
本例子以一个实例的形式讲述了C#实现复杂XML的序列化与反序列化的方法。分享给大家供大家参考。 播客说明:http://www.cnblogs.com/bq-blog/p/xmloper2016.html
通过反序列化,解析Xml文件。非常简单的例子,自己留用
C#中的XmlSerializer无法直接序列化Font和Color类型的数据,这里提供的方法,可以对Font和Color进行序列化
将treeView序列化Xml文件示例,C# 编写。
主要使用C#操作XML和序列化...实现了用户配置信息的序列化存储和XML的操作等(附:源码)
C# 序列化 xml soap json binary
自制C# json XML解析工具 我们项目用起来还是比较实用的!!!!!!!!!
《深入理解C#中的XML》主要讲述C#软件开发中的XML的功能,全书共10章,分别介绍了XML基础语法、应用文档对象模型、用XSLT转换XML文档、利用DTD和XSDSchema验证XML文档、XML文档的读取、ADO.NET的相关知识、....
此例子先用VS生成基于PLCOpen的XSD生成对应的类,然后利用序列化和反序列化的方式写入读取XML文件
xml序列化解析与保存可直接应用于项目中(C#源码) 读取xml文件并解析将解析的结果保存至定义类的对象中; 保存,是将该对象的内容保存至xml配置文件中;
基于C#的.NET Framework程序设计。...第12章 序列化 第13章 远程处理和XML Web Service 第14章 线程和异步编程 第15章 托管代码与非托管代码之间的互操作 第16章 使用Microsoft ADO.NET 访问数据 第17章 属性
可以将已知结构的XMl文件生成C#结构体代码,并将该结构体与xml文件进行互相转换
1.对象序列化的介绍 (1).NET支持对象序列化的几种方式 ...XML序列化:对象序列化之后的结果是XML形式的,通过XmlSerializer 类来实现的,这个类位于System.Xml.Serialization命名空间下。XML序列化不能序列化私有数据。
xml序列化和反序列化 c#
C#Xml序列化与反序列化,适用于与第三方系统做接口,入参和出参为XML,XML自动转实体,实体自动转Xml