2

在.NET 3.5中,我想要创建一个将序列化行为从DataContractSerializer切换到NetDataContractSerializer的自定义属性(说[NetDataMember])。将属性序列化切换到NetDataContractSerializer的自定义属性

基本上,对于一类A如下图所示

[DataContract] 
class A 
{ 
    [DataMember] 
    public int SimpleProperty { get; set; } 

    [Transcient] 
    public IBar ComplexProperty { get; set; } 
} 

我想获得串行器将表现得像DataContractSerializer默认,但是这将与NetDataContractSerializer被重写为属性标有[NetDataMember]

任何想法如何设计一个序列化器,将实现这样的行为?

回答

6

WCF没有“开箱即用”的方式来做到这一点 - 但很多非常聪明的人已经解决了这个问题。

退房亚伦Skonnard的blog post on the NetDataContractSerializer中,他提出,你可以把你的数据契约作为一种属性的行为:

[NetDataContractFormat] 

您的服务接口(所有方法),要么在一个单一的方法将使用NetDataContractSerializer用于该调用。您需要根据操作或服务来定义这一点,而不是在数据合同上。

+0

感谢您的链接。其实,我无法设法产生覆盖效应。我正在应用该属性,但重写行为从不在(序列化)时间被调用。实例化DCS时是否缺少一些? – 2009-12-12 09:21:06

+0

反序列化时,在WCF中,没有任何构造函数被调用 - 这是一个正常的行为。 – 2009-12-12 09:33:50

+0

但是要查看是否正在使用NetDataContractSerializer,您应该查看正在发送的消息 - 可以使用Visual Studio Common7/IDE目录中的WcfTestClient.exe,也可以使用Fiddler来查看流量 – 2009-12-12 09:34:51