2015-03-12 11 views
19

रिटर्न मैं निम्नलिखित वर्ग की वस्तुओं की सूची है:Newtonsoft.Json क्रमबद्धता खाली json वस्तु

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

जब मैं इसे खाली ऑब्जेक्ट की श्रेणी रिटर्न Newtonsoft.Json का उपयोग करके json स्ट्रिंग के लिए इस सूची को परिवर्तित कर रहा हूँ।

string json=JsonConvert.SerializeObject(list); 

मुझे निम्नलिखित परिणाम मिल रहे हैं।

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

कृपया मुझे इस समस्या के संबंध में मदद करते हैं।

+0

क्या आप सुनिश्चित हैं कि सूची शून्य ऑब्जेक्ट्स की सूची नहीं है। जैसा कि आपने 'पैरामीटरेटेड' कन्स्ट्रक्टर घोषित किया है। यदि आप खाली ऑब्जेक्ट बनाना चाहते हैं तो आपको कक्षा में 'खाली' कन्स्ट्रक्टर मैन्युअल रूप से घोषित करना होगा। –

+0

हाँ – VIVEK

+0

सूची में कोई शून्य वस्तुएं नहीं हैं, मुझे जैक्सन लाइब्रेरी का उपयोग करके एक ही समस्या हो रही थी। खेतों को सार्वजनिक करने से समस्या भी हल हो गई। – FrancisA

उत्तर

50

डिफ़ॉल्ट रूप से, NewtonSoft.Json केवल सार्वजनिक सदस्यों को क्रमानुसार होगा, इसलिए अपनी क्षेत्रों को सार्वजनिक करना:

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

संपादित करें: किसी कारण से आप वास्तव में अपने खेतों को सार्वजनिक करना नहीं चाहते हैं, तो आप इसके बजाय उन्हें धारावाहिक और deserialized करने की अनुमति JsonPropertyAttribute के साथ उन्हें सजाने कर सकते हैं:

[JsonProperty] 
int catagoryId; 
+0

ठीक है धन्यवाद। इस मुद्दे को हल किया। – VIVEK

+2

कक्षा के सार्वजनिक सदस्य सबसे अच्छा समाधान नहीं है। क्या अन्य बेहतर समाधान मौजूद है? –

+10

@IgnacioChiazzo हां, आपको यह इंगित करने के लिए ['JsonPropertyAttribute'] (http://www.newtonsoft.com/json/help/html/SerializationAttributes.htm) का उपयोग करने में सक्षम होना चाहिए ताकि एक गैर-सार्वजनिक क्षेत्र या संपत्ति हो serialized: '[JsonProperty] निजी int श्रेणी आईडी;' – JLRishe

3

तुम भी से प्रत्येक के लिए [JsonProperty] निर्दिष्ट किए बिना सभी सदस्यों आप चाहते हैं क्रमानुसार करने अपनी कक्षा को सजाने सकता है उन्हें।

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

MemberSerialization enum आप क्या सदस्यों को आप को क्रमानुसार करना चाहते हैं निर्दिष्ट कर सकते हैं:

  • MemberSerialization.OptOut: सभी सार्वजनिक सदस्यों क्रमांकित हैं।
  • सदस्यसेरियलाइजेशन। ऑप्ट इन: केवल जेसनप्रोपर्टी एट्रिब्यूट या डेटामेम्बरएट्रिब्यूट के साथ चिह्नित सदस्यों को क्रमबद्ध किया गया है।
  • सदस्यसाधिकरण। फ़ील्ड: सभी सार्वजनिक और निजी सदस्यों को क्रमबद्ध किया जाता है।
+0

Thanx। – VIVEK

संबंधित मुद्दे