我有这样的课
[DataContract(Namespace = "")]
public class Foo
{
[DataMember(Order = 0)]
Bar bar;
}
[DataContract(Namespace = "")]
public class Bar
{
Baz baz;
[DataMember(Order = 0)]
string TheBaz
{
get { baz.ToString(); }
set { SomeOtherCode(value); }
}
}我希望这样生成XML
<Foo>
<Bar>String from baz.ToString()</Bar>
</Foo>但我得到的更像是:
<Foo>
<Bar><TheBaz>String from baz.ToString()</TheBaz></Bar>
</Foo>可以修复这个问题吗?这篇文章说DataContractSerializer的缺点之一是:
让我怀疑的是,这不是一个可以解决的问题。
我知道这可以用IXmlSerializable和ReadXml/WriteXml来完成,因为我应该删除这样做的代码。
发布于 2009-03-25 20:19:21
在IXmlSerializable类上实现Bar,然后在序列化时让它输出<Bar>String from baz.ToString()</Bar>。
您可以保留Foo类的原样,其余部分由DataContractSerializer来处理。
发布于 2009-03-26 08:03:54
我意识到我的第一个回答完全是假的--但你可以用财产欺骗:
[DataContract(Namespace = "")]
public class Foo
{
[DataMember(Order = 0, Name="Bar")]
private string BazString {
get {
return bar == null ? null : bar.TheBaz.ToString();
}
set {
if(value == null) {
bar = null;
}
else {
if(bar == null) bar = new Bar();
bar.TheBaz = value;
}
}
}
Bar bar;
}https://stackoverflow.com/questions/683263
复制相似问题