2010-12-14 13 views
147

पर जॉबजेक्ट को कैसे बेकार करें I खुशीपूर्वक Newtonsoft JSON library का उपयोग करें। उदाहरण के लिए मैं एक JObject एक .NET ऑब्जेक्ट से इस मामले में अपवाद की एक उदाहरण (हो सकता है या नहीं हो सकता है एक उपवर्ग) बन जाएगा,.NET ऑब्जेक्ट

if (result is Exception) 
    var jobjectInstance = JObject.FromObject(result); 

अब मैं जानता हूँ कि पुस्तकालय JSON टेक्स्ट deserialize कर सकते हैं (यानी एक स्ट्रिंग) एक वस्तु को

// only works for text (string) 
Exception exception = JsonConvert.DeserializeObject<Exception>(jsontext); 

लेकिन क्या मैं देख रहा हूँ है:

// now i do already have an JObject instance 
Exception exception = jobjectInstance.???? 

खैर यह स्पष्ट है कि मैं परसे जा सकते हैं जेएसओएन पाठ पर वापस 10 और फिर deserialize कार्यक्षमता का उपयोग करें, लेकिन यह मेरे पीछे पीछे लगता है।

उत्तर

279

इस post के अनुसार, यह अब काफी बेहतर है:

// pick out one album 
JObject jalbum = albums[0] as JObject; 

// Copy to a static Album instance 
Album album = jalbum.ToObject<Album>(); 

प्रलेखन: Convert JSON to a Type

+9

प्रदर्शन प्रभाव पर कोई विचार यहां? प्रतिबिंब हर बार इस्तेमाल किया जाएगा? –

+0

क्या यह कस्टम जेसन कनवर्टर के साथ ऐसा करना संभव है? –

+1

संकेत के लिए धन्यवाद। इसने मेरी बहुत मदद की। मुझे कुछ जोड़ने दो: एक सामान्य विधि में जहां मैं टाइप 'टी' का उपयोग कर रहा हूं, मुझे कुछ चाहिए 'परिणाम = (मूल्य जॉब्जेक्ट है)? ((जॉब्जेक्ट) मान) .oobject (): (टी) डिफ़ॉल्ट (टी); 'इसे सफलतापूर्वक रूपांतरित करने के लिए (नोट - 'मान' डेटाबेस से आने वाली एक वस्तु है जो जॉब्जेक्ट हो सकती है या किसी अन्य मामले में शून्य होना चाहिए)। – Matt

35

प्रलेखन से मैंने पाया इस

JObject o = new JObject(
    new JProperty("Name", "John Smith"), 
    new JProperty("BirthDate", new DateTime(1983, 3, 20)) 
); 

JsonSerializer serializer = new JsonSerializer(); 
Person p = (Person)serializer.Deserialize(new JTokenReader(o), typeof(Person)); 

Console.WriteLine(p.Name); 

Person के लिए वर्ग परिभाषा निम्न के संगत होना चाहिए:

class Person { 
    public string Name { get; internal set; } 
    public DateTime BirthDate { get; internal set; } 
} 

संपादित

आप नवीनतम संस्करण का उपयोग कर रहे हैं JSON.net और की कस्टम serializatio की आवश्यकता नहीं है n, कृपया उपरोक्त TienDo का जवाब देखें (या नीचे अगर आप मुझे ऊपर उठाते हैं: पी), जो अधिक संक्षिप्त है।

+1

मैं नहीं बल्कि आशुलिपि की तुलना में, इस दृष्टिकोण का उपयोग करने के लिए, कस्टम क्रमांकन सेटिंग्स पारित करने में सक्षम होने की जरूरत। –