2011-02-03 64 views
8

我注意到,與DataContractJsonSerializer序列化JSON字符串有時包括在DataContractJsonSerializer何時包含類型信息?

{"__type":"MyClass:#MyNamespace", ... } 

根據我的觀察,似乎只能這樣做時,它的序列化基本類型形式的類型信息,但一個子類型被傳遞,這是有道理的,但我沒有找到任何官方文檔來證實這一點,或者無論如何強制序列化器在遇到自定義類型時始終如一地表現出這種行爲。

任何人都可以確認我的觀察是否正確?更好的是,如果你知道一種方法來指示序列化器總是序列化自定義類型的類型信息,如果這是可能的話?

感謝,

回答

14

其實,你可以強制串行始終一貫地發出__type信息。

如果您正在使用串行器獨立版,請使用採用「alwaysEmitTypeInformation」參數的constructor overload。通過真實。

如果您使用的是DataContractJsonSerializerOperationBehavior,請將該屬性上的相同屬性設置爲true。我相信你也可以通過配置來實現。

最後,請參閱http://msdn.microsoft.com/en-us/library/bb412170.aspx處的「何時發佈類型提示」一節以獲取更詳細的解釋。

希望這會有所幫助!

+0

太棒了!這正是我所尋找的,甚至沒有意識到一個構造函數重載讓你指定是否總是發出類型信息,謝謝指出! – theburningmonk 2011-02-08 10:24:15