从 XML 文件中读取字符串数组

Read array of strings from XML file

我关注class:

using System.Collections;
using System.Xml;
using System.Xml.Serialization;

public class Resource
{
[XmlAttribute("name")]
public string m_Name { get; set; }

public string[] ItemDrop;

}

还有这个 XML 文件:

<ResourceData>
<Resources>
    <Resource name="Iron Ore">
        <ItemDrop type="array">
            <value>Iron Piece</value>
        </ItemDrop>
    </Resource>
    <Resource name="Tree">
        <ItemDrop type="array">
            <value>Log</value>
            <value>Leaves</value>
            <value>Apple</value>
        </ItemDrop>
    </Resource>
</Resources>
</ResourceData>

我正在尝试反序列化文件并将这两个资源对象放入数组中。

它正确读取 m_Name 但 ItemDrop 数组中没有任何内容。

这是我加载数据的方式:

public static ResourceContainer Load(string path)
{
    var serializer = new XmlSerializer(typeof(ResourceContainer));
    using (var stream = new FileStream(path, FileMode.Open))
    {
        return serializer.Deserialize(stream) as ResourceContainer;
    }
}

您肯定需要 XmlArrayItem 属性:

public class Resource
{
    [XmlAttribute("name")]
    public string m_Name { get; set; }

    [XmlArrayItem("value")]
    public string[] ItemDrop;
}

试试 xml Linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            Resource resourse = new Resource();
            resourse.ReadXML(FILENAME);
        }
    }

    public class Resource
    {
        public static List<Resource> resources { get; set; }
        public string m_Name { get; set; }
        public string[] ItemDrop;

        public void ReadXML(string filename)
        {
            XDocument doc = XDocument.Load(filename);
            resources = doc.Descendants("Resource").Select(x => new Resource() {
                m_Name = (string)x.Attribute("name"),
                ItemDrop = x.Element("ItemDrop").Elements("value").Select(y => (string)y).ToArray()
            }).ToList();
        }

    }
}