我将xml发送到另一个程序,该程序期望布尔标志为“是”或“否”,而不是“真”或“假”。
我有一个类的定义如下:
[XmlRoot()]
public class Foo {
public bool Bar { get; set; }
}序列化它时,我的输出如下所示:
<Foo><Bar>true</Bar></Foo>但我希望是这样:
<Foo><Bar>yes</Bar></Foo>我可以在序列化时这样做吗?我宁愿不用这样做:
[XmlRoot()]
public class Foo {
[XmlIgnore()]
public bool Bar { get; set; }
[XmlElement("Bar")]
public string BarXml { get { return (Bar) ? "yes" : "no"; } }
}请注意,我还希望能够再次反序列化这些数据。
发布于 2009-03-09 05:37:28
非常简单。使用代理项属性。在实际属性上应用XmlIgnore。代理项是一个字符串,必须使用接受元素名称覆盖的XmlElement属性。指定重写中实际属性的名称。代理项属性根据实际属性值以不同的方式序列化。您还必须为代理程序提供一个setter,而setter应该为它序列化的任何值适当地设置实际属性。换句话说,它需要双管齐下。
狙击:
public class SomeType
{
[XmlElement]
public int IntValue;
[XmlIgnore]
public bool Value;
[XmlElement("Value")]
public string Value_Surrogate {
get { return (Value)? "Yes, definitely!":"Absolutely NOT!"; }
set { Value= (value=="Yes, definitely!"); }
}
}点击这里获取完全可编译源示例。
https://stackoverflow.com/questions/625091
复制相似问题