本质上,我需要将C#对象序列化为xml文档,该文档具有完全不同的xml结构和不同的类/节点名称。 C#类的结构是:
public class Root
{
public item item {get; set}
}
public class item
{
public string name {get; set}
public color[] color
}
public class color
{
public string itemColor {get; set}
}
让我们说我们的项目是一辆车。这序列化为
<Root>
<item>
<name>car</name>
<color>
<itemColor>red</itemColor>
<itemColor>blue</itemColor>
<itemColor>gree</itemColor>
</Color>
</item>
</Root>
但我需要将其序列化为:
<Root>
<item>
<name>car</name>
<itemColor>red</itemColor>
</item>
<name>car</name>
<itemColor>blue</itemColor>
</item>
<item>
<name>car</name>
<itemColor>green</itemColor>
</item>
</Root>
我目前正在使用IXmlSerializable来尝试指定架构。这样做的最佳方式是什么?我应该转换为第二个自定义对象吗?
答案 0 :(得分:1)
试试这个:
public class Root
{
[XmlIgnore]
public item item { get; set; }
[EditorBrowsable(EditorBrowsableState.Never)]
[XmlAnyElement("item")]
public List<XElement> _item
{
get
{
return item.color.Select(i =>
new XElement("item",
new XElement("name", item.name),
new XElement("itemColor", i.itemColor)
)).ToList();
}
}
}
public class item
{
public string name { get; set; }
public color[] color;
}
public class color
{
public string itemColor { get; set; }
}
此外,最好使用nameof
而不是硬编码文字。
[XmlAnyElement(nameof(item))]
public List<XElement> _item
{
get
{
return item.color.Select(i =>
new XElement(nameof(item),
new XElement(nameof(item.name), item.name),
new XElement(nameof(i.itemColor), i.itemColor)
)).ToList();
}
}