综合应用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,如需转载请自行联系原作者
目录
相关文章
|
3天前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
18 1
|
4月前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
78 0
|
4月前
|
XML 存储 BI
如何把一个 ABAP 类的实例,序列化成 XML 字符串试读版
如何把一个 ABAP 类的实例,序列化成 XML 字符串试读版
|
4月前
|
XML 存储 API
[序列化协议] --- XML
[序列化协议] --- XML
64 0
|
4月前
|
XML 存储 JSON
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
开发时经常会遇到需要保存配置的情况,最常见的实现方式是将对象序列化成Json,再写入文件并保存到本地磁盘。 本文将使用开源库**ApeFree.DataStore**来替换原有的对象存储过程,实现一个可以随意切换存储方式的对象存储方法。 ApeFree.DataStore是一款可配置的对象存储库,支持在不同平台/介质中对内存中的对象进行存储与还原(如本地存储、注册表存储)。支持配置序列化格式(如Json、Xml),支持配置压缩算法(如GZip、Defalte),支持配置加密算法(如AES、RSA)。
109 0
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
|
XML JSON 数据格式
.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
270 0
|
存储 XML JSON
二进制序列化器、XML序列化器、Json序列化器
序列化是将对象的状态信息转换未可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区读取或反序列化对象的状态,重新创建对象。
|
XML 开发框架 .NET
XML基础学习02&lt;linq to xml&gt;
XML基础学习02&lt;linq to xml&gt;
155 0
XML基础学习02&lt;linq to xml&gt;
|
XML JavaScript 数据格式
【Groovy】xml 序列化 ( 使用 StreamingMarkupBuilder 生成 xml 数据 | mkp.xmlDeclaration() 生成 xml 版本数据 )
【Groovy】xml 序列化 ( 使用 StreamingMarkupBuilder 生成 xml 数据 | mkp.xmlDeclaration() 生成 xml 版本数据 )
368 0
【Groovy】xml 序列化 ( 使用 StreamingMarkupBuilder 生成 xml 数据 | mkp.xmlDeclaration() 生成 xml 版本数据 )
|
XML 数据格式
【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 标签闭包下创建子标签 | 使用 MarkupBuilderHelper 添加 xml 注释 )
【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 标签闭包下创建子标签 | 使用 MarkupBuilderHelper 添加 xml 注释 )
329 0
【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 标签闭包下创建子标签 | 使用 MarkupBuilderHelper 添加 xml 注释 )

相关课程

更多