2011-11-07 16 views
4

私たちは、すべてのデータ契約を持つ1つの契約アセンブリを持っています。 jsonへのデータコントラクトのシリアル化にJSON.netを使用しています。JSON.Netで直列化および逆シリアル化を行う際に、アセンブリ名を型名から省略するにはどうすればよいですか?

JSON.Netは、シリアル化の$ type属性に型名とアセンブリ名の両方を追加します。すべてのデータコントラクトは同じアセンブリ内にあり、常に現在のアプリケーションドメインにロードされているので、これを省略することができます。

これをどのように達成できますか?

おかげ

+0

はどのようにシリアライズを呼び出していますか? –

答えて

0

私は多分それはまたのDataContractであるという事実をオーバーライドする必要がありますJsonObjectAttribute

[DataContract] 
[JsonObject("")] 
public class MyContractClass { ... } 

これでクラスにタグを付けると思います。

5

JsonSerializerSettingsBinderプロパティを使用できます。

(ライブラリの作者による)このブログ記事は、手順について説明します。

これらのメソッドに配置するロジックによって、直接的な$typeフィールドに型名がどのように文字列表現に変換されるか、型が実行時に指定された値にどのように配置されるかを示します。$type。あなたのケースでは

、アセンブリ名を省略したい、あなたはおそらく行うことができます。

public override void BindToName(
    Type serializedType, out string assemblyName, out string typeName) 
{ 
    assemblyName = null; 
    typeName = serializedType.FullName; 
} 

public override Type BindToType(string assemblyName, string typeName) 
{ 
    return Type.GetType(typeName); 
} 
関連する問題