2017-02-09 6 views
4

Json.NETを使用してクラスをシリアル化しようとしています。ここでは私が今何をしているのですか?Json.NET - クラスへのアクセスなしでシリアル化からプロパティを除外する方法

public class AClass 
{ 
    // I don't have access to BClass 
    public BClass b; 
} 

AClass a = new AClass(); 
JsonConvert.SerializeObject(a); 

私にはBClassへのアクセス権がありません。私はAClassをシリアル化したいですが、私はBClassのすべてのプロパティをシリアル化したくないだけです。

どうすればいいですか?

+1

この質問の受け入れられた答えを見てください:http://stackoverflow.com/questions/13588022/exclude-property-from-serialization-via-custom-attribute-json-net –

答えて

7

を見てください。アイデアの

var propertiesContractResolver = new PropertiesContractResolver(); 
propertiesContractResolver.ExcludeProperties.Add("BClass.Id"); 
var serializerSettings = new JsonSerializerSettings(); 
serializerSettings.ContractResolver = propertiesContractResolver; 
JsonConvert.SerializeObject(a, serializerSettings); 
+0

あなたは依存関係を追加する必要がありますフィールドをシリアライズしないようにするだけのナゲットパッケージでは? – Bidou

1

カップルは、あなたがこれを行う必要がありどのように多くの異なるクラスに応じて、から選択することができているとあなたはアルゴリズムがする必要がどのようにパフォーマンスの高い、心に来る:

おそらく最速のだろうcustom convertersまたはContract Resolversを使用して、あなたのニーズに合った、つまり含まれたくないプロパティを無視するようにしてください。

もう1つの方法は、このクラスを、単に含まれたくないプロパティを含まない同様に定義された別のクラスにマップし、そのクラスを直列化することです。同様に定義されたクラス間の迅速なマッピングにはAutoMapperを使用できます。

最後に、ExpandoObject(またはさらにDictionary<string, object>)を作成し、ExpandoまたはDictionaryに含めるプロパティを追加することができます。これらのプロパティとキーと値のペアを手動または反射などでコピーできます。 。)そしてそのオブジェクト/辞書を直列化する。

関連する問題