2010-11-28 13 views
8

कैसे बनाएं, मैं देख रहा हूं कि किसी विशेषता के क्रमबद्धता को कस्टमाइज़ करना कौन है। मैंने सोचा कि यह आसान होगा, लेकिन मैं जो हासिल करना चाहता था उसे हासिल करने में सक्षम नहीं था।अपना कस्टम एक्सएमएलएट्रिब्यूट सीरियलाइजेशन

तो यहाँ

एक सरल उदाहरण है:

कक्षा परिभाषा:

Class MyClass 
{ 
    [XmlAttribute("myAttribute")] 
    public int[] MyProperty { get; set; } 
} 

xml परिणाम है कि मैं करना चाहते हैं:

<MyClass myAttribute="1 2 3... N" /> 

मैं चारों ओर केवल काम है कि करने के लिए किया गया है करने के लिए किया था एक [XmlIgnore] विशेषता डालें और कुछ कोड के साथ एक और संपत्ति बनाएं जो रूपांतरण किया।

तो, मेरा प्रश्न, क्या कोई नई संपत्ति बनाने से बेहतर तरीका है? शायद कुछ प्रकार का टाइप कनवर्टर है जिसे आप बना सकते हैं ताकि धारावाहिक इसका उपयोग कर सके?

इसके अलावा, मैंने टाइप विशेषता का उपयोग करने की कोशिश की है लेकिन सफलता के बिना। (हमेशा अपवाद प्राप्त हो रहा है)। लेकिन मैंने जो पढ़ा है, उससे पहले से ही परिभाषित डेटाटाइप है।

[XmlAttribute("myAttribute", typeof(MyConverter))] 
public int[] MyProperty { get; set; } 

एक और दिलचस्प तरीका है कि जैसा होगा:

[XmlAttribute("myAttribute")] 
[XmlConverter(typeof(MyConverter))] 
public int[] MyProperty { get; set; } 

धन्यवाद।


संपादित के बाद से है कि मैं के लिए देख रहा था कोई समाधान प्रस्तुत किया गया था, मैं अंत में "IXmlSerializable" समाधान के लिए चुनते करने का फैसला किया।

उत्तर

3

आप या तो:

  1. लागू IXmlSerializable और अपने प्रकार मैन्युअल
  2. उपयोग एक किराए प्रॉपर्टी के समस्त क्रमबद्धता/अक्रमांकन संभाल:

    [XmlIgnore] 
    public int[] MyProperty { get; set; } 
    
    
    [XmlAttribute("myAttribute")] 
    public string _MyProperty 
    { 
        get 
        { 
         return string.Join(" ", MyProperty.Select(x => x.ToString()).ToArray()); 
        } 
        set 
        { 
         MyProperty = value.Split(' ').Select(x => int.Parse(x)).ToArray(); 
        } 
    } 
    
+0

आपका सरोगेट संपत्ति वही है जो वह टालने की कोशिश कर रहा है। – SLaks

+0

आपको अपनी लाइन की शुरुआत में केवल रिक्त स्थान (जैसे 4) जोड़ने की आवश्यकता है। साथ ही, सुनिश्चित करें कि 2 कैरिज रिटर्न है। आपके जवाब के लिए, मैंने अपनी पोस्ट में कहा था कि मैं आपकी दूसरी संभावना से बचना चाहता हूं। सबसे पहले, मैं उस समाधान का सहारा लेना नहीं चाहता था, लेकिन शायद यह एकमात्र समाधान है। मुझे लगता है कि मेरी "सरणी कक्षा" बनाना बहुत बुरा नहीं है। – Sauleil

+0

@ स्लक्स: मेरे उपयोग उस तरह की सुविधा "बग" कहते हैं ;-) –

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