2011-10-21 18 views
6

मैं यहाँ से SimpleJson पुस्तकालय का उपयोग कर रहा करने के लिए: http://simplejson.codeplex.com/नेट SimpleJson: deserialize JSON गतिशील वस्तु

मैं इस तरह एक गतिशील वस्तु को JSON स्ट्रिंग deserialize करना चाहते हैं:

dynamic json = SimpleJson.SimpleJson.DeserializeObject("{\"foo\":\"bar\"}"); 

var test = json.foo; 

Deserialization हिस्सा ठीक से काम करता है, लेकिन json.foo कॉलिंग त्रुटि संदेश 'SimpleJson.JsonObject' does not contain a definition for 'foo' के साथ एक RuntimeBinderException फेंकता है।

मैं सरल जेसन का उपयोग कर JSON स्ट्रिंग को deserialize कैसे कर सकता हूं और json.foo वाक्यविन्यास का उपयोग कर गतिशील गुणों का उपयोग कैसे कर सकता हूं?

उत्तर

9

ठीक है, यह सिंपलजेसन के लिए स्रोत कोड पढ़ने का मामला है। :-) गतिशील वाक्यविन्यास का समर्थन करने के लिए एक रेखा को असम्बद्ध करने की आवश्यकता है जिसे मैं ढूंढ रहा हूं। निश्चित नहीं है कि यह डिफ़ॉल्ट रूप से क्यों सक्षम नहीं है।

स्रोत कोड से:

// NOTE: uncomment the following line to enable dynamic support. 
//#define SIMPLE_JSON_DYNAMIC 
+2

एक निष्पक्ष टिप्पणी है कि, L.B. मैं सवाल को हटा नहीं सकता, इसलिए उम्मीद है कि यह उन लोगों के लिए एक उपयोगी आर्टिफैक्ट के रूप में कार्य करेगा जो NuGet के माध्यम से SimpleJson इंस्टॉल करते हैं और जैसा मैंने किया था उसी समस्या में भाग लेते हैं। मेरे लिए सहायक होने के लिए –

+1

+1। –

2

नमूने को देखते हुए, JsonObject गुणों को एक शब्दकोश की तरह एक्सेस किया जाता है। तो json.foo के बजाय, आपको json["foo"] की आवश्यकता होगी।

आप dynamic का उपयोग करके वास्तव में खराब हैं, क्योंकि इसमें कुछ भी गतिशील नहीं है: विधि JsonObject लौटाती है, जिसमें केवल foo सदस्य नहीं होता है। यदि आपने dynamic का उपयोग नहीं किया था, तो आप संकलन समय पर उस त्रुटि संदेश को प्राप्त कर सकते थे।

यदि आप लिंक एल.बी. पर एक नज़र डालें। बशर्ते, यह दिखाता है कि इस गतिशील कार्यक्षमता को स्वयं कैसे कार्यान्वित करें।

1

> सीएससी/टी: पुस्तकालय/डी: SIMPLE_JSON_DYNAMIC SimpleJson.cs

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