Thursday, 15 August 2013

The DataMember attributes in WCF are not honored when I copy from List to another -


जब मैं DataColumns वर्ग को दरोंऑफ़ पे क्लास में प्रतिलिपि करता हूं, तब डब्लूसीएफ में डेटामेम्बर विशेषताओं का सम्मान नहीं किया जाता है जब मैं निम्नलिखित कोड का उपयोग करता हूं प्रतिलिपि बनाना। मैं चरण 8, चरण 9, चरण 10 में परिणाम देखना चाहता हूं, लेकिन मुझे चरण 10 मिलता है, चरण 8, चरण 9 के रूप में ऑर्डर के अंशदान की अनदेखी की जा रही है और स्तंभों को वर्णानुक्रम में वर्णित रूप से क्रमबद्ध किया जा रहा है । इसके अलावा EmitDefaultValue = false विशेषता को नजरअंदाज किया जा रहा है और मैं शून्य मानों के साथ कदम देखता हूं।

<पूर्व> सूची & lt; DataColumns & gt; स्रोत = नई सूची & lt; DataColumns & gt; (); सूची के & lt; RatesOfPay & gt; गंतव्य = नई सूची & lt; दरेंऑफ़ पे & gt; (); गंतव्य = स्रोत। चयन करें (डी = & gt; नए दरेंऑफ़ पे (step8 = d.column8, step9 = d.column9, step10 = d.column10})। ToList (); सार्वजनिक वर्ग DataColumns {[डेटामेम्बर (ऑर्डर = 0, नाम = "कॉलम 8", एमिट डीफॉल्ट वैल्यू = गलत)] सार्वजनिक स्ट्रिंग column8 {get; सेट; } [डेटामेम्बर (ऑर्डर = 1, नेम = "स्तंभ 9", एमिट डीफॉल्ट वैल्यू = गलत)] सार्वजनिक स्ट्रिंग कॉलम 9 {प्राप्त; सेट; } [डेटामेम्बर (ऑर्डर = 2, नेम = "स्तंभ 10", एमिट डीफॉल्ट वैल्यू = गलत)] सार्वजनिक स्ट्रिंग कॉलम 10 {प्राप्त करें; सेट; }} पब्लिक क्लास रेटऑफ़ पे {[डेटामेम्बर (ऑर्डर = 0, नाम = "चरण 8", एमिट डीफॉल्ट वैल्यू = झूठे)] सार्वजनिक स्ट्रिंग चरण 8 {प्राप्त; सेट; } [डेटामेम्बर (ऑर्डर = 1, नेम = "चरण 9", एमिट डीफॉल्ट वैल्यू = गलत)] सार्वजनिक स्ट्रिंग चरण 9 {प्राप्त; सेट; } [डेटामेम्बर (ऑर्डर = 2, नेम = "स्टेप 10", एमिट डीफॉल्ट वैल्यू = फॉल्स)] सार्वजनिक स्ट्रिंग चरण 10 {प्राप्त; सेट; }}

मेरी टिप्पणियों पर विस्तार करने के लिए, DataMember है DataContractSerializer किसी विशेष सदस्य को क्रमबद्ध करने के लिए कैसे निर्देशित किया जाता है।

आदेश बताता है DataContractSerializer किस क्रम को क्रमबद्ध / deserialize सदस्य सं।

EmitDefaultValue बताता है कि DataContractSerialzier डिफ़ॉल्ट मानों का उत्सर्जन करना है या नहीं (संदर्भ प्रकारों के लिए शून्य, मान प्रकारों के लिए दिया गया मान) जब सीरियलिज़िंग हो यदि यह गलत पर सेट है, तो रिक्त परिणाम नहीं होगा - सदस्य को छोड़ दिया जाएगा। यह डिफ़ॉल्ट रूप से सच है।

कुछ उदाहरण यह स्पष्ट करने में मदद कर सकते हैं:

सबसे पहले, वर्ग। यदि आप डीबगर में क्लास को देखते हैं, तो संपत्तियों को एएससीआईआई वर्णमाला क्रम में सूचीबद्ध किया जा रहा है, जिसका मतलब है कि चरण 10 पहले सूचीबद्ध होगा यदि आप सीरियल किए गए एक्सएमएल को देखते हैं, तो आप ऐसा कुछ देख सकते हैं:

  & lt; column8 & gt; एबीसीडी & lt; / column8 & gt; & LT; column9 & gt; defg & lt; / column9 & gt; & LT; column10 & gt; hijk & lt; / column10 & gt;  

कॉलम में से एक, कॉलम 9 कहें, तो एक रिक्त स्ट्रिंग थी, आप इसे (जैसा कि EmitDefaultValue से सेट किया गया था) जब इसे सीरियल किया गया था: < / P>

  & lt; कॉलम 8 & gt; एबीसीडी & lt; / column8 & gt; & LT; column10 & gt; ZZZZ & lt; / column10 & gt;  

EmitDefaultValue एक नामकरण परिप्रेक्ष्य से थोड़ा भ्रमित हो सकता है और इसमें IsRequired के साथ कुछ बहुत ही मजेदार बातचीत है


No comments:

Post a Comment