2012-11-30 11 views
17

मुझे एक एमवीसी 4/.NET4 WebApi नियंत्रक कार्रवाई में JSON स्ट्रिंग प्राप्त हो रही है। क्रिया का पैरामीटर dynamic है क्योंकि मुझे प्राप्त होने वाले JSON ऑब्जेक्ट के बारे में प्राप्त करने वाले अंत में कुछ भी नहीं पता है।गतिशील JContainer (JSON.NET) और रनटाइम पर गुणों पर Iterate

public dynamic Post(dynamic myobject)   

JSON स्वचालित रूप से पार्स किया गया है और जिसके परिणामस्वरूप dynamic वस्तु एक Newtonsoft.Json.Linq.JContainer है। जैसा कि अपेक्षित है, मैं रनटाइम पर गुणों का मूल्यांकन कर सकता हूं, इसलिए यदि JSON में myobject.myproperty की तरह कुछ शामिल है तो मैं अब डायनामिक ऑब्जेक्ट प्राप्त कर सकता हूं और C# कोड के भीतर myobject.myproperty पर कॉल कर सकता हूं। अब तक सब ठीक है।

अब मैं नेस्टेड गुणों सहित जेएसओएन के हिस्से के रूप में आपूर्ति की गई सभी संपत्तियों पर पुन: प्रयास करना चाहता हूं। हालांकि, अगर मैं myobject.GetType().GetProperties() करता हूं तो यह केवल उन संपत्तियों के बजाय Newtonsoft.Json.Linq.JContainer के गुण लौटाता है जो कि मैं ढूंढ रहा हूं (जो JSON का हिस्सा थे)।

कोई विचार यह कैसे करना है?

+0

[इस] (http://code.msdn.microsoft .com/supporting-different-data-b0351c9a) आलेख आपकी मदद कर सकता है, यह जांचें कि वह 'DeserializeRequest' विधि में क्या कर रहा है। –

उत्तर

38

मुझे लगता है कि यह एक प्रारंभिक बिंदु हो सकता है

dynamic dynObj = JsonConvert.DeserializeObject("{a:1,b:2}"); 

//JContainer is the base class 
var jObj = (JObject)dynObj; 

foreach (JToken token in jObj.Children()) 
{ 
    if (token is JProperty) 
    { 
     var prop = token as JProperty; 
     Console.WriteLine("{0}={1}", prop.Name, prop.Value); 
    } 
} 

संपादित

यह भी आपको मदद मिल सकती

var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(jObj.ToString()); 
+0

धन्यवाद! जेएसओएन नेस्टेड होने पर यह कैसे काम करेगा? – Alex

+1

@ एलेक्स फिर चीजें जटिल हो रही हैं और आपको एक रिकर्सिव फ़ंक्शन लिखना पड़ सकता है। आपको हमेशा जॉब्जेक्ट, जेएरे, जेपीप्रर्टी आदि की जांच करनी चाहिए, मूल रूप से आपको दोहराना चाहिए कि 'जेसन कन्वर्ट.डिसरियलइज ऑब्जेक्ट 'करता है। –

+2

@Alex मुझे लगता है कि 'शब्दकोश <स्ट्रिंग, ऑब्जेक्ट>' को deserializing भी मदद कर सकता है। संपादन देखें। –

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