पर पैरामीटर पास करने के लिए कैसे करें Newtonsoft.Json
के साथ किसी ऑब्जेक्ट को deserializing जब मुझे एक ठेकेदार को कुछ पैरेंट उदाहरण पास करने के साथ एक छोटी सी समस्या है।कन्स्ट्रक्टर deserializing जेसन
A a = new A()
a.Bs = new List<B>()
a.Bs.Add(new B(a));
a.Bs.Add(new B(a));
a.Bs.Add(new B(a));
var json = JsonConvert.SerializeObject(a);
// Here i need to call the constructor of B when creating new instances
var newA = JsonConvert.DeserializeObject<A>(json);
समस्या है, कि जब वस्तु deserializing, null
करेंगे:
मान लेते हैं मैं निम्नलिखित वर्गों
public class A
{
public string Str1 { get; set; }
public IList<B> Bs { get; set; }
}
public class B
{
public B(A a)
{
// a should not be null!
Console.WriteLine(a.Str)
}
}
और अब मैं serailze है और की तुलना में इस तरह वस्तु a
deserialize चलो B
के निर्माता को पास किया जाना चाहिए। क्या किसी ने इस मुद्दे/समस्या को हल किया है?
बहुत बहुत धन्यवाद!
आप वास्तव में इस की जरूरत है, तो आप अपने डिजाइन में परिवर्तन कर सकते हैं। यदि आप क्रमबद्ध नहीं कर सकते हैं और फिर deserialize और ऑब्जेक्ट, आप serialization में इसका उपयोग नहीं करना चाहिए। – CodeCaster
मुझे कोई त्रुटि संदेश नहीं मिला है, पास मूल्य केवल 'शून्य' है। आर्किटेक्चर को बदलना वास्तव में संभव नहीं है, क्योंकि इससे बहुत सारे रिफैक्टरिंग काम का कारण बन जाएगा। – BendEg
मेरा मतलब है कि यदि आपकी कक्षा किसी आंतरिक सदस्य पर निर्भर करती है, तो आप इसे कम से कम deserialize नहीं कर सकते हैं। केवल सार्वजनिक सदस्यों पर डिफ़ॉल्ट कार्यों द्वारा serialization। आप एक सार्वजनिक बनाना चाहते हैं, या इसे किसी अन्य तरीके से क्रमबद्ध बनाना चाहते हैं। – CodeCaster