10

मुझे DataContractSerializer के साथ प्राइमेटिव्स की सूची का उपयोग करते समय कस्टम तत्व नाम सेट करने के बारे में जाने का सबसे अच्छा तरीका है। मान लीजिए कि मेरे पास निम्न श्रेणी है जिसमें स्ट्रिंग्स की सूची डेटामेम्बर के रूप में है।प्राइमेटिव्स की सूची पर DataContractSerializer का उपयोग कर कस्टम एलिमेंट नाम

[DataContract] 
public class ClassName 
{ 
    [DataMember] 
    public List<String> FieldName { get; set; } 
} 

डिफ़ॉल्ट रूप से, यह निम्न के serializes:

<ClassName xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <FieldName xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
    <a:string>Value 1</a:string> 
    <a:string>Value 2</a:string> 
    <a:string>Value 3</a:string> 
    </FieldName> 
</ClassName> 

मैं XSLT के माध्यम से बदलने के लिए तो आदर्श मैं और अधिक उपयोगी कुछ में टैग का नाम बदल जाएगा XML के रूप में संभव के रूप में सरल बनाने के लिए चाहते हैं, मूल्य की तरह

एक संभावित समाधान में एक वर्ग बनाना शामिल है जो संग्रह को बढ़ाता है और CollectionDataMember पैरामीटर के लिए आइटम नाम सेट करता है, जिसे मुझे here मिला। मैं सोच रहा था कि क्या इस अतिरिक्त वर्ग या रैपर वर्ग के अन्य रूप की आवश्यकता के बिना एक ही लक्ष्य को पूरा करने का कोई तरीका था। XML serializer इसे पूरा करने के लिए XMLArray और XMLArrayItem पैरामीटर का उपयोग करता है लेकिन DataContractSerializer में समान कार्यक्षमता नहीं दिखती है।

किसी भी सुझाव या विचार के लिए धन्यवाद!

+0

एक अन्य विकल्प हो सकता है कि आप एक वर्ग बनाएं जिसका नाम "मान: स्ट्रिंग" जो System.String से विरासत हैं और उसका उपयोग DataMember में ... – Nabheet

+1

@NabheetSandhu 'System.String' बंद है। आप इससे प्राप्त नहीं कर सकते हैं। –

उत्तर

0

आपके विकल्प सीमित हैं। DataContractSerializer सुंदर एक्सएमएल का उत्पादन करने के लिए डिज़ाइन नहीं किया गया है। इसका उपयोग डब्ल्यूसीएफ द्वारा किया जाता है जो प्रकृति में मानव आंखों के अनुकूल नहीं है। तो सबसे अधिक आप स्ट्रिंग प्रॉपर्टी के साथ कस्टम प्रकार को परिभाषित करके नेमस्पेस उपयोग और नाम तत्वों को कम कर सकते हैं।

7

तारों की सूची का प्रतिनिधित्व करने के लिए डेटा अनुबंध परिभाषित करें और इसे अपने फील्ड नाम संपत्ति के प्रकार के रूप में उपयोग करें। फिर आप XML को कस्टमाइज़ करने के लिए CollectionDataContract विशेषता का उपयोग कर सकते हैं।

[CollectionDataContract(ItemName="Value")] 
public class MyList : List<string> {} 

[DataMember] 
public MyList FieldName { get; set; } 
+0

+1 - मुझे नहीं पता था कि यह कैसे करें। हालांकि, मुझे हाल ही में ऐसा करने की आवश्यकता है और एक्सएसडी से डेटाकंट्रक्ट में svcutil का उपयोग करके चला गया। यह बहुत ज्यादा है जो svcutil उत्पादन किया। – Nabheet

संबंधित मुद्दे