2016-04-13 23 views
0

Ben NewtonSoft.Json son sürümünü kullanıyorum ve üçüncü taraf nesneler serpin gerekir. alanları numaralı alanları seri hale getirmem gerekiyor.C# Json serialization destek alanı referansları yerine diğer yol yerine property

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(); 
    } 
} 

Ne yazık ki, Ne kadar çabalarsam, destek alan Mülkiyet başvuran Aşağıda kullandığım JsonSerializerSettings olduğunu. Tersine çevirmek için var mı? Herhangi bir fikir takdir edilir.

cevap

0

Sınıfınızı DataContractAttribute ile ve DataMemberAttribute numaralı alanlarla sade bir şekilde dekore etmek çok daha kolaydır. Sözleşme çözümleyicisini gerçekten uygulamak istemediğiniz sürece, bu, JSON ile her zaman yaptığımız şeydir.

+0

Üçüncü taraf nesneler –

+0

Üçüncü taraf nesnelerinizin ilk sırada seri hale getirilebileceğini nereden biliyorsunuz? Ne kadar büyük olduklarına bağlı olarak, söz konusu nesneleri seri hale getirilebilir DTO'lara kopyalamak mantıklı olabilir. – Toxantron

+0

[Serializable] özelliğine sahiptir. Bu büyük. Yani, DTO karşı üretken. –