DataContractSerializer का उपयोग करते समय मैं किसी संपत्ति को कैसे अनदेखा कर सकता हूं?


125

मैं एक वर्ग को अनुक्रमित करने के लिए .NET 3.5SP1 और DataContractSerializer का उपयोग कर रहा हूं। SP1 में, उन्होंने व्यवहार को बदल दिया ताकि आपको कक्षा में DataContract / DataMember विशेषताओं को शामिल न करना पड़े और यह पूरी बात को केवल क्रमबद्ध रूप से प्रस्तुत करेगा। यह वह व्यवहार है जिसका मैं उपयोग कर रहा हूं, लेकिन अब मुझे धारावाहिक से एक संपत्ति की उपेक्षा करने की आवश्यकता है। मुझे पता है कि ऐसा करने का एक तरीका वर्ग में DataContract विशेषता को जोड़ना है, और केवल उन सभी सदस्यों पर DataMember विशेषता डालना है, जिन्हें मैं शामिल करना चाहता हूं। मेरे पास कारण हैं, हालांकि, यह मेरे लिए काम नहीं करेगा।

तो मेरा सवाल यह है कि क्या कोई विशेषता या कोई ऐसी चीज है जिसका उपयोग करके मैं DataContractSerializer को किसी संपत्ति की उपेक्षा कर सकता हूं?

जवाबों:


176

5
मेरे डोमेन लेयर में उचित असेंबली रेफरेंस नहीं था, फिर मैंने डॉक्यूमेंटेशन को मिस-रीड किया और यह सोचकर समाप्त किया कि यह .NET 4.5 की एक नई विशेषता है। सफलता के बिना मेरी टिप्पणी को हटाने के लिए इस धागे को वापस खोजने की कोशिश की गई (जल्दी में था)। इसके अलावा, इस उत्तर की तारीख को देखते हुए एक घंटी बजनी चाहिए थी .... 2009 .NET 4.5 पोस्ट ...) अपना समय बर्बाद करने के लिए क्षमा करें।
प्लूक

2
.NET 4.5 पर यहाँ: System.Runtime.Serialization.IgnoreDataMemberAttribute किसी भी चीज़ के लिए काम करता है
SparK

1
यहां तक ​​कि 3-पार्टी लाइब्रेरी ने JSON.NET की तरह [IgnoreDataMember] के लिए समर्थन जोड़ा है।
डग

5
एक छोटा उदाहरण नहीं होगा यह एक जवाब वास्तव में वोट के लायक है?
TaW

1
यह उत्तर अधूरा है और इस प्रकार भ्रामक है। [IgnoreDataMember]यदि वर्ग में [Serializable]विशेषता है तो काम नहीं करेगा । डग द्वारा उत्तर में विवरण देखें ।
एलेक्स फेनशेटिन

165

इसके अतिरिक्त, DataContractSerializer [Serializable] के रूप में चिह्नित आइटमों को अनुक्रमित करेगा और अनाम प्रकारों को क्रमांकित करने के लिए समर्थन की अनुमति देने के लिए बाद में .NET 3.5 SP1 में भी चिन्हित प्रकारों को अनुक्रमित करेगा।

इसलिए, यह इस बात पर निर्भर करता है कि आपने अपनी कक्षा को किस प्रकार सजाया है कि कैसे सदस्य को क्रमबद्ध रखा जाए:

  • यदि आपने उपयोग किया है [DataContract], तो [DataMember]संपत्ति के लिए हटा दें ।
  • यदि आपने उपयोग किया है [Serializable], तो संपत्ति के लिए फ़ील्ड के[NonSerialized] सामने जोड़ें ।
  • यदि आपने अपनी कक्षा को सजाया नहीं है, तो आपको [IgnoreDataMember]संपत्ति में जोड़ना चाहिए ।

1
"अपनी कक्षा को सजाने" से आपका क्या मतलब है pls बताएं?
०१

यदि आपने अपनी श्रेणी के किसी भी गुण का उपयोग नहीं किया है, जैसे कि [DataContract] या [Serializable], तो आप उस संपत्ति पर [IgnoreDataMember] जोड़ देंगे जिसे आप क्रमबद्ध नहीं करना चाहते हैं। पॉल का जवाब देखें या checkoutall.com/Blog/Index/201410240204236271/…
डग

8
यह स्वीकृत उत्तर की तुलना में बहुत अधिक जानकारीपूर्ण है।
पावगोरान

क्या उस सदस्य को अनदेखा करने और डेटा संरचना / वर्ग को क्रमिक रूप से जारी रखने का कोई तरीका है?
22

जब [Serializable] का उपयोग किया गया था, तो PROPERTY को छोड़कर कैसे?
डैनियल

31

XML सीरियलाइज़िंग में, आप किसी क्लास को क्रमांकित करते समय किसी संपत्ति को अनदेखा करने के लिए [XmlIgnore] विशेषता (System.Xml.Serialization.XmlIgnoreAttribute) का उपयोग कर सकते हैं।

यह आपके लिए उपयोग की जा सकती है (या यह किसी के लिए भी उपयोग की जा सकती है, जिसने यह प्रश्न पाया कि किसी संपत्ति को अनदेखा करने का प्रयास करते समय XML में Serializing, जैसा कि मैं था)।


4
आह नकारात्मक वोट। बस मैंने सोचा कि मैं पोस्ट करूंगा क्योंकि जब मैंने किसी वर्ग को क्रमबद्ध करते समय एक संपत्ति को अनदेखा करने का तरीका खोजा, तो यह पोस्ट सामने आई। और मैं इसे यहाँ रखना चाहता था अगर किसी को भी यह पोस्ट उसी तरह मिले जो मैंने किया था।
क्रिस एडम्स

[मेटा में] मुझे लगता है कि उन्होंने नकारात्मक मतदान किया क्योंकि आपको XMLSerialization के बारे में एक और (अधिक स्पष्ट) प्रश्न खोलना चाहिए और इसका उत्तर देना चाहिए, इसलिए लोग अपनी खोज में उस प्रश्न को अधिक प्रासंगिक
पाएंगे

8
यह उत्तर ठीक वैसा ही है जैसा मैं देख रहा था
aclave1

2

[NonSerialized ()] विशेषता के साथ फ़ील्ड को चिह्नित करने का प्रयास करें। यह सीरियल निर्माता को क्षेत्र की अनदेखी करने के लिए बताएगा।

https://msdn.microsoft.com/en-us/library/system.nonserializedattribute(v=vs.110).aspx


1
DataContractSerializer का उपयोग करते समय नहीं
टॉम

1
उन्होंने गुणों के बारे में पूछा कि फ़ील्ड नहीं!
TaW

0

आप जो कह रहे हैं, वह इस स्थान पर MSDN लाइब्रेरी में जो कहता है, उसके विपरीत है:

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx

मुझे आपके द्वारा बताई गई SP1 सुविधा का कोई उल्लेख नहीं दिखता है।


1
आप यहां डॉक्टर से मिल सकते हैं (तीसरा पैराग्राफ, दूसरा वाक्य): msdn.microsoft.com/en-us/library/ms733127.aspx
NotDan

हालांकि आपने जो लिंक पोस्ट किया है, उसके बारे में आप सही हैं, मुझे यकीन नहीं है कि वे इसका उल्लेख क्यों नहीं करते हैं।
NotDan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.