是否可以使用我自己的序列化程序替换Windows Communication Foundation中的dataContractSerializer。如果有可能,我该如何实现?
是否可以使用我自己的序列化程序替换Windows Communication Foundation中的dataContractSerializer。如果有可能,我该如何实现?
是的,您可以提供自己的序列化程序实现。默认情况下,WCF将使用 DataContractSerializer
。要提供自己的序列化程序,您必须自己编写 IOperationBehavior
寻找并删除目前适用的 DataContractSerializerOperationBehavior
来自 OperationDescription::Behaviors
集合然后应用一个自定义实例 DataContractSerializerOperationBehavior
。然后DataContractSerializerOperationBehavior负责构造 XmlObjectSerializer
在它的实施 CreateSerializer
工厂方法。对于一些代码示例,如何执行此操作, 看看Dan Rigsby的这篇文章。
从那里开始,就是实现自己的自定义 XmlObjectSerializer
这将允许您将XML信息集序列化为您想要的任何表示。
是的,您可以提供自己的序列化程序实现。默认情况下,WCF将使用 DataContractSerializer
。要提供自己的序列化程序,您必须自己编写 IOperationBehavior
寻找并删除目前适用的 DataContractSerializerOperationBehavior
来自 OperationDescription::Behaviors
集合然后应用一个自定义实例 DataContractSerializerOperationBehavior
。然后DataContractSerializerOperationBehavior负责构造 XmlObjectSerializer
在它的实施 CreateSerializer
工厂方法。对于一些代码示例,如何执行此操作, 看看Dan Rigsby的这篇文章。
从那里开始,就是实现自己的自定义 XmlObjectSerializer
这将允许您将XML信息集序列化为您想要的任何表示。
WCF团队在介绍DataContractJsonSerializer时就这样做了。
有 远 比其他两个答案中提到的接触点更多 - 例如,您可能必须引入和更改正在使用的操作行为和操作格式化程序,添加新的编码器,以及添加全新的服务和客户端行为。这取决于新的序列化格式是什么以及您尝试做什么。
但是,如果您的目标是仅为独立序列化添加新的序列化程序,则更简单。
我建议的是 - 在System.Runtime.Serialization.dll,System.ServiceModel.Web.dll和System.Runtime.ServiceModel.dll中查看DataContractJsonSerializer(通过Reflector)的所有不同用法。
如果您只对独立序列化方面感兴趣,只需查看DataContractJsonSerializer以及Serialization命名空间中的关联类。您应该非常直观地掌握自定义序列化实现的各种细微之处。如果您有具体问题,请随时提出,但我确信这是学习这一特定解决方案的最快捷,最优雅的方式......
通常你放置属性 [DatacontractSerializer]
要么 [XmlSerializer]
在服务合同之上,我很确定你可以创建自己的,因此为什么你将它们作为属性应用,现在如果只是 反射器 会启动,以便我可以检查XmlSerializer,并找出是什么让它打勾。
MSDN 坚持要通过XmlSerializer序列化的类必须用。来装饰 [XmlAttribute]
要么 [XmlElement]
属性(因为它可以理解地为xml文件提供更多的形状),但是如果你的类用它来装饰,它确实有效 [DataMember]
,与DataContractSerializer兼容,因此您应该能够创建自己的序列化程序,使用[DataMember]标记序列化任何内容,就像XmlSerializer一样