.net - Changing [Serializable] to [DataContract] -


मेरे पास एक मौजूदा सेट क्लास है जो [Serializable] attribute का उपयोग करते हैं। मुझे उन्हें WCF सेवा में बेनकाब करने की जरूरत है और इसलिए मुझे उन्हें [DataContract] विशेषता के लिए आवश्यकता है यह सिर्फ सीरियलाइज करने योग्य है लेकिन फिर गुणों को अजीब तरह के नाम मिलते हैं जैसे ... k__BackingField।

ये कक्षाएं कहीं और का उपयोग करती हैं और मैं सोच रहा हूं कि क्या मुझे विशेषता को बदलकर कुछ भी तोड़ने का जोखिम है। इसके अलावा, यह संभव है और क्या यह दोनों के लिए एक अच्छा विचार है?

धन्यवाद।

जब आप केवल एक DataContractAttribute निर्दिष्ट करते हैं लेकिन विशेष रूप से उन सदस्यों को निर्दिष्ट नहीं करते हैं जिन्हें आप शामिल करना चाहते हैं, तो डिफ़ॉल्ट व्यवहार क्लाइंट के सभी क्षेत्रों को सीरियल कराना है, जिसमें निजी लोगों शामिल हैं इसलिए जो नाम आप प्राप्त कर रहे हैं, वे इसलिए हैं क्योंकि आप स्वत: कार्यान्वित गुणों का उपयोग कर रहे हैं, मुझे लगता है।

इसलिए दूसरे शब्दों में, उन गुणों पर डेटामेम्बर विशेषताओं को ध्यान दें जिन्हें मैं सीरियलकृत करना चाहता हूं।

  [DataContract] सार्वजनिक वर्ग MyClass {[DataMember] सार्वजनिक स्ट्रिंग SomeString {get; सेट; } [डेटामेम्बर] पब्लिक इंट कुछइंट {प्राप्त; सेट; } सार्वजनिक स्ट्रिंग DontSerializeThis {get; सेट; }}  

इससे डेटा कंट्रैक्ट्रेसेलाइजर को गुण को सीरियल करना होगा और उनके कंपाइलर-जनरेटेड बैकिंग फ़ील्ड नहीं। हालांकि, यह आवश्यक है कि संपत्तियों को पब्लिक गुणों को पढ़ना / लिखना पड़े क्योंकि यह इन प्रॉपर्टी एक्सेसर्स के माध्यम से जाने के लिए सीरिजलाइज्ड डेटा सेट करने और सेट करना होगा।

दूसरा विकल्प है स्वचालित रूप से कार्यान्वित गुणों को " सामान्य "गुणों का मतलब है जो आपके बैकिंग फ़ील्ड को जोड़ने का मतलब है। तो आप या तो सभी डेटामेम्बर एट्रिब्यूट को छोड़ सकते हैं जिसका अर्थ है कि वे सभी सीरियलाइज किए जाएंगे, या आप अपने द्वारा बनाई गई नई फ़ील्ड्स के लिए डेटामेम्बर एट्रिब्यूट्स जोड़ सकते हैं, जो आप चाहते हैं, उन्हें सीरियल किए गए आउटपुट में उनका नाम बदलने देता है।

< P> आखिर में, आपकी बातों के बारे में कि क्या दोनों प्रणालियों में एक वर्ग सीरियल करने योग्य बनाने के लिए यह एक अच्छा विचार है, वास्तव में नहीं यदि आप चाहते हैं कि कक्षा क्लासिक सीरियलाइजेशन में बाइनरीफॉर्मर या एक्सएमएल सेरियलाइज़र जैसी कुछ चीज़ों का उपयोग करे, तो आपको सिर्फ उस परिदृश्य को लक्षित करना चाहिए क्योंकि डेटा कंट्रैक्ट्रेसेरियलाइजर पहले ही इन वर्गों को सीरियल कर सकता है।

यदि आपका लक्ष्य तेज़, कुशल, नेट है 3+ से। NET 3+ (या सिल्वरलाइट) संचार, डेटाकॉन्ट्रक्ट जाने का तरीका है यदि आपका लक्ष्य एक्सएमएल रिप्रेसेनेशन पर अंतर और / या नियंत्रण है, तो XML सीरियलाइजेशन एट्रिब्यूट्स के साथ रहें।


Comments