邙山之巅 承接网站建设 + 网站推广 + 网站优化 + IDC + 网络广告等业务。

本博客网页模板,经过SEO优化和测试, 保证其 完整性 + 无错性 + 美观性 + 最简性 !
完整性 -头部尾部完整,首页,列表,内容完整.无错性 -整站模板安装即可使用,Js无错误,兼容IE6,IE7,ie8,FF
美观性 -整体协调,美观大方,配色合理.最简性 -采取DIV+CSS布局,整站无垃圾代码,架构合理,减少下载时间,节省带宽

数据契约的定义与数据契约序列化器(2.1)

时间:2011-12-27 23:31来源: 作者:admin 点击:

基于DataContractSerializer的序列化规则

与在5.1节介绍XmlSerializer的序列化规则一样,现在我们通过一个具体的例子来介绍DataContractSerializer是如何进行序列化的,以及采用怎样的序列化规则。照例定义一个泛型的辅助方法进行专门的序列化工作,最终生成的XML保存到一个XML文件中。


  1. public static void Serialize<T>(T instance, string fileName)  
  2. {  
  3.     DataContractSerializer serializer new 
    DataContractSerializer(typeof(T));  
  4.     using (XmlWriter writer new 
    XmlTextWriter(fileName, Encoding.UTF8))  
  5.     {  
  6.         serializer.WriteObject(writer, instance);  
  7.     }  
  8.     Process.Start(fileName);  

我们需要对一个Order对象进行序列化,Order类型的定义如下。实际上定义了两个数据契约:OrderBase和Order,Order继承于OrderBase。


  1. namespace Artech.DataContractSerializerDemos  
  2. {  
  3.     [DataContract]  
  4.     public class OrderBase  
  5.     {  
  6.         [DataMember]  
  7.         public Guid ID  
  8.         get; set; }  
  9.  
  10.         [DataMember]  
  11.         public DateTime Date  
  12.         get; set; }  
  13.  
  14.         [DataMember]  
  15.         public string Customer  
  16.         get; set; }  
  17.  
  18.         [DataMember]  
  19.         public string ShipAddress  
  20.         get; set; }  
  21.  
  22.         public double TotalPrice  
  23.         get; set; }  
  24.     }  
  25.  
  26.     [DataContract]  
  27.     public class Order OrderBase  
  28.     {  
  29.         [DataMember]  
  30.         public string PaymentType  
  31.         get; set; }  
  32.     }  

通过下面的代码对创建的Order对象进行序列化,会生成一段XML。


  1. Order order new Order()  
  2. {  
  3.     ID Guid.NewGuid(),  
  4.     Date DateTime.Today,  
  5.     Customer "NCS",  
  6.     ShipAddress "#328, Airport Rd, Industrial 
    Park, Suzhou JiangSu Province"
    ,  
  7.     TotalPrice 8888,  
  8.     PaymentType "Credit Card" 
  9. };  
  10. Serialize(order, @"E:\order.xml");  
  11. <Order xmlns:i="http://www.w3.org/2001/XMLSchema-
    instance"
     xmlns="http://  
  12.   schemas.datacontract.org/2004/07/Artech.
    DataContractSerializerDemos"
    > 
  13.     <Customer>NCS</Customer> 
  14.     <Date>2008-12-03T00:00:00+08:00</Date> 
  15.     <ID>5fdbee36-e29e-48d2-b45f-6fd4beba54d6</ID> 
  16.     <ShipAddress>#328, Airport Rd, Industrial Park, 
    Suzhou JiangSu   
  17.       Province</ShipAddress> 
  18.     <PaymentType>Credit Card</PaymentType> 
  19. </Order> 

将数据契约与最终生成的XML结构进行对比,我们可以看出DataContractSerializer在默认的情况下采用了如下的序列化规则。

XML的根节点名称为数据契约类型的名称,默认的命名空间采用这样的格式:{数据契约类型的命名空间};

只有显式应用了DataMemberAttribute特性的字段或属性才能作为数据成员采用,才会参与序列化(比如TotalPrice属性的值不会出现在序列化后的XML中);

所有数据成员均以XML元素的形式被序列化;

序列化后数据成员在XML的次序采用这样的规则:父类数据成员在前,子类数据成员在后;定义在同一个类型的数据成员按照字母排序。


(责任编辑:admin)
首页 - 技术交流 - 生活感悟 - 影视音乐 - 网址导航 - 图片收藏 - 实用工具 - 网站地图 - 百度地图 - RSS地图
邙山之巅:软件攻城师,互联网砖家,山水田园诗人,著名的思想家,政治家,文学家。
是中华人民共和国合法公民,在计算机软件方面有较高造诣。著有《放羊的那些事》一书,书中描绘了自己童年时代放羊的美好时光,
告诫人们要保护环境,否则以后只能在上海的南京路上放羊了。同时脑细胞异常活跃,经常胡思乱想,目前正在思考如何解决“欧债危机”和“美债危机”这两个世界级难题。
邙山之巅:从小就饱读诗书,学前班连上五年,破世界吉尼斯纪录,因此基础知识功底非常深厚。7岁能够看懂A片,8岁可以腾云吐雾,9岁号称千杯不倒,10岁已然有了一次轰轰烈烈的恋爱。此时此刻,很多东西对他来说早已是风轻云淡。后来考取了美国法克由大学的全能博士学位,成为华人中获得此高等学位的第一人。
在计算机方面的成就:精通C,C++,C#,JAVA,PHP,ASP,VB,DELPHI,ORACLE,MYSQL等。尤其精通网页前后台,设计,DIV+CSS,PHP+MYSQL,js,以及各种流行CMS。
新公司堆积3个月的活,被其一周干完。曾因技术过强,工作效率过高,而遭人嫉妒。 政治学方面成就:成功收复台湾,维护了台海稳定。
经济学方面的成就:帮助世界各国成功度过经济危机,并且成功预测了后经济危机时代的到来。 文学方面的成就:著《放羊的那些事》,以及10篇评论性文章,均未发表或出版。
Copyright ◎ 2012-2022 lixinwei.cn 邙山之巅 版权所有
豫ICP备17045676号-1 给我写信