【发布时间】:2010-02-11 19:23:24
【问题描述】:
我有一个非常基本的对象模型,它正在由 System.Xml.XmlSerialization 东西序列化。我需要使用 XmlAttributeOverrides 功能为子元素集合设置 xml 元素名称。
public class Foo{
public List Bars {get; set; }
}
public class Bar {
public string Widget {get; set; }
}
使用标准的 xml 序列化程序,结果会是这样的
<Foo>
<Bars>
<Bar>...</Bar>
</Bars>
</Foo>
我需要使用 XmlOverrideAttributes 来说明这一点
<Foo>
<Bars>
<SomethingElse>...</SomethingElse>
</Bars>
</Foo>
但我似乎无法让它重命名集合中的子元素...我可以重命名集合本身...我可以重命名根...不确定我做错了什么。
这是我现在拥有的代码:
XmlAttributeOverrides xOver = new XmlAttributeOverrides();
var bars = new XmlElementAttribute("SomethingElse", typeof(Bar));
var elementNames = new XmlAttributes();
elementNames.XmlElements.Add(bars);
xOver.Add(typeof(List), "Bars", elementNames);
StringBuilder stringBuilder = new StringBuilder();
StringWriter writer = new StringWriter(stringBuilder);
XmlSerializer serializer = new XmlSerializer(typeof(Foo), xOver);
serializer.Serialize(writer, someFooInstance);
string xml = stringBuilder.ToString();
但这根本不会改变元素的名称......我做错了什么?
谢谢
【问题讨论】:
-
一位同事指出了 XmlArrayItemAttribute,但我似乎仍然无法让它工作 var asset = new XmlArrayItemAttribute("Asset", typeof(AssetForDelivery)); var elementNames = new XmlAttributes(); elementNames.XmlArrayItems.Add(asset); xOver.Add(typeof(AssetForDelivery), elementNames);
-
为什么要指定 XmlOverrides?没有它们,做你想做的事很简单(看看下面@Derrik 的分析器)
标签: c# xml-serialization overriding