【问题标题】:Read array of strings from XML file从 XML 文件中读取字符串数组
【发布时间】:2016-08-08 18:47:20
【问题描述】:

我有以下课程:

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>

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

它正确读取了 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;
    }
}

【问题讨论】:

  • 用 XmlArray 和 XmlArrayItem 标记它以指定内部结构。
  • 工作正常,谢谢先生! ;)

标签: c# xml xmlserializer


【解决方案1】:

你肯定需要XmlArrayItem属性:

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

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

【讨论】:

    【解决方案2】:

    试试 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();
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      相关资源
      最近更新 更多