WCF 第六章 序列化和编码之NetDataContractSerializer
2010-12-15 17:56 DanielWise 阅读(1524) 评论(0) 编辑 收藏 举报NetDataContractSerializer是WCF中一个可以替代的序列化方法,它允许类型共享。这个类可以再System.Runtime.Serialization命名空间中找到。当类型必须在客户端和服务端保持正确时会使用这个序列化方法。NetDataContractSerializer通过对CLR类型添加额外信息并保存引用来支持类型精确。除了这个,在NetDataContractSerializer和DataContractSerializer之间没有任何不同。
类型信息的共享与仅仅共享契约的原则是相悖的。因为NetDataContractSerializer并不意味着在不同应用程序间设计服务和必须在一个单一应用程序限制内使用。这也是为什么使用NetDataContractSerializer的能力已经超出了WCF的范畴。这意味着只有当你写额外的代码时这个功能才可用。如果使能这个特性将在"使用NetDataContractSerializer共享类型"部分介绍。
让我们一起看一下使用DataContractSerializer和NetDataContractSerializer来将Employee类的一个特殊实例序列化。我们已经在列表6.4了解了如何使用DataContractSerializer来序列化Employee契约。列表6.6 显示了如何使用NetDataContractSerializer序列化同样的类。注意NetDataContractSerializer不需要给它的构造函数传一个类型。这是因为NetDataContractSerializer将会在运行时确定Employee类的CLR类型。
列表5.5 使用NetDataContractSerializer的序列化
1 2 3 4 5 6 7 8 9 10 11 | class Program { static void Main( string [] args) { Employee e = new Employee(101, "Daniel" , "Dong" ); FileStream writer = new FileStream( "sample.xml" , FileMode.Create); NetDataContractSerializer ser = new NetDataContractSerializer(); ser.WriteObject(writer, e); writer.Close(); } } |
列表6.7 显示了Employee类的序列化结果。注意NetDataContractSerializer包含了程序集的名字和被序列化类型的类型。这个额外信息可以用来将XML反序列化成特殊类型。这允许相同类型可以在客户端和服务端同时使用。另外的信息是z:Id 属性在不同的元素上意义是不同的。这个用来处理引用类型以及当XML被反序列化时是否引用可以保留。我们将在"保留引用和循环使用引用"部分讨论如何保留引用。最后的结论是这个输出相比DataContractSerializer的输出包含了更多信息。
列表6.7 使用NetDataContractSerializer序列化Employee类
1 2 3 4 5 6 7 8 | < Employee z:Id="1" z:Type="EssentialWCF.Employee" z:Assembly="EssentialWCF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" xmlns="http://schemas.datacontract.org/2004/07/EssentialWCF" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"> < EmployeeID >101</ EmployeeID > < FirstName z:Id="2">Daniel</ FirstName > < LastName z:Id="3">Dong</ LastName > </ Employee > |
作者:DanielWise
出处:http://www.cnblogs.com/danielWise/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述