मेरे पास एक वर्ग है जिसमें एक डिफ़ॉल्ट रचनाकार है और एक अतिभारित रचनाकार भी है जो मापदंडों के एक सेट में लेता है। ये पैरामीटर ऑब्जेक्ट पर फ़ील्ड से मेल खाते हैं और निर्माण पर असाइन किए गए हैं। इस समय मुझे अन्य उद्देश्यों के लिए डिफ़ॉल्ट कंस्ट्रक्टर की आवश्यकता है, इसलिए यदि मैं कर सकता हूं तो मैं इसे रखना चाहूंगा।
मेरी समस्या: यदि मैं डिफ़ॉल्ट कंस्ट्रक्टर को हटाता हूं और JSON स्ट्रिंग में पास करता हूं, तो ऑब्जेक्ट सही ढंग से डिस्चार्ज हो जाता है और बिना किसी समस्या के कंस्ट्रक्टर पैरामीटर में पास हो जाता है। मैं अंत में उस वस्तु को वापस पा रहा हूं जिस तरह से मुझे उम्मीद थी। हालाँकि, जैसे ही मैं डिफॉल्ट कंस्ट्रक्टर को ऑब्जेक्ट में जोड़ता हूं, जब मैं कहता हूं JsonConvert.DeserializeObject<Result>(jsontext)
कि प्रॉपर्टीज अब आबाद नहीं हैं।
इस बिंदु पर मैंने new JsonSerializerSettings(){CheckAdditionalContent = true}
डिसेरिएलाइज़ेशन कॉल को जोड़ने की कोशिश की है । उसने कुछ नहीं किया।
एक और नोट। कंट्रक्टर पैरामीटर खेतों के नाम से बिल्कुल मेल खाते हैं सिवाय इसके कि पैरामीटर एक लोअरकेस अक्षर से शुरू होते हैं। मुझे नहीं लगता कि यह बात होगी, जैसा कि मैंने उल्लेख किया है, डिसेरिएलाइज़ेशन ठीक काम करता है जिसमें कोई डिफ़ॉल्ट कंस्ट्रक्टर नहीं है।
यहाँ मेरे रचनाकारों का एक नमूना है:
public Result() { }
public Result(int? code, string format, Dictionary<string, string> details = null)
{
Code = code ?? ERROR_CODE;
Format = format;
if (details == null)
Details = new Dictionary<string, string>();
else
Details = details;
}