2016-04-13 8 views
0

私はNewtonSoft.Json最新バージョンを使用し、サードパーティのオブジェクトをserdesする必要があります。私はフィールドをシリアル化する必要があります。C#Jsonシリアライゼーションバッキングフィールド参照プロパティは、他の方法ではなくラウンド

JsonSerializerSettings settings_ = new JsonSerializerSettings 
{ 
    NullValueHandling = NullValueHandling.Include, 
    DefaultValueHandling = DefaultValueHandling.Include, 
    PreserveReferencesHandling = PreserveReferencesHandling.All, 
    ObjectCreationHandling = ObjectCreationHandling.Replace, 
    ReferenceLoopHandling = ReferenceLoopHandling.Serialize, 
    ContractResolver = new DynamicContractResolver(), 
}; 
public class DynamicContractResolver : DefaultContractResolver 
{ 
    protected override IList<JsonProperty> CreateProperties(Type type, Newtonsoft.Json.MemberSerialization memberSerialization) 
    { 
     IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization); 
     properties = properties.Where(p => p.PropertyName != "MonitoringInstance" && p.PropertyName != "SessionInstance").ToList(); 
     var fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Select(f => CreateProperty(f, memberSerialization)); 
     return properties.Union(fields, new EqualityComparer()).ToList(); 
    } 
} 

残念ながら、関係なく、私が試したどのように、バッキングフィールドは、プロパティを参照しない:ここで私が使用しJsonSerializerSettingsです。それを逆転するためにとにかくありますか?どんな洞察にも感謝します。

答えて

0

クラスをDataContractAttributeに、そしてフィールドをDataMemberAttributeに単純に飾る方が簡単です。実際に契約書決議者を実際に実装したいのでない限り、これはJSONを使用して常に行うことです。

+0

サードパーティのオブジェクト –

+0

サードパーティのオブジェクトが最初にシリアライズ可能であることをどのように知っていますか?それらの大きさに応じて、前記オブジェクトを直列化可能なDTOにコピーすることが理にかなっているかもしれない。 – Toxantron

+0

[Serializable]属性を持っています。それは大きいです。したがって、DTOは非生産的です。 –

関連する問題