综合应用WPF/WCF/WF/LINQ之三十二:XML的反序列化

简介:
XML的反序列化,也就是将XML直接转为一个类。一个类的序列化,也就是将类直接转为为一个XML。
  通过XML对象进行读取XML元素的做法,非常低效而又复杂。而采用XML的反序列化技术,则异常简单。
  下面是一个简单XML。它表示root节点下面可能有很多table节点,而每个table节点下面又可能有很多item节点。
    1  <? xml   version =" 1.0"   encoding =" utf-8"  ?>
    2  < root >
    3      < table   name =" Department"   referenced =" Department is referenced." >
    4          < item   name =" DepartmentName"   duplicated =" Department Name is duplicated."  />
    5      </ table >
    6      < table   name =" Employee"   referenced =" Employee is referenced." >
    7          < item   name =" EmployeeNo"   duplicated =" Employee No is duplicated."  />
    8          < item   name =" EmployeeName"   duplicated =" Employee Name is duplicated."  />
    9      </ table >
   10  </ root >
  为了实现XML的反序列化,我们需要先定义相应的类。
  对应的root节点为Checks类,table节点为Table类,item节点为Content类。
  root节点下可能有很多table节点,则在Checks类中添加一个Tables属性。
  ElementName = "table"表示table节点的名字为table,如果不加,则默认为Table。
  table节点还有一些属性,如name,则需要在Table类中添加Name属性。
  其它规则类似,则形成了一个多层的,和XML描述的内容相同的类。
    1  using System;
    2  using System.Collections.Generic;
    3  using System.Linq;
    4  using System.Text;
    5  using System.Xml.Serialization;
    6 
    7  namespace Eallies.Utilities.ContractToBLL
    8 {
    9     [ Serializable]
   10     [ XmlRootAttribute( "root")]
   11      public  class  Checks
   12     {
   13          private  List< Table> _Tables =  new  List< Table>();
   14 
   15         [ XmlElementAttribute(ElementName =  "table", Type =  typeof( Table))]
   16          public  List< Table> Tables
   17         {
   18              get {  return  this._Tables; }
   19              set {  this._Tables =  value; }
   20         }
   21     }
   22 
   23     [ Serializable]
   24      public  class  Table
   25     {
   26          private  List< Content> _Contents =  new  List< Content>();
   27 
   28         [ XmlAttribute(AttributeName =  "name")]
   29          public  string Name {  getset; }
   30 
   31         [ XmlAttribute(AttributeName =  "referenced")]
   32          public  string Referenced {  getset; }
   33 
   34         [ XmlElementAttribute(ElementName =  "item", Type =  typeof( Content))]
   35          public  List< Content> Contents
   36         {
   37              get {  return  this._Contents; }
   38              set {  this._Contents =  value; }
   39         }
   40     }
   41 
   42     [ Serializable]
   43      public  class  Content
   44     {
   45         [ XmlAttribute(AttributeName =  "name")]
   46          public  string Name {  getset; }
   47 
   48         [ XmlAttribute(AttributeName =  "duplicated")]
   49          public  string Duplicated {  getset; }
   50     }
   51 }
  完成类之后,我们就可以很简单的实现将XML一次性转化为类。这样之后,访问其值就变成访问一个类中的属性了,这就变得异常简单了。
    1      private  static  Checks ChecksDeserialize( string checks)
    2     {
    3          try
    4         {
    5              XmlSerializer objSerializer =  new  XmlSerializer( typeof( Checks));
    6              Stream        objStream    =  new  FileStream(checks,  FileMode.Open,  FileAccess.Read,  FileShare.ReadWrite);
    7              Checks        objChecks    =  null;
    8 
    9             objChecks = ( Checks)objSerializer.Deserialize(objStream);
   10 
   11             objStream.Close();
   12 
   13              return objChecks;
   14         }
   15          catch
   16         {
   17              throw;
   18         }
   19     }




本文转自 Eallies 51CTO博客,原文链接:http://blog.51cto.com/eallies/79006,如需转载请自行联系原作者
目录
相关文章
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
220 1
|
XML 存储 数据库
XML在数据库中有哪些应用?
【10月更文挑战第17天】XML在数据库中有哪些应用?
392 2
|
XML 网络协议 Java
XML Web 服务技术解析:WSDL 与 SOAP 原理、应用案例一览
XML Web服务是基于WSDL、SOAP、RDF和RSS等标准的网络应用程序组件技术。WSDL描述服务接口和消息格式,SOAP用于结构化信息交换,RDF描述网络资源,RSS则用于发布网站更新。Web服务特点是自包含、自描述,基于开放协议,可重用且能连接现有软件。WSDL文档包含`types`、`message`、`portType`和`binding`元素,定义服务操作和协议。SOAP协议规定消息格式,通过HTTP等传输。
742 1
|
XML 存储 C#
C# xml文档反序列化记事
本文介绍了使用XmlSerializer进行XML序列化和反序列化的关键点。包括:1) 以独占方式读取XML文件以避免并发问题;2) 当元素名与类型名不一致时,可通过`[XmlArrayItem]`指定元素名,或创建继承自原始类型的子类;3) 处理DateTime反序列化错误,通过中间字符串属性转换;4) 提到了常用C#特性如`[XmlRoot]`, `[XmlElement]`, `[XmlAttribute]`, `[XmlIgnore]`和`[XmlArrayItem]`的作用。
251 0
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
608 0
|
XML JSON JavaScript
Java中XML和JSON的比较与应用指南
本文对比了Java中XML和JSON的使用,XML以自我描述性和可扩展性著称,适合结构复杂、需验证的场景,但语法冗长。JSON结构简洁,适用于轻量级数据交换,但不支持命名空间。在Java中,处理XML可使用DOM、SAX解析器或XPath,而JSON可借助GSON、Jackson库。根据需求选择合适格式,注意安全、性能和可读性。
355 0
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
407 0
|
XML 存储 JSON
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
开发时经常会遇到需要保存配置的情况,最常见的实现方式是将对象序列化成Json,再写入文件并保存到本地磁盘。 本文将使用开源库**ApeFree.DataStore**来替换原有的对象存储过程,实现一个可以随意切换存储方式的对象存储方法。 ApeFree.DataStore是一款可配置的对象存储库,支持在不同平台/介质中对内存中的对象进行存储与还原(如本地存储、注册表存储)。支持配置序列化格式(如Json、Xml),支持配置压缩算法(如GZip、Defalte),支持配置加密算法(如AES、RSA)。
426 0
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
|
XML 存储 API
[序列化协议] --- XML
[序列化协议] --- XML
191 0
|
XML 存储 消息中间件
XML DTD介绍以及应用
DTD介绍 文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。 DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
181 0

相关课程

更多