2012-04-03 22 views
13

मुझे यह समझने में समस्याएं आ रही हैं कि इसे कैसे किया जाए, मूल रूप से हमारे पास एक एपीआई है, उपयोगकर्ता प्रारूप का एक जेसन भेजता है: (अगर सही नहीं है तो कोड क्षमा करें लेकिन आप समझते हैं)JSON से C# ऑब्जेक्ट्स को कैसे मानचित्र करें

{"Profile": [{ 
      "Name":"Joe", 
      "Last :"Doe", 
      "Client": 
        { 
         "ClientId":"1", 
         "Product":"Apple", 
         "Message":"Peter likes apples" 
         }, 
       "Date":"2012-02-14" 
      }]} 

ठीक नहीं है कि मुझे जेएसओएन सही तरीके से प्रारूपित किया गया है, लेकिन अब यह मेरा मुद्दा है, मेरे पास Profile नामक एक वर्ग है, जिसका नाम पैरामीटर नाम, अंतिम, और एक वस्तु है जिसे क्लाइंट के साथ-साथ संपत्ति दिनांक कहा जाता है।

कुछ इस तरह:

public class Profile 
    { 
    public string Name {get; set;} 
    public string Last {get; set;} 
    public Client client {get; set;} 
    public DateTime dDate {get; set;} 
    } 

तो बुनियादी तौर पर, मुझे यकीन है कि कैसे JSON खींचते हैं और फिर मेरी वस्तु से मैप करने के लिए नहीं कर रहा हूँ ... "मदद" मुझे समझने के साथ कोई भी मदद की बहुत सराहना की जाएगी।

सादर

उत्तर

25

आप के रूप में (अपनी कक्षाओं को कुछ संशोधनों के साथ)

var yourObject = JsonConvert.DeserializeObject<Root>(jsonstring); 


public class Root 
{ 
    public Profile[] Profile; 
} 

public class Profile 
{ 
    public string Name { get; set; } 
    public string Last { get; set; } 
    public Client Client { get; set; } 
    public DateTime Date { get; set; } 
} 

public class Client 
{ 
    public int ClientId; 
    public string Product; 
    public string Message; 
} 
+0

कूल है, क्या रूट वर्ग की भूमिका ?, खेद अगर एक नौसिखिया सवाल :) – user710502

+0

के बाद के रूप में जोड़ सकते हैं अपने 'Profile' सरणी किसी ऑब्जेक्ट के अंदर है (जेसन की रूट ऑब्जेक्ट में xml जैसे नाम नहीं हैं)। मैंने इसे 'रूट' नाम दिया है, आप किसी भी नाम का चयन कर सकते हैं जिसे आप चाहते हैं –

+0

वाह! ........... –

5

आप इस के लिए एक JSON पुस्तकालय, उदाहरण के Newtonsoft.Json के लिए जो मुक्त है उपयोग कर सकते हैं। यह जेसन को आपके प्रकारों पर स्वचालित रूप से मैप करेगा।

नमूना:

public static T Deserialize<T>(string json) 
    { 
     Newtonsoft.Json.JsonSerializer s = new JsonSerializer(); 
     return s.Deserialize<T>(new JsonTextReader(new StringReader(json))); 
    } 

भी एक NuGet पैकेज उपलब्ध नहीं है।

+0

बस FYI आप भी यह वी.एस. में सीधे एक Nuget पैकेज है, जो बहुत ही आरामदायक – Marek

0

DataContractJsonSerializer काम करता है अपने json स्ट्रिंग deserialize करने के लिए Json.Ne टी का उपयोग कर सकते हैं, लेकिन यह दिनांक समय क्रमबद्धता के लिए और अधिक परिष्कृत स्वरूप का उपयोग करता।

0

मुझे पता है कि सबसे आसान तरीका है JSON.Net newtonsoft द्वारा उपयोग करना। इसे समझना आसान बनाने के लिए, मैं हमेशा उसी नाम से सी # में मेल खाने वाले वर्ग बना देता हूं। फिर इसे deserialize करने के लिए आसान है। उदाहरण के तौर पर, यदि यह जेएस में ऑब्जेक्ट्स की एक सरणी है, तो यह सी # में समान नाम वाले ऑब्जेक्ट की सूची में मैप करेगा। दिनांक के समय के रूप में, यह थोड़ा मुश्किल है। आईडी क्लाइंट साइड सत्यापन और सर्वरटाइड में डेटाटाइम.tryParse करते हैं, यह डैश या स्लेश का ख्याल रखेगा।

var serializer = new JavaScriptSerializer(); 
List<abc> abcList = serializer.Deserialize<List<abc>>(PassedInJsonString); 
संबंधित मुद्दे