我有一個非常基本的對象模型,它被System.Xml.XmlSerialization的東西序列化。我需要使用XmlAttributeOverrides功能爲一組子元素設置xml元素名稱。如何使用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,但我仍然似乎無法得到它的工作 \t \t \t var asset = new XmlArrayItemAttribute(「Asset」,typeof(AssetForDelivery)); \t \t \t var elementNames = new XmlAttributes(); \t \t \t elementNames.XmlArrayItems.Add(asset); \t \t \t xOver.Add(typeof(AssetForDelivery),elementNames); –
你爲什麼指定XmlOverrides?沒有它們就可以很簡單地做你想要的東西(在@ Derrik's anser的屏幕上) –