मुझे बस कुछ पागल महसूस हुआ, जिसे मैंने पूरी तरह से असंभव माना: जब किसी ऑब्जेक्ट को deserializing, DataContractSerializer कन्स्ट्रक्टर पर कॉल नहीं करता है!DataContractSerializer मेरे कन्स्ट्रक्टर को कॉल नहीं करता है?
उदाहरण के लिए, इस वर्ग लें:
[DataContract]
public class Book
{
public Book()
{ // breakpoint here
}
[DataMember(Order = 0)]
public string Title { get; set; }
[DataMember(Order = 1)]
public string Author { get; set; }
[DataMember(Order = 2)]
public string Summary { get; set; }
}
जब मैं उस वर्ग की एक वस्तु deserialize, ब्रेकपाइंट मारा नहीं है। मुझे बिल्कुल पता नहीं है कि यह कैसे संभव है, क्योंकि यह इस वस्तु के लिए एकमात्र निर्माता है!
मैं मान लिया है कि शायद एक अतिरिक्त निर्माता DataContract
विशेषता की वजह से संकलक द्वारा उत्पन्न की गई, लेकिन मैं इसे प्रतिबिंब के माध्यम से नहीं मिला ...
तो, मैं जानना चाहते हैं कि क्या यह है: कन्स्ट्रक्टर के बिना मेरी कक्षा का एक उदाहरण कैसे बनाया जा सकता है ??
नोट: मुझे पता है कि मैं OnDeserializing
विशेषता का उपयोग कर सकता हूं जब deserialization शुरू होता है, यह मेरे प्रश्न का विषय नहीं है।
या "ऑनडिसेरियलाइज्ड", जब ऑब्जेक्ट को लापता फ़ील्ड भरने के लिए deserializing किया जाता है। –
यह प्रश्न मेरे दिमाग को भी पार कर गया: http://stackoverflow.com/questions/178645/how-does-wcf-deserialization-instantiate-objects-without-calling-a-constructor –