2013-07-10 8 views
6

मैं निम्नलिखित JSON एक दूरस्थ एपीआई से वापस आ रहा (मैं संशोधित नहीं कर सकते JSON लौटे)JSON.Net सी # मॉडल को आंतरिक वस्तु कन्वर्ट

{ 
    "APITicket": { 
     "location": "SOMEVALUE", 
     "ticket": "SOMEVALUE" 
    } 
} 

अब JSON.Net का उपयोग कर एक मॉडल को यह कन्वर्ट करने के लिए है मुझे 2 मॉडल बनाना है।

public class TicketModel 
    { 
     public string location { get; set; } 
     public string ticket { get; set; } 
    } 

    public class TicketContainer 
    { 
     public TicketModel APITicket { get; set; } 
    } 

और की तरह कुछ करना ..

var myObject = JsonConvert.DeserializeObject<TicketContainer>(this.JSONResponse); 

और यह अच्छी तरह से काम करता है - मेरी समस्या पैदा होती है जब मैं लगभग 50 कॉल एपीआई को करना है और वास्तव में के लिए एक दूसरे 'कंटेनर' बनाने कल्पना न से प्रत्येक। क्या सीधे ऊपर दिए गए उदाहरण को टिकट मॉडल में बांधने का कोई तरीका है?

+0

आप हर API कॉल के बीच में deserialise करने की जरूरत है, तो वहाँ वास्तव में कोई रास्ता नहीं है इसके चारों ओर 50 एपीआई कॉल लौटने के बाद आप deserialise बैच कर सकते हैं। –

+0

हाय @ सैमलेच में मेरे पास 50 अलग-अलग एपीआई कॉल हैं, इसलिए यह कॉल की मात्रा नहीं है बल्कि कंटेनर मॉडल बनाने में केवल एक दर्द है जो कि किसी भी चीज़ के लिए उपयोगी नहीं है बल्कि Deserialize! – LiamB

उत्तर

1

आप इसे इस तरह से कर सकते हैं:

 var json = @" 
        { 
         'APITicket': { 
          'location': 'SOMEVALUE', 
          'ticket': 'SOMEVALUE' 
         } 
        }"; 

     //Parse the JSON: 
     var jObject = JObject.Parse(json); 

     //Select the nested property (we expect only one): 
     var jProperty = (JProperty)jObject.Children().Single(); 

     //Deserialize it's value to a TicketModel instance: 
     var ticket = jProperty.Value.ToObject<TicketModel>(); 
1

JSON संशोधित करें ताकि यह इस

{ 
    "location": "SOMEVALUE", 
    "ticket": "SOMEVALUE" 
} 

तरह लग रहा है और कर

List<TicketModel> tickets = JsonConvert.DeserializeObject<List<TicketModel>>(this.JSONResponse); 

या यहाँ तक कि

Dictionary<string, string> tickets = JsonConvert.DeserializeObject<Dictionary<string, string>>(this.JSONResponse); 

तो आप किसी भी मॉडल की जरूरत नहीं है।

+0

हाय सैम, मैं जेएसओएन को संशोधित नहीं कर सकता क्योंकि यह एक बाहरी एपीआई है। - स्पष्ट करने के लिए अद्यतन प्रश्न। – LiamB

+0

क्यों नहीं? यदि यह जेसन वापस आ गया है, तो आप जो भी चाहते हैं वह कर सकते हैं। –

1

उपयोग Newtonsoft's JArrayको deserialize से पहले उर json अनुकूलित

public List<APITicket> JsonParser(string json) 
    { 
     Newtonsoft.Json.Linq.JArray jArray = Newtonsoft.Json.Linq.JArray.Parse(json); 

     var list = new List<APITicket>(); 

     foreach(var item in jArray) 
     { 
      list.Add(
       new APITicket { location = item["APITicket"]["location"], 
           ticket = item["APITicket"]["ticket"]    
       } 
      ); 
     } 
     return list; 
    }