我有这样的课程
[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>
可以解决这个问题吗? This artical说DataContractSerializer的一个缺点是:
- 在设置名称和顺序
之外无法控制对象的序列化方式 醇>
让我想知道这不是一个可以解决的问题。
我知道这可以通过IXmlSerializable
和ReadXml
/ WriteXml
来完成,因为我应该删除那样做的代码。
答案 0 :(得分:1)
在Bar
类上实施IXmlSerializable
,然后在序列化时输出<Bar>String from baz.ToString()</Bar>
。
您可以按原样保留Foo类,DataContractSerializer
将完成剩下的工作。
答案 1 :(得分:1)
我意识到我的第一个答案完全是假的 - 但你可以欺骗财产:
[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;
}