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です。それを逆転するためにとにかくありますか?どんな洞察にも感謝します。
サードパーティのオブジェクト –
サードパーティのオブジェクトが最初にシリアライズ可能であることをどのように知っていますか?それらの大きさに応じて、前記オブジェクトを直列化可能なDTOにコピーすることが理にかなっているかもしれない。 – Toxantron
[Serializable]属性を持っています。それは大きいです。したがって、DTOは非生産的です。 –