2014-05-06 9 views
10

मेरे पास एक JSON ऑब्जेक्ट है जो क्षेत्र कोड की एक लंबी सूची के साथ आता है। दुर्भाग्यवश प्रत्येक क्षेत्र कोड डेटा ऑब्जेक्ट में किसी सूची पर ऑब्जेक्ट का नाम है। मैं एक कक्षा कैसे बना सकता हूं जो RestSharp को सामग्री को deserialize करने की अनुमति देगा?गतिशील वस्तुओं के साथ जेएसओएन deserialize

यहाँ कैसे मेरी कक्षा अब दिखाई देता है:

public class phaxioResponse 
{ 
    public string success { get; set; } 
    public string message { get; set; } 
    public List<areaCode> data { get; set; } 

    public class areaCode 
    { 
     public string city { get; set; } 
     public string state { get; set; } 
    } 
} 

और यहाँ JSON सामग्री है:

{ 
    success: true 
    message: "277 area codes available." 
    data: { 
     201: { 
      city: "Bayonne, Jersey City, Union City" 
      state: "New Jersey" 
     } 
     202: { 
      city: "Washington" 
     state: "District Of Columbia" 
     } [...] 
} 
+2

कि:

उत्पादन कुछ इस तरह लग रहा है। –

+0

और क्या आप वास्तव में किसी को भी यह सब पढ़ने की उम्मीद करते हैं? –

+1

@ जॉन सैंडर्स आपको पूरे जेसन ऑब्जेक्ट को पढ़ने की ज़रूरत नहीं है - मुझे पूरा यकीन है कि आप देख सकते हैं कि मुख्य ऑब्जेक्ट में केवल तीन नोड्स हैं और डेटा ऑब्जेक्ट वैसे ही है? – PeteFox

उत्तर

17

के बाद से इस JSON सी # अनुकूल नहीं है, मुझे ठीक से बाहर आने के लिए हैकरी का थोड़ा सा करना पड़ा। हालांकि, परिणाम काफी अच्छा है।

var json = JsonConvert.DeserializeObject<dynamic>(sampleJson); 
var data = ((JObject)json.data).Children(); 
var stuff = data.Select(x => new { AreaCode = x.Path.Split('.')[1], City = x.First()["city"], State = x.Last()["state"] }); 

यह कोड एक अज्ञात प्रकार उत्पन्न करेगा जो डेटा का सबसे अच्छा प्रतिनिधित्व करता है। हालांकि, अधिक सामान्य डीटीओ कक्षा के लिए अज्ञात प्रकार को आसानी से ctor द्वारा प्रतिस्थापित किया जा सकता है। json अप फाउल के सभी प्रकार है

Deserialization Output

+0

क्या आप * json.data * में * डेटा * क्या समझा सकते हैं? धन्यवाद –

+0

@ हैपीबर्ड, यह प्रश्न में पोस्ट जेएसओएन उदाहरण से आता है। –

0

मैं RestSharp बारे में कुछ पता नहीं है, लेकिन आप सर्वर पर Newtonsoft उपयोग कर रहे हैं पक्ष, तो आप अपनी विधि में जॉब्जेक्ट पास कर सकते हैं। फिर आप वस्तु को पूछताछ कर सकते हैं कि यह वास्तव में किस प्रकार की वस्तु है और इसे बदलने के लिए JObject.ToObject() का उपयोग करें।

3

अपने json सही नहीं है, लेकिन अगर आप इसे सही कर आप http://json2csharp.com/ पर एक की तरह एक json करने वाली कोई तिथि नहीं उपकरण का उपयोग अपनी कक्षाओं उत्पन्न करने के लिए कर सकते हैं:

public class __invalid_type__201 
{ 
    public string city { get; set; } 
    public string state { get; set; } 
} 

public class Data 
{ 
    public __invalid_type__201 __invalid_name__201 { get; set; } 
} 

public class RootObject 
{ 
    public bool success { get; set; } 
    public string message { get; set; } 
    public Data data { get; set; } 
} 
+1

यह एक अच्छा विचार है ... दुर्भाग्यवश जेएसओएन मेरे हाथों में नहीं है - यह बाहरी एपीआई – PeteFox

+1

@PeteFox से आता है यह मान्य JSON नहीं है। सभी फ़ील्ड नामों को उद्धरण में होना चाहिए जिन्हें वैध JSON माना जाना चाहिए। यही कारण है कि json2csharp.com अमान्य कक्षाएं उत्पन्न कर रहा है। –

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