2010-07-18 17 views
56

क्या .NET 4 किसी भी वर्ग के साथ आता है जो JSON डेटा को क्रमबद्ध/deserializes करता है?क्या .NET 4 में एक अंतर्निहित JSON serializer/deserializer है?

  • मैं जानता हूँ कि इस तरह के JSON.NET के रूप में 3 पक्ष के पुस्तकालयों, देखते हैं, लेकिन मैं सही नेट में निर्मित कुछ के लिए देख रहा हूँ।

  • मुझे एमएसडीएन पर Data Contracts मिला, लेकिन यह डब्ल्यूसीएफ के लिए है, न कि Winforms या WPF के लिए।

+4

JSON.Net अच्छी तरह से समर्थित है और ऐसा लगता है कि माइक्रोसॉफ्ट का इरादा इसे स्वयं अपनाएं * * वेब टीम पर हम JSON.NET को वेब एपीआई में डिफॉल्ट JSON Serializer के रूप में रिलीज़ करते समय भी शामिल करेंगे, ताकि यह अच्छा रहे। "* http://www.hanselman.com/blog/ से OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx – Liam

+0

बस JSON serializing के ** प्रदर्शन ** के लिए एम्बेडेड लाइब्रेरी से अवगत रहें .Net! – Babak

+1

@ बाबाक आपका क्या मतलब है सावधान रहना? कृपया विस्तार से बताएं। –

उत्तर

37

आप कहीं भी DataContractJsonSerializer कक्षा का उपयोग कर सकते हैं, यह सिर्फ एक .net वर्ग है और डब्ल्यूसीएफ तक सीमित नहीं है। here और here का उपयोग करने के तरीके के बारे में अधिक जानकारी।

+0

धन्यवाद, एमएसडीएन ने असेंबली में DataContractJsonSerializer वर्ग कहा: System.Runtime.Serialization (System.Runtime.Serialization.dll में)। हालांकि, वीएस -2010 शो त्रुटि, DataContractJsonSerializer नहीं मिल सकता है। – Cheung

+0

@TatMing ऐसा इसलिए है क्योंकि, आईआईआरसी, पूर्व .Net V4 यह सिस्टम में रहता है। ServiceModel.Web – Psytronic

+0

यह पता लगाएं कि ~ लक्ष्य फ्रेमवर्क समस्या के बारे में, यह देखें: http://stackoverflow.com/questions/1825417/where-is- सिस्टम -servicemodel-web-dll – Cheung

27

वहाँ JavaScriptSerializer वर्ग (यद्यपि आप संदर्भ के लिए System.Web.Extensions विधानसभा की आवश्यकता होगी वर्ग WinForms/WPF अनुप्रयोगों में बिल्कुल ठीक काम करता है) है। इसके अलावा यदि DataContractJsonSerializer कक्षा डब्ल्यूसीएफ के लिए डिज़ाइन की गई थी तो यह क्लाइंट अनुप्रयोगों में ठीक काम करता है।

+5

एफवाईआई: जेसनसेरियलाइज़र और जावास्क्रिप्टसेरियलाइज़र के बीच तुलना पाया जा सकता है [http://stackoverflow.com/questions/9301878/whats-the-difference-between-datacontractjsonserializer-and-javascriptserialize ](यहां)। – LosManos

+0

इसके अलावा, जावास्क्रिप्टसेरियलाइज़र को नामस्थान सिस्टम.Web.Script.Serialization.JavaScriptSerializer में दफनाया गया है जो इसे ढूंढ रहे हैं। – Brain2000

0

जेएसओएन को क्रमबद्ध/deserialize करने के लिए इस जेनेरिक वर्ग का उपयोग करें। आप आसानी से इस तरह जटिल डेटा संरचना को क्रमानुसार कर सकते हैं:

Dictionary<string, Tuple<int, int[], bool, string>> 

JSON स्ट्रिंग के लिए और फिर आवेदन सेटिंग में सहेजने के लिए या फिर

public class JsonSerializer 
{ 
    public string Serialize<T>(T aObject) where T : new() 
    { 
     T serializedObj = new T(); 
     MemoryStream ms = new MemoryStream(); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 
     ser.WriteObject(ms, serializedObj); 
     byte[] json = ms.ToArray(); 
     ms.Close(); 
     return Encoding.UTF8.GetString(json, 0, json.Length); 
    } 

    public T Deserialize<T>(string aJSON) where T : new() 
    { 
     T deserializedObj = new T(); 
     MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(aJSON)); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(aJSON.GetType()); 
     deserializedObj = (T)ser.ReadObject(ms); 
     ms.Close(); 
     return deserializedObj; 
    } 
}