综合应用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 IDE
C#复杂XML反序列化为实体对象两种方式 (上)
C#复杂XML反序列化为实体对象两种方式
180 0
C#复杂XML反序列化为实体对象两种方式 (上)
|
XML JSON 数据格式
.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
240 0
|
XML 开发框架 .NET
XML基础学习02&lt;linq to xml&gt;
XML基础学习02&lt;linq to xml&gt;
143 0
XML基础学习02&lt;linq to xml&gt;
|
XML 存储 开发框架
Linq To XML总结
Linq To XML总结
84 0
Linq To XML总结
|
数据格式 XML Windows
如何加速XML反序列化(精简框架集2.0SP1,WinCE4.2) -- 寻求微软技术支持记
其实这个问题在2007/3/13 就提交到了微软技术支持,但直到今天,对这个问题还没有一个完美的结果(他们最好的建议就是,自己解析XML文件),只好请求微软的技术支持把这个问题close掉
1012 1
|
开发者 开发工具 定位技术
|
XML JavaScript .NET