2011-11-07 11 views
9

में जेएसओएन deserializing मैं एक वस्तु में एक JSON स्ट्रिंग deserializing हूँ। मैं Dictionary<string, string> का उपयोग नहीं कर सकता क्योंकि JSON अंदर जटिल है। मुझे Dictionary<string, dynamic> के बारे में पता है, लेकिन मैं .NET 3.5 ढांचे पर हूं, इसलिए मैं dynamic का उपयोग नहीं कर सकता।ऑब्जेक्ट

तो मैं यहां समाप्त हुए:

object json = new JavaScriptSerializer().Deserialize<object>("myjson"); 

लेकिन मैं प्रतिबिंब के बिना json तक पहुँचने के लिए कोई रास्ता नहीं देखते हैं। कोई सुझाव?

+0

मैं इस डोमेन से बहुत परिचित नहीं हूं इसलिए मैं क्षमा चाहता हूं कि यह एक मूर्ख सवाल है ... लेकिन आप 'json.html' तक पहुंचने के लिए प्रतिबिंब का उपयोग क्यों नहीं कर सकते? –

+1

मैं उपयोग कर सकता हूं, लेकिन मुझे लगता है कि अगर आप कुछ तुच्छ के बीच में प्रतिबिंब का उपयोग करके खुद को देखते हैं, तो आप कुछ गलत कर रहे हैं। इस मामले में, मुझे लगता है Im। –

उत्तर

14

मैं ServiceStack.Text का उपयोग करता हूं और JsonObject.Parse का उपयोग करके इसका विश्लेषण करता हूं।

फिर आपके पास डेटा का एक शब्दकोश है जो पढ़ने में आसान है।

सर्विसस्टैक तेज और बेहतर जेसन.NET से बेहतर है।

1

JSON.NET एक लोकप्रिय JSON क्रमबद्धता पुस्तकालय है, यह आप जब आप की संरचना पता नहीं है के लिए आपके लिखे हुए वस्तुओं to/from JSON मेटा-संरचना (JObject class के माध्यम से) के द्वारा लिखे गए अभ्यावेदन क्रमानुसार करने के साथ-साथ प्राप्त की अनुमति देता है आपका JSON

मुझे यह पेशकश उन प्रस्तावों से बेहतर साबित हुई है जो .NET JSON के लिए कई बार ओवर-ऑफ-द-बॉक्स के साथ आता है।

11

यह के रूप में के रूप में आसानी ServiceStack's JsonSerializer साथ किया जा सकता:

var dictionary = JsonSerializer.DeserializeFromString<Dictionary<string,string>>(myJson); 

यह भी अधिक संक्षिप्त यदि आप विस्तार तरीकों का उपयोग: यदि आप आप गतिशील एपीआई का उपयोग कर सकते

var dictionary = myJson.FromJson<Dictionary<string,string>>(); 

अन्यथा:

var jsonObj = JsonObject.Parse(myJson); 
var value = jsonObj.Get("key"); 

यहां कुछ वास्तविक-दुनिया के उपयोग अलग-अलग दिखाते हैं टी तरीकों से आप एक गतिशील JSON पेलोड deserialize कर सकते हैं:

एक बोनस के रूप में आप का उपयोग किया जाएगा .NET's fastest JSON serializer :)

ServiceStack के JSON Serializer है NuGet पर डाउनलोड करने के लिए भी उपलब्ध है:

PM> Install-Package ServiceStack.Text 
+0

हाय डेमिस, मेरे पास कुछ प्रश्न हैं 1. बड़ी जेसन फाइलों को पार्स करने के लिए एक स्ट्रीमिंग जेसन पार्स विकल्प उपलब्ध है? 2. जब जेसन स्क्वायर ब्रैकेट [] के अंदर एम्बेडेड होता है, तो पार्सिंग विफल हो जाती है क्या इसे ओवरराइड करने के लिए कोई विधि उपलब्ध है? – Gokul

+0

1) सं।2) मैं उदाहरण को समझ नहीं पा रहा हूं, लेकिन सभी पार्सिंग हुक + अनुकूलन उपलब्ध हैं जो 'जेएस कॉनफिग' पर हैं और 'जेएस कॉनफिग ' – mythz

+0

धन्यवाद, डेमिस। मुझे निम्न त्रुटि मिली "SerializationException: टाइप परिभाषाएं '{' से शुरू होनी चाहिए, धारावाहिक प्रकार 'रूट ऑब्जेक्ट' की अपेक्षा करने के साथ स्ट्रिंग हो रही है:]" जब जेसन ऑब्जेक्ट को पार्स करने का प्रयास किया जा रहा है [लिंक-यहां] (http: // pastebin.com/WZTSbYNJ)। जब मैं फ़ाइल में फ़ाइल [और अंतिम वर्ण] में पहला अक्षर हटा देता हूं, तो मैं सफलतापूर्वक विश्लेषण करने में सक्षम हूं। – Gokul

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