2014-07-07 5 views
5

From this answer मेरे पास कक्षा JsonCreationConverter<T> और ठोस प्रकारों के लिए कुछ कार्यान्वयन हैं। लेकिन यह अमूर्त वर्ग WriteJson विधि के कार्यान्वयन को याद करता है।JSON.NET: JsonCreationConverter काम लिख रहा है WriteJson कार्यान्वयन

इंटरनेट पर मैं कोड की खोज:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
{ 
    //use the default serialization - it works fine 
    serializer.Serialize(writer, value); 
} 

लेकिन जैसे-जैसे यह अपने आप (बेशक) हर समय कॉल इस कोड StackOverflowException साथ समाप्त होता है। अन्य समाधान सभी वस्तुओं को एक-एक करके क्रमबद्ध करने के साथ ठोस वस्तुओं के कार्यान्वयन के लिए थे। मैं वास्तव में इसे टालना चाहता हूं, बस डिफ़ॉल्ट क्रमबद्धता का उपयोग करना चाहता हूं, जो मेरे लिए ठीक है। Serialization के लिए मेरे जेसन कनवर्टर को कॉल करने से बचने के लिए। मुझे केवल deserialization के लिए इसकी जरूरत है। क्या यह संभव है? कैसे?

उत्तर

9

कनवर्टर में CanWrite संपत्ति गेटर को ओवरराइड करने का प्रयास करें ताकि यह false लौटा सके। यह कनवर्टर को क्रमबद्ध करने के दौरान इस्तेमाल होने से रोक देगा।

public override bool CanWrite 
    { 
     get { return false; } 
    } 
+0

धन्यवाद। मुझे बहुत शर्म आती है मुझे यह खुद नहीं मिला :-)। – Zoka

+0

कोई चिंता नहीं। मैं खुशी से मदद कर सकता है। –

+0

आप एक संत हैं। – Dagrooms