XML序列化查询

Dav*_*ale 2 .net c# xml serialization xml-serialization

我有以下需要反序列化/序列化的XML:

<instance>
<dog>
    <items>
        <item>
            <label>Spaniel</label>
        </item>
    </items>
</dog>
<cat>
    <items>
        <item>
            <label>Tabby</label>
        </item>
    </items>
</cat>
</instance>
Run Code Online (Sandbox Code Playgroud)

我无法改变XML结构.

我需要将它映射到以下类:

[Serializable, XmlRoot("instance")]
public class AnimalInstance
{
    public string Dog { get; set; }
    public string Cat { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果不手动解析XML,我不确定从哪里开始.我想让代码尽可能简短.有任何想法吗?(不,我的项目实际上并不涉及猫和狗).

Pao*_*sco 6

一个简单的工作示例(为了简洁而跳过cat),使用System.Xml.Serialization:

using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

[XmlRoot("instance")]
public class AnimalInstance {
    [XmlElement("dog")]
    public Dog Dog { get; set; }
}

public class Dog {
    [XmlArray("items")]
    [XmlArrayItem("item")]
    public List<Item> Items = new List<Item>();
}

public class Item {
    [XmlElement("label")]
    public string Label { get; set; }
}

class Program {
    static void Main(params string[] args) {
        string xml = @"<instance>
<dog>
    <items>
        <item>
            <label>Spaniel</label>
        </item>
    </items>
</dog>
</instance>";

        XmlSerializer xmlSerializer = new XmlSerializer(typeof(AnimalInstance));
        AnimalInstance instance = (AnimalInstance)xmlSerializer.Deserialize(new StringReader(xml));
    }
}
Run Code Online (Sandbox Code Playgroud)