2011-02-03 7 views
8

私はDataContractJsonSerializerでシリアライズされたJSON文字列は時々私の観察に基づいてDataContractJsonSerializerには型情報がいつ含まれますか?

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

の形式で型情報が含まれ、基本タイプではなく、知らサブシリアライズだ場合にのみ、これを行うように見えることに気づきました代わりにカスタム型に遭遇したときにシリアライザが常にこの動作を行うように強制するための正式な文書は見つかりませんでした。

私の観察が正しいか誰でも確認できますか?あなたがカスタムタイプの型情報を常にシリアライズするようにシリアライザに指示する方法が分かっていれば、それは可能ですか?

おかげで、

答えて

14

実は、あなたは常に一貫し__type情報を発するようにシリアライザを強制することができます。

シリアライザをスタンドアロンで使用している場合は、「alwaysEmitTypeInformation」引数をとるconstructor overloadを使用してください。真実を伝える

DataContractJsonSerializerOperationBehaviorを使用している場合は、その属性の同じプロパティをtrueに設定します。私はあなたもconfig経由でそれをやることができると信じています。

最後に、詳細な説明については、「タイプヒントが出された場合」のセクションを参照してください。http://msdn.microsoft.com/en-us/library/bb412170.aspx

希望すると便利です。

+0

素晴らしい!それはまさに私が探していたものですが、コンストラクタのオーバーロードの1つが常に型情報を出すかどうかを指定できるようになったことさえ気づかなかった、それを指摘してくれてありがとう! – theburningmonk

+0

ありがとうございます。ベースタイプが渡されたときにJSONをフルタイプにシリアル化する方法を知り、私はこれを見ました。それは私が思い付くことができるいくつかのハックな解決策よりずっと簡単です。 – Telavian

関連する問題