c# - 使用XmlArray反序列化xml文件?

标签 c# .net xml serialization xml-serialization

我正在尝试反序列化此 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);
        }
    }
}

关于c# - 使用XmlArray反序列化xml文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15907357/

相关文章:

php - 如何提取和导入维基百科页面?

android - 为每条记录重复一个复杂的Layout

c# - CreatedAtAction 结果为 "No route matches the supplied values"

c# - 为什么要在 setter 之前定义 getter(编码约定)

c# - File.Copy 目标文件是目录,不是文件。

c# - 如何在 Windows 窗体中有 2 个连接字符串

c# - 赋值前的冗余比较 & "if"

c# - 如何将参数(id)传递给 WCF 中的消息检查器?

c# - Properties 如何可以有 Properties 和 Methods?

javascript - 使用 XMLHttpRequest.responseText 解析 XML 文件不会显示在 div 上