सूची परिदृश्य के लिए, शायद सिर्फ एक अलग संपत्ति है, इसलिए बजाय:
[DataMember]
public List<Whatever> Items {get {...}}
आपके पास:
public List<Whatever> Items {get {...}}
[DataMember]
public List<Whatever> SelectedItems {
get { return Items.FindAll(x => x.IsSelected); }
हालांकि, deserializing कि हो सकता है एक दर्द, क्योंकि आपकी सूची आइटम में फ़ीड करने की आवश्यकता होगी; यदि आपको भी deserialize की जरूरत है, तो आपको एक जटिल कस्टम सूची लिखने की आवश्यकता हो सकती है।
एक दूसरे विचार के रूप में; बस के साथ ऑब्जेक्ट का दूसरा उदाहरण बनाएं, केवल आइटम जिन्हें आप क्रमबद्ध करना चाहते हैं; बहुत ही सरल और प्रभावी:
var dto = new YourType { X = orig.X, Y = orig.Y, ... };
foreach(var item in orig.Items) {
if(orig.Items.IsSelected) dto.Items.Add(item);
}
// now serialize `dto`
AFAIK, DataContractSerializer
सदस्यों की सशर्त क्रमबद्धता का समर्थन नहीं करता।
व्यक्तिगत संपत्ति स्तर पर, यह एक विकल्प यदि आप XmlSerializer
, हालांकि उपयोग कर रहे हैं - एक संपत्ति के लिए, कहते हैं, Foo
, तो आप सिर्फ जोड़ें:
public bool ShouldSerializeFoo() {
// return true to serialize, false to ignore
}
या:
[XmlIgnore]
public bool FooSpecified {
get { /* return true to serialize, false to ignore */ }
set { /* is passed true if found in the content */ }
}
ये पूरी तरह नाम-आधारित सम्मेलन के रूप में लागू होते हैं।
धन्यवाद, मार्क। तो उदाहरण के लिए, यदि मेरे पास सूची का उदाहरण है जहां MyClass के पास तीन गुण X, Y और Z हैं, तो केवल एक्स और वाई गुणों को शामिल करना संभव होगा और सूची में प्रत्येक आइटम के लिए ज़ेड को अनदेखा करना होगा और फिर यह सूची DataContractSerializer को भेजें और धारावाहिक में आउटपुट में केवल एक्स और वाई शामिल होंगे और ज़ेड को अनदेखा करेंगे? मैं सिर्फ सूची में प्रत्येक आइटम के लिए कुछ गुणों को बाहर करना चाहता हूं। क्या आपने ऊपर निर्दिष्ट कुछ विकल्पों के साथ यह संभव है? –
Joxi
'X' और' Y' को क्रमबद्ध करने के मामले में, लेकिन 'Z' नहीं; डीसीएस के साथ जो केवल उपलब्ध है (जहां तक मुझे पता है) यदि यह ** ** ** ** पर लागू होता है, यानी '[डेटामेम्बर]' या '[IgnoreDataMember] 'उचित रूप से चुनकर; डीसीएस में मेरे सर्वोत्तम ज्ञान के लिए सशर्त क्रमिकरण नहीं है –