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