使用XmlArray反序列化xml文件?

我试图反序列化这个xml结构。

   Test Test Test Test   

我试过了:

 [Serializable] [XmlRoot(ElementName = "DietPlan")] public class TestSerialization { [XmlArray("Health")] [XmlArrayItem("Fruit")] public string[] Fruits { get; set; } [XmlArray("Health")] [XmlArrayItem("Veggie")] public string[] Veggie { get; set; } } 

但是这引发了一个exception“XML元素已经存在于当前范围内。使用XML属性为元素指定另一个XML名称或命名空间。” 谢谢你。

您需要一个通用类型才能反序列化XML,并且您可以使用[XmlElement]命名空间定义要根据元素名称实例化的类型,如下所示。

 public class StackOverflow_15907357 { const string XML = @"   Test Test Test Test  "; [XmlRoot(ElementName = "DietPlan")] public class TestSerialization { [XmlArray("Health")] [XmlArrayItem("Fruit", Type = typeof(Fruit))] [XmlArrayItem("Veggie", Type = typeof(Veggie))] public Food[] Foods { get; set; } } [XmlInclude(typeof(Fruit))] [XmlInclude(typeof(Veggie))] public class Food { [XmlText] public string Text { get; set; } } public class Fruit : Food { } public class Veggie : Food { } public static void Test() { MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(XML)); XmlSerializer xs = new XmlSerializer(typeof(TestSerialization)); TestSerialization obj = (TestSerialization)xs.Deserialize(ms); foreach (var food in obj.Foods) { Console.WriteLine("{0}: {1}", food.GetType().Name, food.Text); } } }