2010-10-01 13 views
6

सी # में के रूप में, मैं एक्सएमएल में ClassA क्रमानुसार करने कोशिश कर रहा हूँ:को क्रमानुसार वर्ग के ToString() मान XmlElement

[Serializable] 
public ClassA 
{ 
    [XmlElement] 
    public string PropertyA { get; set; } // works fine 

    [XmlElement] 
    public ClassB MyClassB { get; set; } 
} 

[Serializable] 
public ClassB 
{ 
    private string _value; 

    public override string ToString() 
    { 
     return _value; 
    } 
} 

दुर्भाग्य से, धारावाहिक परिणाम है:

<PropertyA>Value</PropertyA> 
<ClassB /> 

इसके बजाय, मैं यह चाहता हूँ होने के लिए:

<PropertyA>Value</PropertyA> 
<ClassB>Test</ClassB> 

... _value == "Test" मानते हुए। मैं यह कैसे करु? के लिए कक्षा बी में सार्वजनिक संपत्ति प्रदान करने के लिए क्या मैं है? धन्यवाद!

अद्यतन:

ClassB में IXmlSerializable इंटरफेस (shown here # 12) लागू करने से, निम्न XML उत्पन्न होता है:

<PropertyA>Value</PropertyA> 
<ClassB> 
    <Value>Test</Value> 
</ClassB> 

यह समाधान लगभग स्वीकार्य है, लेकिन यह करने के लिए अच्छा होगा टैग से छुटकारा पाएं। कोई विचार?

उत्तर

3

आपने संकेत के रूप में, यह करने के लिए एक ही रास्ता IXmlSerializable इंटरफ़ेस को लागू करने के लिए है।

public class ClassB : IXmlSerializable 
{ 
    private string _value; 

    public string Value { 
     get { return _value; } 
     set { _value = value; } 
    } 

    public override string ToString() 
    { 
     return _value; 
    } 

    #region IXmlSerializable Members 

    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     return null; 
    } 

    public void ReadXml(System.Xml.XmlReader reader) 
    { 
     _value = reader.ReadString(); 
    } 

    public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     writer.WriteString(_value); 
    } 

    #endregion 
} 

Serializing निम्नलिखित उदाहरण ...

ClassB classB = new ClassB() { Value = "this class's value" }; 

निम्नलिखित एक्सएमएल वापस आ जाएगी:

<?xml version="1.0" encoding="utf-16"?><ClassB>this class's value</ClassB> 

आप कुछ सत्यापन करने के लिए इतना है कि आप एक्सएमएल टैग आदि

सांकेतिक शब्दों में बदलना चाहते हो सकता है
+1

आह, आपने मुझे समस्या दिखा दी है! मैं 'WriteStleString (" Value ", _value)' WriteString (_value) 'के बजाय 'का उपयोग कर रहा था। अब मेरा एक्सएमएल जिस तरह से मैं चाहता हूं उसे दिखता है: ' टेस्ट' – Pakman

3

आपने स्वयं का जवाब दिया है। अगर आप IXmlSerializable से निकाले जाते हैं, आप विधि बदल सकते हैं वास्तव में (उम्मीद) करने के लिए आप क्या चाहते हैं:

public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     writer.WriteElementString("ClassB",_value); 
    } 
+0

वह कोड उत्पन्न करता है: ' टेस्ट ' जब मैं वास्तव में चाहते हैं: ' टेस्ट ' – Pakman

+1

हां, तो आप WriteElementString :-) के बजाय WriteString उपयोग कर सकते हैं। * संपादित करें * - बस किसी और ने कहा :-( – itsho

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