`
coolsooner
  • 浏览: 1373380 次
文章分类
社区版块
存档分类
最新评论

C#.NET解析XML(使用属性控制 XML 序列化)

 
阅读更多

今天需要解析一个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 发布架构时,这项功能很有用。下面的示例将XmlTypeAttributeXmlRootAttribute 同时应用于同一个类。


如果对该类进行编译,并且使用 XML 架构定义工具生成其架构,可能会找到下面描述 Group 的 XML。

<xs:element name="NewGroupName" type="NewTypeName">

相比之下,如果是对该类的实例进行序列化,则只能在 XML 文档中找到 NewGroupName

<NewGroupName> . . .</NewGroupName>

最后来贴一个自己的XML解析实例

XML结构如下:


实例

C#代码如下:

代码有点多


http://write.blog.csdn.net/postedit/7210742

分享到:
评论

相关推荐

    C#.NET XmlForm开发技术源码及文档

    4. XmlSerializer:这是.NET框架中用于序列化和反序列化对象到XML的类。开发者可以使用它将对象的状态保存到XML文件,或者从XML文件中恢复对象状态。 5. XSLT(Extensible Stylesheet Language Transformations):...

    C# .Net 操作xml数据类

    五、XML序列化和反序列化 .NET框架还支持将对象序列化为XML和从XML反序列化回对象,这在数据传输和持久化时非常有用: ```csharp // 序列化 public class MyClass { public string Name { get; set; } } MyClass ...

    asp.net xml高级编程 c#编程篇

    6. **XML序列化**: - 对象到XML:将C#对象转换为XML字符串,便于存储或传输。 - XML到对象:反序列化XML字符串,恢复为C#对象。 7. **XML和数据库**: - XML存储过程:SQL Server支持XML类型的字段,可以执行...

    ASP.NET 2.0 XML高级编程

    7. **XML序列化和反序列化**:XML序列化是将对象状态转换为XML的过程,反序列化则是相反的操作。这一章节会讲解如何在ASP.NET 2.0中实现对象和XML之间的转换。 8. **XML WebParts和个性化**:XML WebParts是ASP.NET...

    ASP.NET.XML C# 高级编程

    6. **XML处理**:DOM、SAX和LINQ to XML的解析方法,XML序列化和反序列化,XSLT转换。 7. **数据库交互**:ADO.NET、Entity Framework等数据访问技术,以及SQL Server和XML的集成。 8. **Web服务与API**:SOAP Web...

    .NET xml序列化及反序列化

    总结来说,`.NET Framework`中的XML序列化和反序列化是通过`XmlSerializer`类实现的,它利用了C#类的特性来控制XML的生成和解析。开发者可以通过自定义特性来控制XML的结构,以适应特定的需求。这一功能在软件开发中...

    C#序列化与反序列化(包括复杂xml对象)

    本文将深入探讨C#中的XML序列化和反序列化技术,包括如何将XML文档解析为对象,以及如何将对象转换回XML文档进行存储。我们将详细讲解三种方法,涵盖从XML节点获取键值对(KV值)到处理对象数组和节点标签组合的反...

    ASP.NET XML with C# 源代码

    ASP.NET XML with C# 是一个重要的开发主题,它涉及到如何在ASP.NET环境中使用C#语言处理XML数据。XML(eXtensible Markup Language)是一种结构化数据格式,广泛用于存储和传输数据,尤其是在Web服务和应用程序之间...

    C#读取XML 的节点,以及属性

    在IT行业中,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,广泛应用在...理解并熟练运用这些技术,可以帮助你更好地处理XML数据,实现数据的序列化与反序列化,进行数据交换和存储等任务。

    天健接口完整版(C#解析XML)

    博客文章"http://blog.csdn.net/bdstjk/article/details/7210742"提供了更多关于如何在C#中使用XML序列化实现天健接口的详细信息,包括示例代码和实际应用技巧,可以帮助开发者更好地理解和实践这一技术。...

    asp.net和xml教程

    4. **XML序列化**:ASP.NET可以将对象序列化为XML,方便数据的保存和传输。反之,也可以反序列化XML回对象,便于处理。 5. **Web服务和SOAP**:ASP.NET Web Services常使用XML作为数据交换格式,通过SOAP(简单对象...

    通过xsd产生C#实体类解析XML或生成XML

    本教程将详细介绍如何使用XSD文件生成C#实体类,以便于解析XML数据和生成XML文档。 首先,我们需要一个XSD文件,它定义了XML文档的结构和数据类型。XSD文件使用元素、属性和约束来描述XML文档的结构。例如,一个...

    asp.net读取XML文件

    在ASP.NET中,XML文件是一种常见的数据存储格式,它轻量级、结构...在实际项目中,可以根据需求扩展这个类,添加更多功能,如XML序列化和反序列化、XML验证等。通过封装这些常用操作,可以使代码更加整洁,易于维护。

    C#json与Xml相互转换例子

    在.NET编程环境中,C#是一种常用的编程语言,而JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据交换格式。本文将深入探讨如何在C#中实现JSON与XML的相互转换,以满足...

    .NET XML序列化为实体类与反序列化

    .NET框架中的XML序列化和反序列化是将XML文档数据转换为C#对象,以及将C#对象转换回XML文档的重要技术。这个过程对于数据交换、持久化存储和跨平台通信非常有用。以下是对".NET XML序列化为实体类与反序列化"这一...

    C#.NET 开发者手册

    8. **文件I/O操作**:学习如何读写文件,操作流,以及XML和JSON的数据序列化。 9. **网络编程**:了解Socket编程,HTTP请求和响应,以及Web服务(如SOAP和RESTful)的实现。 10. **数据库访问**:学习ADO.NET,...

    Xml反序列化

    1. **创建一个XML序列化类**:首先,我们需要定义一个类,该类的属性与XML文件中的元素相对应。例如,如果XML文件包含电源配置信息,可能有一个类名为`PowerConfig`,其中包含如`Voltage`、`Current`和`Frequency`等...

    Visual C#.NET 应用编程150例源码

    14. **XML和JSON解析**:处理XML和JSON数据,进行序列化和反序列化操作。 15. **设计模式**:例如工厂模式、单例模式、观察者模式等经典设计模式的实现。 每个源码实例都是一个独立的学习点,通过实际操作和调试...

    XML序列化与反序列化 实战

    XML序列化与反序列化是.NET框架中处理数据交换的重要技术,它允许我们将对象的状态转换为XML格式的数据,也可以将XML数据恢复为等效的对象。这个实战项目专注于使用C#实现这一过程,使得开发者能够方便地在XML文件和...

    一个C#+ASP.NET+XML开发的WEB工作流程图组件源码

    在本项目中,XML可能被用来存储和序列化工作流程的配置信息,如节点定义、连接关系、工作流状态等,使得这些信息可以跨应用程序和平台共享。 工作流程图组件的核心功能包括: 1. **节点管理**:组件应能创建、编辑...

Global site tag (gtag.js) - Google Analytics