2015-03-12 21 views
19

verir:Newtonsoft.Json seri aşağıdaki sınıfın nesnelerin listesi var boş json nesnesi

public class Catagory 
{ 
    int catagoryId; 
    string catagoryNameHindi; 
    string catagoryNameEnglish; 
    List<Object> subCatagories; 
    public Catagory(int Id, string NameHindi, string NameEng,List<Object> l) 
    { 
     this.catagoryId = Id; 
     this.catagoryNameHindi = NameHindi; 
     this.catagoryNameEnglish = NameEng; 
     this.subCatagories = l; 
    } 
} 

    public class SubCatagory 
{ 
    int subCatagoryId { get; set; } 
    string subCatNameHindi { get; set; } 
    string subCatNameEng { get; set; } 

    public SubCatagory(int Id, string NameHindi, string NameEng) 
    { 
     this.subCatagoryId = Id; 
     this.subCatNameEng = NameEng; 
     this.subCatNameHindi = NameHindi; 
    } 
} 

Ben boş nesnelerin dizisini döndürür Newtonsoft.Json kullanarak json dizeye bu listeyi dönüştürerek ediyorum.

string json=JsonConvert.SerializeObject(list); 

Aşağıdaki sonucu alıyorum.

[{}, {}, {}, {}, {}]

bu sorunla ilgili bana yardım edin. Varsayılan olarak

+0

Listenin boş Nesnelerin listesi olmadığından emin misiniz? "Parameterzied" kurucusunu beyan ettiğiniz gibi. Boş nesne oluşturmak istiyorsanız, sınıftaki "boş" yapıcısını manuel olarak bildirmeniz gerekir. –

+0

Evet, – VIVEK

+0

listesinde boş nesneler yok Jackson kütüphanesini kullanarak aynı sorunu yaşıyordum. Alanları kamusal hale getirmek sorunu da çözdü. – FrancisA

cevap

50

, NewtonSoft.Json sadece kamu üyelerini seri, böylece alanları kamu yapacaktır:

public class Catagory 
{ 
    public int catagoryId; 
    public string catagoryNameHindi; 
    public string catagoryNameEnglish; 
    public List<Object> subCatagories; 

    public Catagory(int Id, string NameHindi, string NameEng, List<Object> l) 
    { 
     this.catagoryId = Id; 
     this.catagoryNameHindi = NameHindi; 
     this.catagoryNameEnglish = NameEng; 
     this.subCatagories = l; 
    } 
} 

Düzenleme: nedense gerçekten alanları herkese açık hale getirmeye istemiyorsanız, sen yerine onları serileştirilebilen ve serileştirilemezse izin vermek JsonPropertyAttribute ile süslemek edebilirsiniz:

[JsonProperty] 
int catagoryId; 
+0

Ok teşekkürler. Sorun çözüldü. – VIVEK

+2

Sınıfın genel üyeleri En iyi çözüm değildir. Daha iyi bir çözüm var mı? –

+10

@IgnacioChiazzo Evet, herkese açık olmayan bir alanın veya özelliklerin belirtilmesi için ['JsonPropertyAttribute'] (http://www.newtonsoft.com/json/help/html/SerializationAttributes.htm) kullanabilmeniz gerekir. serialized: '[JsonProperty] private int categoryId;' – JLRishe

3

Ayrıca her biri için [JsonProperty] belirtmek zorunda kalmadan istediğiniz tüm üyelerini seri hale getirmek için sınıfınızı süslemeleri onlar.

[JsonObject(MemberSerialization.OptOut)] 
public class Catagory { 
    ... 
} 

MemberSerialization enum size seri hale getirmek istediklerini üye belirlemenizi sağlar:

  • MemberSerialization.OptOut: Tüm kamu üyeler sıralanmış.
  • ÜyeSerialization.OptIn: Yalnızca JsonPropertyAttribute veya DataMemberAttribute ile işaretli üyeler serileştirilir.
  • ÜyeSerialization.Fields: Tüm genel ve özel üyeler serileştirilir.
+0

Thanx. – VIVEK

İlgili konular