c# - एक सेटटर के बिना संपत्तियों को क्रमबद्ध क्यों किया जाता है




.net xml-serialization (4)

एमएसडीएन दस्तावेज में " एक्सएमएल सीरियलाइजेशन पेश करना " देखें। अन्य चीजों के अलावा, यह कहता है:

आइटम जिन्हें सीरियलाइज्ड किया जा सकता है

निम्नलिखित आइटम XmlSerializer वर्ग का उपयोग करके क्रमबद्ध किया जा सकता है:

Public read/write properties and fields of public classes.

Classes that implement ICollection or IEnumerable.

ध्यान दें:

Only collections are serialized, not public properties.
XmlElement objects.

XmlNode objects.

DataSet objects.

साथ ही, " एक्सएमएल-सीरियलज़ेबल क्लास को पैरामीटर रहित कन्स्ट्रक्टर की आवश्यकता क्यों है "

इसके अलावा, IXmlSerializable

उपरोक्त प्रकारों के अतिरिक्त जो एक्सएमएल सीरिएलाइज़र द्वारा क्रमबद्ध किया जा सकता है, IXmlSerializable इंटरफ़ेस को लागू करने वाले किसी भी प्रकार को क्रमबद्ध और deserialized किया जा सकता है। विशेष रूप से, इसका मतलब है कि XElement और XDocument प्रकारों को क्रमबद्ध किया जा सकता है।

" IXmlSerializable इंटरफ़ेस " देखें।

मेरे पास एक धारावाहिक वर्ग है और मेरी कक्षा में गुणों में से एक Guid में Guid उत्पन्न करता है। संपत्ति कोई सेटटर लागू नहीं करती है और धारावाहिकरण के दौरान अनदेखा होती है। मेरी संपत्ति को क्रमबद्ध करने के लिए मुझे ऐसा क्यों करना है और मुझे हमेशा एक सेटर लागू करना होगा।

[Serializable]
public class Example
{
    [XmlAttribute("id")]
    public string Id
    {
        get
        {
             return Guid.NewGuid().ToString();
        }
    }
}

मैंने एक खाली सेटर को कार्यान्वित करने की कोशिश की और इसे सही ढंग से क्रमबद्ध किया गया।

[Serializable]
public class Example
{
    [XmlAttribute("id")]
    public string Id
    {
        get
        {
             return Guid.NewGuid().ToString();
        }
        set {}
    }
}

अपडेट करें :

क्या आप बता सकते हैं कि मैं उन गुणों को कैसे परिभाषित कर सकता हूं जिनके मूल्य कभी नहीं बदलते हैं या जिनके लिए मूल्य आंतरिक रूप से उत्पन्न होता है?


यदि आप निजी सेटर्स रखना चाहते हैं, और ऑब्जेक्ट को क्रमबद्ध / deserializable, इंपीरियलज़ेबल लागू करना है, और MyObject (SerializationInfo जानकारी, StreamingContext संदर्भ) जैसे कन्स्ट्रक्टर बनाएं। यहां एक उदाहरण मिला है


सीरियलाइजेशन विशेषताओं का उपयोग वस्तुओं को क्रमबद्ध करने और deserialize करने के लिए किया जाता है। XmlSerializer मान लेगा कि आपको किसी भी संपत्ति को क्रमबद्ध करने की आवश्यकता नहीं है जिसमें सेटटर नहीं है। ऑब्जेक्ट में एक स्ट्रिंग को deserializing जब सेटर का उपयोग किया जाएगा, क्योंकि ऑब्जेक्ट का एक उदाहरण बनाया जाना चाहिए और फिर सेटर का उपयोग संपत्ति मूल्य को पॉप्युलेट करने के लिए किया जाएगा।


XMLSerializer सीमा - XMLSerializer बिना गुणों को क्रमबद्ध नहीं किया जा सकता है।

लेकिन आप private setter properties को क्रमबद्ध करने के लिए DataContractSerializer का उपयोग कर सकते हैं -

[DataMember]
public string Id
{
    get
    {
         return Guid.NewGuid().ToString();
    }
    private set {}
}






xml-serialization