2013-02-07 32 views
14

हमारे पास एक JSON ऑब्जेक्ट है जिसमें ऑब्जेक्ट में से एक है जिसका नाम डैश है। नीचे पूर्वन्यूटन सॉफ़्ट जेसन कन्वर्ट के नाम पर डैश ("-") के साथ एक संपत्ति को deserialize कैसे करें?

{ 
    "veg": [ 
     { 
      "id": "3", 
      "name": "Vegetables", 
      "count": "25" 
     }, 
     { 
      "id": "4", 
      "name": "Dal", 
      "count": "2" 
     }, 
     { 
      "id": "5", 
      "name": "Rice", 
      "count": "8" 
     }, 
     { 
      "id": "7", 
      "name": "Breads", 
      "count": "6" 
     }, 
     { 
      "id": "9", 
      "name": "Meals", 
      "count": "3" 
     }, 
     { 
      "id": "46", 
      "name": "Extras", 
      "count": "10" 
     } 
    ], 
    "non-veg": [ 
     { 
      "id": "25", 
      "name": "Starters", 
      "count": "9" 
     }, 
     { 
      "id": "30", 
      "name": "Gravies", 
      "count": "13" 
     }, 
     { 
      "id": "50", 
      "name": "Rice", 
      "count": "4" 
     } 
    ] 
} 

हम इस जेसन को कैसे बेकार कर सकते हैं?

+0

डुप्लिकेट नहीं। यह प्रश्न एक विशिष्ट और विशिष्ट समस्या को हल करने का प्रयास करता है। जिस तरह से मेरे पास था, इसलिए मैं इस तरह का निवेश कर रहा हूं। – MrBoJangles

उत्तर

16

आप DataContractJsonSerializer

का उपयोग करके इस लक्ष्य को हासिल कर सकते हैं
[DataContract] 
public class Item 
{ 
    [DataMember(Name = "id")] 
    public int Id { get; set; } 
    [DataMember(Name = "name")] 
    public string Name { get; set; } 
    [DataMember(Name = "count")] 
    public int Count { get; set; } 
} 

[DataContract] 
public class ItemCollection 
{ 
    [DataMember(Name = "veg")] 
    public IEnumerable<Item> Vegetables { get; set; } 
    [DataMember(Name = "non-veg")] 
    public IEnumerable<Item> NonVegetables { get; set; } 
} 

अब आप कुछ इस तरह से यह deserialize कर सकते हैं:

string data; 

// fill the json in data variable 

ItemCollection collection; 
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(data))) 
{ 
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ItemCollection)); 
    collection = (ItemCollection)serializer.ReadObject(ms); 
} 
+0

धन्यवाद ... मुझे यह – robert

+0

आज़माएं, क्या मैं केवल 'डेटामेम्बर' को परिभाषित कर सकता हूं, जिसमें केवल डैश युक्त संपत्ति है और बाकी को छोड़ दें? –

+0

आपको उन सभी संपत्तियों में डेटामेम्बर जोड़ने की आवश्यकता है, जिन्हें आप क्रमबद्ध करना चाहते हैं, हालांकि यदि संपत्ति का नाम पर्याप्त है तो आप नाम निर्दिष्ट नहीं कर सकते हैं। –

37

कैसे NewtonSoft के साथ ऐसा करने पर इस सवाल का जवाब करने के लिए, आप का प्रयोग करेंगे JsonProperty संपत्ति विशेषता झंडा।

[JsonProperty(PropertyName="non-veg")] 
public string nonVeg { get; set; } 
+2

वीबी उपयोग के लिए: <जेसनप्रोपर्टी (प्रॉपर्टीनाम: = "गैर-वेज")> –