2014-09-29 9 views
33

मैं पूर्वनिर्धारित डेटा संरचना के साथ एक वस्तु है JSON.NET डेटा के दौरान त्रुटियों को पार्स ध्यान न दें:पार्स करने

public class A 
{ 
    public string Id {get;set;} 
    public bool? Enabled {get;set;} 
    public int? Age {get;set;} 
} 

और JSON होने की

{ "Id": "123", "Enabled": true, "Age": 23 } 

मैं सकारात्मक रास्ते में JSON त्रुटि हैंडल करना चाहते हैं माना जाता है , और जब भी सर्वर परिभाषित डेटा-प्रकारों के लिए अप्रत्याशित मान देता है, तो मैं इसे अनदेखा करना चाहता हूं और डिफ़ॉल्ट मान सेट (शून्य) है।

अभी जब JSON आंशिक रूप से अमान्य मैं JSON पाठक अपवाद हो रही है:

{ "Id": "123", "Enabled": "NotABoolValue", "Age": 23 } 

और मैं सब पर किसी भी वस्तु नहीं मिलता है।

new A() { Id = "123", Enabled = null, Age = 23 } 

और पार्स चेतावनी यदि संभव हो तो: क्या मैं चाहता हूँ एक वस्तु प्राप्त करने के लिए है। क्या JSON.NET के साथ पूरा करना संभव है?

var a = JsonConvert.DeserializeObject<A>("-- JSON STRING --", new JsonSerializerSettings 
    { 
     Error = HandleDeserializationError 
    }); 

जहां HandleDeserializationError निम्न विधि है:

उत्तर

61

अक्रमांकन त्रुटियों, निम्नलिखित कोड को संभालने के लिए उपयोग करने में सक्षम होने के

public void HandleDeserializationError(object sender, ErrorEventArgs errorArgs) 
{ 
    var currentError = errorArgs.ErrorContext.Error.Message; 
    errorArgs.ErrorContext.Handled = true; 
} 

HandleDeserializationError कई बार के रूप के रूप में त्रुटियां होने बुलाया जाएगा जेसन स्ट्रिंग में। त्रुटि उत्पन्न करने वाले गुण प्रारंभ नहीं किए जाएंगे।

+1

बस महान काम करता है। यह वहीं है जिसे मैं ढूंढ रहा था! धन्यवाद –

+17

ध्यान दें कि ErrorEventArgs Newtonsoft.Json.Serialization.ErrorEventArgs है और System.IO.ErrorEventArgs नहीं है। –

+0

एक्सेलेंट! इस काम! – Yonedev

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