将XML加载到列表中

时间:2014-02-23 22:27:23

标签: c# xml xna

我正在尝试使用包含多个项目的XML文件,并将它们加载到该类的List中。

我已经设法正确地将XML添加到我的项目中(将其添加到项目库中)并将其连接起来,以便我可以将XML中的单个项目加载到类的单个实例中(如下所示),并且能够成功访问它。

我的XML:

<?xml version="1.0" encoding="utf-8" ?>
    <XnaContent>
        <Asset Type="DataResources.Item">
            <Name>Watermelon</Name>
            <Value>200</Value>
        </Asset>
    </XnaContent>

我的项目类:

namespace DataResources
{
    public class Item
    {
        public string Name;
        public int Value;
    }
}

然后在我的主项目中,按如下方式加载:

Item myItem;
myItem = Content.Load<Item>("Item_Definitions");

问题是我希望在XML中有多个项目并将它们加载到Class的List中,所以我的XML现在看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<XnaContent>
  <Asset Type="DataResources.Item[]">
    <Item>
      <Name>Watermelon</Name>
      <Value>200</Value>
    </Item>
    <Item>
      <Name>Tomato Soup</Name>
      <Value>150</Value>
    </Item>
  </Asset>
</XnaContent>

我的'Item'类保持不变,但是我需要更改Content.Load才能处理项目列表:

List<Item> myItem;
myItem = Content.Load<Item>("Item_Definitions");

...但VS告诉我它不能隐式地将类型'DataResources.Item'转换为'System.Collections.Generic.List'。我已经尝试了myItem []和myItem.Add(),但我找不到正确的方法。我能找到的唯一解决方案是4.0之前,看起来很可怕!

1 个答案:

答案 0 :(得分:4)

您没有显示使用Content.Load方法执行的内容,但无论如何,您可以使用List将所有项目加入LINQ to XML,如下所示:

var xDoc = XDocument.Load("path");
List<Item> myItems = xDoc.Descendants("Item")
                         .Select(x => new Item 
                                    { 
                                       Name = (string)x.Element("Name"),
                                       Value = (int)x.Element("Value")
                                    }).ToList();