我正在尝试使用包含多个项目的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之前,看起来很可怕!
答案 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();