2016-09-21 32 views
6

Blueprint Çoklu Sözleşme Çözümleyici ekleyin: Newtonsoft.Json kullanmaveri yapısı için Newtonsoft.Json içinde

public class Movie 
{ 
    public string Name { get; set; } 
} 

, ben Json serileştirme için aşağıdaki yapılandırmaya sahip. Açıkça bu

var settings = new JsonSerializerSettings() { 
    ContractResolver = new CamelCasePropertyNamesContractResolver(), 
}; 

, bu yazdıracaktır:

{ 
    name: "" 
} 
:

{ 
    name: null 
} 

Şimdi, ben hangi aşağıdaki gibi çıktı o nasıl elde edebileceğini, JsonSerializerSettings içinde ContractResolver başka NullToEmptyStringResolver eklemem gerekiyor

  • Lütfen benim NullToEmptyStringResolver öğesinin zaten yazıldığını unutmayın. Ancak, NullToEmptyStringResolver ve CamelCasePropertyNamesContractResolver öğelerini Sözleşme Çözümleyicisine eklemem gerekiyor.
+2

Lütfen gönderinizi kirletmeyin. – Rizier123

cevap

6

Json.Net, aynı anda birden fazla sözleşme çözümleyicisine izin vermediğinden, davranışlarını birleştirmenin bir yoluna ihtiyacınız olacaktır. Ben NullToEmptyStringResolver Json.Net'in DefaultContractResolver sınıfından miras kalan özel bir çözümleyici olduğunu varsayalım. Eğer öyleyse, istediğiniz sonucu elde etmenin basit bir yolu, NullToEmptyStringResolver'u CamelCasePropertyNamesContractResolver'dan devralmaktır.

public class NullToEmptyStringResolver : CamelCasePropertyNamesContractResolver 
{ 
    ... 
} 

Bu yaklaşımı beğenmediyseniz

, başka fikir NullToEmptyStringResolver için deve muhafaza davranışını eklemektir. 'un source code'da nasıl uygulandığını incelerseniz, bunun yapıcıda NamingStrategy'u ayarlamak kadar basit olduğunu görürsünüz (Json.Net 9.0.1 veya sonraki bir sürümünü kullandığınızı varsayarak). Aynı kodu, NullToEmptyStringResolver'unuzun yapıcısına ekleyebilirsiniz.

public class NullToEmptyStringResolver : DefaultContractResolver 
{ 
    public NullToEmptyStringResolver() : base() 
    { 
     NamingStrategy = new CamelCaseNamingStrategy 
     { 
      ProcessDictionaryKeys = true, 
      OverrideSpecifiedNames = true 
     }; 
    } 

    ... 
} 
+0

evet, işe yarıyor, teşekkürler. – shana0721shana

+0

Bu çözümleyiciyi model olarak öznitelik olarak uygulamak mümkün mü? http://stackoverflow.com/questions/43820249/keeping-contract-resolver-in-attribute – user960567