2011-10-08 14 views
7

मैं सी # का उपयोग कर JSON स्ट्रिंग को डीकोड करने के लिए एक उदाहरण कोड/lib की तलाश में हूं।सी # का उपयोग कर JSON स्ट्रिंग को डीकोड कैसे करें?

डिकोड करने के लिए मैं यह कर सकता:

var data = new Dictionary<string,string>(); 
data.Add("..", "..."); 
var json_encoded = new JavaScriptSerializer().Serialize(data); 

लेकिन डिकोड करने के लिए, मैं कैसे करूँ?

var json_decoded = ?? 

धन्यवाद!

+0

बस [Json.NET] (http का उपयोग: // james.newtonking.com/projects/json-net.aspx), आप किसी भी प्रकार की देखभाल करने के लिए और उस क्रम से क्रमबद्ध और deserialise कर सकते हैं। –

+0

[जेसन Deserialize सी #] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/7895105/json-deserialize-c-sharp) – nawfal

उत्तर

10

आप ऐसा कर सकते हैं:

var data = new Dictionary<string, string>(); 
data.Add("foo", "baa"); 

JavaScriptSerializer ser = new JavaScriptSerializer(); 
var JSONString = ser.Serialize(data); //JSON encoded 

var JSONObj = ser.Deserialize<Dictionary<string, string>>(JSONString); //JSON decoded 
Console.Write(JSONObj["foo"]); //prints: baa 
+3

यह ध्यान दिया जाना चाहिए कि यह जेएसओएन स्ट्रिंग को किसी प्रकार पर बेकार नहीं करता है, जो कुछ मामलों में ठीक हो सकता है। मैं एक प्रकार के लिए स्ट्रिंग deserializing एक बहुत अधिक मजबूत समाधान है। –

8

यह JSON लेने के लिए और यह एक जोरदार टाइप किया वर्ग जिनमें से आपके द्वारा निर्दिष्ट (टी)

public static T Deserialize<T>(string json) 
     { 
      var obj = Activator.CreateInstance<T>(); 
      using(var ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
      { 
       var serializer = new DataContractJsonSerializer(obj.GetType()); 
       obj = (T) serializer.ReadObject(ms); 
       return obj; 
      } 
     } 

यह एक वर्ग लेने के लिए और

public static string Serialize<T>(T obj) 
    { 
     var serializer = new DataContractJsonSerializer(obj.GetType()); 
     using (var ms = new MemoryStream()) 
     { 
      serializer.WriteObject(ms, obj); 
      return Encoding.Default.GetString(ms.ToArray()); 
     } 
    } 

नोट JSON के रूप में यह क्रमानुसार जाएगा में बदल जाएगा: में पहला उदाहरण आपको यह निर्धारित करने के लिए बैकिंग क्लास की आवश्यकता होगी कि T किस प्रकार का है। तो अगर आप यह बताया User आप इस कहीं ऐसा उल्लेख किया है की आवश्यकता होगी कि टी प्रकार का है:

public class User 
    { 
     public string Username { get; set; } 
     public string Firstname { get; set; } 
    } 
+1

शायद यह * एक * 'DataContractJsonSerializer' ऑब्जेक्ट (प्रति क्रमबद्ध प्रकार) के निर्माण के लायक हो सकता है प्रत्येक क्रमिकरण के लिए एक नया निर्माण? – Timwi

+0

@ तिमवी, यह निर्भर करता है। उदाहरणों को पकड़ने के लिए आपको और अधिक मेमोरी खर्च होगी, लेकिन यदि आप नहीं करते हैं तो यह कम आर्थिक गति से कम होगा। यह वास्तव में आपकी विशिष्ट स्थिति के लिए उबाल जाता है। आदर्श रूप से, आप सीरियलाइज़र रखना चाहते हैं जिन्हें अक्सर इस्तेमाल किया जाएगा, और उन लोगों को फेंक दें जो नहीं करेंगे। –

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