के बाद निजी रीडोनली फ़ील्ड प्रारंभ करें मुझे Deserialization के बाद निजी रीडोनली फ़ील्ड को प्रारंभ करने की आवश्यकता है। मैं DataContract folowing हैDeserializing
[DataContract]
public class Item
{
public Item()
{
// Constructor not called at Deserialization
// because of FormatterServices.GetUninitializedObject is used
// so field will not be initialized by constructor at Deserialization
_privateReadonlyField = new object();
}
// Initialization will not be called at Deserialization (same reason as for constructor)
private readonly object _privateReadonlyField = new object();
[DataMember]
public string SomeSerializableProperty { get; set; }
[OnDeserializing]
public void OnDeserializing(StreamingContext context)
{
// With this line code even not compiles, since readonly fields can be initialized only in constructor
_privateReadonlyField = new object();
}
}
सभी मैं क्या जरूरत है, उसके बाद Deserialization _privateReadonlyField अशक्त नहीं है।
इस बारे में कोई सुझाव - क्या यह संभव है? या मुझे "केवल पढ़ने योग्य" कुंजी को हटाने की आवश्यकता है, जो एक अच्छा विकल्प नहीं है।
आप क्या क्रमांकन विधि का उपयोग कर रहे हैं? वस्तुओं का निर्माण विभिन्न तरीकों के लिए अलग है। –
आपके '_privateReadonlyField' को' [DataMember] 'चिह्नित करने में क्या गड़बड़ है? डेटा अनुबंध serializer बिना किसी समस्या के इसका ख्याल रखेगा। – dasblinkenlight
जोआचिम इसाक्सन: मैं डेटाकंट्रैक्टजसनसेरियलाइज़र का उपयोग कर रहा हूं लेकिन असल में इससे कोई फर्क नहीं पड़ता - सभी सीरियलाइज़र Deserializing जब FormatterServices.GetUninitializedObject का उपयोग करते हैं। – Andris