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,我不确定从哪里开始.我想让代码尽可能简短.有任何想法吗?(不,我的项目实际上并不涉及猫和狗).
一个简单的工作示例(为了简洁而跳过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)