XmlElement的C#数组添加了另一层嵌套

时间:2019-07-09 09:28:08

标签: c# .net xml serialization xml-serialization

我有以下情况:

  • 4个返回XML的方法
  • 必须使用这四个XML片段在一个数组上创建一个大XML

一个小例子如下:

<garage>
    <owner>daniel</owner>
    <cars>
        <XmlElement>
            <plate>ABC123</plate>
        </XmlElement>
        <XmlElement>
            <plate>DSC563</plate>
        </XmlElement>
        <XmlElement>
            <plate>AIO789</plate>
        </XmlElement>
        <XmlElement>
            <plate>IUE692</plate>
        </XmlElement>
    </cars>
</garage>

我有一个plate数组,想将它注入到car的{​​{1}}上

问题是,我似乎找不到消除包裹对象的System.Xml.XmlElement[]元素的方法,我只是希望它像:

XmlElement

我尝试使用Xml属性,但无法完全得到我想要的。

有人可以帮我吗?

这是工作代码:

<garage>
    <owner>
        <name>daniel</name>
    </owner>
    <cars>
        <plate>ABC123</plate>
        <plate>DSC563</plate>
        <plate>AIO789</plate>
        <plate>IUE692</plate>
    </cars>
</garage>

2 个答案:

答案 0 :(得分:1)

如果使用XElement而不是XmlElement,则可以使用XmlAnyElement属性获得所需的输出:

public class Garage
{
    public string owner { get; set; }
    [XmlAnyElement]
    public XElement[] cars { get; set; }
}

您的方法StringToXmlElement如下:

public XElement StringToXmlElement(string xml)
{
    return XElement.Parse(xml);
}

答案 1 :(得分:0)

一种选择是使用XmlSerializer并具有代表您的xml的类

class Program
{
    static void Main(string[] args)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Garage));
        var garage = new Garage
        {
            Owner = new Owner { Name = "Daniel" },
            Cars = new List<string>
            {
                "ABC123",
                "DSC563",
                "AIO789",
                "IUE692",
            }
        };

        serializer.Serialize(File.Create("file.xml"), garage);
    }
}

[Serializable]
public class Garage
{
    [XmlElement("Owner")]
    public Owner Owner;

    [XmlArrayItem("Plate")]
    public List<string> Cars;
}

[Serializable]
public class Owner
{
    [XmlElement("Name")]
    public string Name;
}