解惑 DataContractSerializer 数据契约序列器(2)

接着上一篇。

     在这个时候我们可以提出这样一个问题了:为什么两个序列器输出的结果会这样不一样呢?其实,它们两者没有什么可比性 的,DataContractSerializer 的出现并不是为了代替XmlSerializer,而是为了WCF提供一个高效的序列化工具,而且他只是序列化出XmlContent,也就是说它的结果 只有xml的内容部分,并且这些内容能够被 C#中操作xml各个类所识别的(详细参考:http://z.xiaoi.com/r?msdn.microsoft.com%2Fzh- cn%2Flibrary%2Fsystem.runtime.serialization.datacontractserializer.aspx)

   继续看下面一段代码。


代码
 1  [Test]
 2          public   void  Test3()
 3 ExpandedBlockStart.gifContractedBlock.gif         {
 4            List<Person> list = new List<Person>();
 5
 6ExpandedSubBlockStart.gifContractedSubBlock.gif            list.Add(new Person { ID = "1", FirstName = "Lee", LastName = "Jetson" });
 7ExpandedSubBlockStart.gifContractedSubBlock.gif            list.Add(new Person { ID = "1", FirstName = "Chen", LastName = "Mc" });
 8ExpandedSubBlockStart.gifContractedSubBlock.gif            list.Add(new Person { ID = "1", FirstName = "He", LastName = "James" });
 9
10            var ser = new DataContractSerializer(typeof(List<Person>));
11            var ms = new MemoryStream();
12            var writer = XmlDictionaryWriter.CreateTextWriter(ms);
13            ser.WriteObject(writer, list);
14            writer.Close();
15            string xml = Encoding.UTF8.GetString(ms.ToArray());
16            Console.WriteLine(xml);
17        }

 

   输出结果同样是没有 <?xml version="1.0" encoding="utf-8"?>这一个标记。在微软官方的说法是XmlDictionaryWriter是经过优化的xmlwriter,究竟优化是原理这里就不做讨论了。

   到这里,会有一个疑问:DataContractSerializer  序列器不是可以序列化出所要的内容吗,而且能被作为xm源在程序中读出?这样一想好像也是。不过有些时候我们的应用程序不一定只用c#语言编写,可能前台 是javascript或flex的话这样的输出结果就没办法操作了(例如,flex通过请求得出xml就会无法识别)。

   继续下面一段代码:

代码
 1  [Test]
 2          public   void  Test4()
 3 ExpandedBlockStart.gifContractedBlock.gif         {
 4            List<Person> list = new List<Person>();
 5ExpandedSubBlockStart.gifContractedSubBlock.gif            list.Add(new Person { ID = "1", FirstName = "Lee", LastName = "Jetson" });
 6ExpandedSubBlockStart.gifContractedSubBlock.gif            list.Add(new Person { ID = "1", FirstName = "Chen", LastName = "Mc" });
 7ExpandedSubBlockStart.gifContractedSubBlock.gif            list.Add(new Person { ID = "1", FirstName = "He", LastName = "James" });
 8
 9            DataContractSerializer ser = new DataContractSerializer(typeof(List<Person>));
10            MemoryStream ms = new MemoryStream();
11            XmlWriter writer = XmlWriter.Create(ms);
12            
13            ser.WriteObject(writer, list);
14            writer.Flush();
15            writer.Close();
16            string xml = Encoding.UTF8.GetString(ms.ToArray());
17            Console.WriteLine(xml);
18        }

 粗劣一看和Test4好像一样的,其实唯一的不同就是这里用的是XmlWriter 来写xml。输出结果竟然就会有<?xml version="1.0" encoding="utf-8"?>这一个标记。为什么?

转载于:https://www.cnblogs.com/xinggg22/archive/2009/11/27/1611759.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值