Pak*_*man 6 c# xml-serialization
在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;
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,序列化的结果是:
<PropertyA>Value</PropertyA>
<ClassB />
Run Code Online (Sandbox Code Playgroud)
相反,我希望它是:
<PropertyA>Value</PropertyA>
<ClassB>Test</ClassB>
Run Code Online (Sandbox Code Playgroud)
......假设_value == "Test".我该怎么做呢?我必须在ClassB中提供公共财产_value吗?谢谢!
更新:
通过在ClassB中实现IXmlSerializable接口(此处显示为#12),生成以下XML:
<PropertyA>Value</PropertyA>
<ClassB>
<Value>Test</Value>
</ClassB>
Run Code Online (Sandbox Code Playgroud)
这个解决方案几乎可以接受,但摆脱标签会很好.有任何想法吗?
正如您所指出的,执行此操作的唯一方法是实现 IXmlSerialized 接口。
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
}
Run Code Online (Sandbox Code Playgroud)
正在序列化以下实例...
ClassB classB = new ClassB() { Value = "this class's value" };
Run Code Online (Sandbox Code Playgroud)
将返回以下 xml :
<?xml version="1.0" encoding="utf-16"?><ClassB>this class's value</ClassB>
Run Code Online (Sandbox Code Playgroud)
您可能想要进行一些验证,以便对 xml 标签等进行编码。
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |