c# – 使用XmlArray反序列化xml文件?
发布时间:2020-12-15 03:42:25 所属栏目:百科 来源:网络整理
导读:我试图反序列化这个xml结构. ?xml version="1.0"?DietPlan Health FruitTest/Fruit FruitTest/Fruit VeggieTest/Veggie VeggieTest/Veggie /Health/DietPlan 我试过: [Serializable][XmlRoot(ElementName = "DietPlan")]public class TestSerialization{ [X
我试图反序列化这个xml结构.
<?xml version="1.0"?> <DietPlan> <Health> <Fruit>Test</Fruit> <Fruit>Test</Fruit> <Veggie>Test</Veggie> <Veggie>Test</Veggie> </Health> </DietPlan> 我试过: [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; } } 但是这会抛出一个异常“XML元素已经存在于当前作用域中,使用XML属性为该元素指定另一个XML名称或命名空间. 解决方法
您需要一个通用类型才能反序列化您的XML,并且您可以使用[XmlElement]命名空间定义根据元素名称实例化的类型,如下所示.
public class StackOverflow_15907357 { const string XML = @"<?xml version=""1.0""?> <DietPlan> <Health> <Fruit>Test</Fruit> <Fruit>Test</Fruit> <Veggie>Test</Veggie> <Veggie>Test</Veggie> </Health> </DietPlan>"; [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); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |