WP7

2011-11-20 20 views
5

में जेएसओएन deserializing मेरे पास यह JSON है जिसे मैं विंडोज फोन पर पढ़ने की कोशिश कर रहा हूं। मैं DataContractJsonSerializer और Json.NET के साथ खेल किया गया है, लेकिन बहुत ज्यादा नहीं भाग्य था, विशेष रूप से प्रत्येक 'प्रविष्टि' पढ़ने:WP7

{"lastUpdated":"16:12","filterOut":[],"people": 
[{"ID":"x","Name":"x","Age":"x"},{"ID":"x","Name":"x","Age":"x"},{"ID":"x","Name":"x","Age":"x"}], 
"serviceDisruptions": 
    { 
    "infoMessages": 
    ["blah blah text"], 
    "importantMessages": 
    [], 
    "criticalMessages": 
    [] 
    } 
} 

सभी मैं के बारे में परवाह लोगों खंड में प्रविष्टियों है। असल में मुझे प्रविष्टियों (आईडी, नाम, आयु मान युक्त) के माध्यम से पढ़ने और पुन: प्रयास करने की आवश्यकता है और उन्हें संग्रह या कक्षा में जोड़ें। (मैं बाद में एक सूची बॉक्स पॉप्युलेट कर रहा हूं।)

किसी भी पॉइंटर्स की सराहना की।

+0

आप उदाहरण मान्य जेसन नहीं है, कृपया असली चीज़ पोस्ट करें :-) – abcde123483

+0

ठीक है, मैंने अभी टेक्स्ट बदल दिया है और इसे अलग लाइनों में बना दिया है। आप क्यों कहते हैं कि यह वैध नहीं है? –

+0

स्पष्टता के लिए संपादित किया गया। –

उत्तर

6

मैं निम्नलिखित कोड का उपयोग कर अपने JSON स्ट्रिंग को deserialize करने में सक्षम था। यह एक .NET 4 कंसोल एप्लिकेशन में परीक्षण किया गया था, और उम्मीद है कि WP 7 में भी काम करेगा।

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(PersonCollection)); 

string json = "{\"lastUpdated\":\"16:12\",\"filterOut\":[],\"people\": [{\"ID\":\"a\",\"Name\":\"b\",\"Age\":\"c\"},{\"ID\":\"d\",\"Name\":\"e\",\"Age\":\"f\"},{\"ID\":\"x\",\"Name\":\"y\",\"Age\":\"z\"}], \"serviceDisruptions\": { \"infoMessages\": [\"blah blah text\"], \"importantMessages\": [], \"criticalMessages\": [] } }"; 

using (var stream = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
{ 
    var people = (PersonCollection)serializer.ReadObject(stream); 

    foreach(var person in people.People) 
    { 
     Console.WriteLine("ID: {0}, Name: {1}, Age: {2}", person.ID, person.Name, person.Age); 
    } 
} 

का उपयोग करते हुए निम्न डेटा कक्षाएं:

[DataContract] 
public class PersonCollection 
{ 
    [DataMember(Name = "people")] 
    public IEnumerable<Person> People { get; set; } 
} 

[DataContract] 
public class Person 
{ 
    [DataMember] 
    public string ID { get; set; } 

    [DataMember] 
    public string Name { get; set; } 

    [DataMember] 
    public string Age { get; set; } 
} 
+1

आपने मुझे इसे हरा दिया, और हाँ आपका JSON मान्य है: http://jsonlint.com/ – invalidusername

+0

यह बिल्कुल सही है, Ive ने मेरे संग्रह को पॉप्युलेट करने के लिए इसे अच्छी तरह संशोधित किया है। मेरे लिए मुश्किल बिट यह था कि इसका आकलन कैसे करें, लेकिन व्यक्ति चयन इसे अच्छी तरह से हल करने लगता है। –

1

समाधान नीचे Json.NET उपयोग करता है। यह जेएसओएन स्ट्रिंग को पहले एक्सएमएल में deserializes, फिर LINQ से एक्सएमएल का उपयोग सभी लोगों के नोड्स को फिर से करने के लिए करता है और उन्हें Person कक्षा के उदाहरणों में परिवर्तित करता है।

private class Person 
{ 
    public string ID { get; set; } 
    public string Name { get; set; } 
    public string Age { get; set; } 
} 

// deserializes your JSON and creates a list of Person objects from it 
private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    // your JSON 
    string json = 
     "{\"lastUpdated\":\"16:12\",\"filterOut\":[],\"people\": " + 
     "[{\"ID\":\"x\",\"Name\":\"x\",\"Age\":\"x\"},{\"ID\":\"x\",\"Name\":\"x\",\"Age\":\"x\"},{\"ID\":\"x\",\"Name\":\"x\",\"Age\":\"x\"}]," + 
     "\"serviceDisruptions\":" + 
     "{" + 
     "\"infoMessages\":" + 
     "[\"blah blah text\"]," + 
     "\"importantMessages\":" + 
     "[]," + 
     "\"criticalMessages\":" + 
     "[]" + 
     "}" + 
     "}"; 

    // deserialize from JSON to XML 
    XDocument doc = JsonConvert.DeserializeXNode(json, "root"); 

    // iterate all people nodes and create Person objects 
    IEnumerable<Person> people = from person in doc.Element("root").Elements("people") 
           select new Person() 
           { 
            ID = person.Element("ID").Value, 
            Name = person.Element("Name").Value, 
            Age = person.Element("Age").Value 
           }; 

    // this is just demonstrating that it worked 
    foreach (Person person in people) 
     Debug.WriteLine(person.Name); 
} 

आयात को न भूलें:

using Newtonsoft.Json; 
using System.Xml.Linq; 
using System.Diagnostics; 

और यह कैसे deserialized JSON (वहाँ उत्सुक लोगों के लिए) XML दस्तावेज़ के रूप में की तरह लग रहा है:

<root> 
    <lastUpdated>16:12</lastUpdated> 
    <people> 
    <ID>x</ID> 
    <Name>x</Name> 
    <Age>x</Age> 
    </people> 
    <people> 
    <ID>x</ID> 
    <Name>x</Name> 
    <Age>x</Age> 
    </people> 
    <people> 
    <ID>x</ID> 
    <Name>x</Name> 
    <Age>x</Age> 
    </people> 
    <serviceDisruptions> 
    <infoMessages>blah blah text</infoMessages> 
    </serviceDisruptions> 
</root> 
+0

इसने कोशिश नहीं की है, लेकिन आपके उत्तर के लिए धन्यवाद। –