[英]Serialize class's ToString() value as XmlElement
在C#中,我正在嘗試將ClassA序列化為XML:
[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中為_value
提供公共財產? 謝謝!
更新:
通過在ClassB中實現IXmlSerializable接口( 此處顯示為 #12),生成以下XML:
<PropertyA>Value</PropertyA>
<ClassB>
<Value>Test</Value>
</ClassB>
這個解決方案幾乎可以接受,但擺脫標簽會很好。 有任何想法嗎?
正如您所指出的,唯一的方法是實現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
}
序列化以下實例......
ClassB classB = new ClassB() { Value = "this class's value" };
將返回以下xml:
<?xml version="1.0" encoding="utf-16"?><ClassB>this class's value</ClassB>
您可能需要進行一些驗證,以便編碼xml標簽等。
你已經回答了自己。 如果你派生自IXmlSerializable,你可以改變方法來完全(希望)做你想要的:
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteElementString("ClassB",_value);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.