我一直在尝试为我的游戏中的项目实现XML系统..但我不能让它工作。 我正在使用Monogame及其附带的内容管道。 我制作了一个库存类和一个商品类。
以下是Inventory Class的片段(可以进行序列化):
public class Inventory
{
[XmlElement("Item")]
public static List<Item> itemList;
public Inventory (Vector2 _position)
{
itemList = new List<Item>();
}
public void LoadContent()
{
XmlSerializer deserializer = new XmlSerializer(typeof(Item));
TextReader reader = new StreamReader("Content/Items/itemEntities.xml");
object obj = deserializer.Deserialize(reader);
Inventory XmlData = (Inventory)obj;
reader.Close();
}
}
然后我创建了一个XML文件:
<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:ns="Microsoft.Xna.Framework">
<Asset Type="Game.Item[]">
<Item>
<itemType>Weapon</itemType>
<itemRarity>Rare</itemRarity>
<itemID>0001</itemID>
<positionID>
<X>1</X>
<Y>1</Y>
</positionID>
<name>The sword</name>
<description>Description</description>
</Item>
<Item>
<itemType>Equipment</itemType>
<itemRarity>Uncommon</itemRarity>
<itemID>0002</itemID>
<positionID>
<X>1</X>
<Y>1</Y>
</positionID>
<name>The Item</name>
<description>Description</description>
</Item>
<Item>
<itemType>Drone</itemType>
<itemRarity>Common</itemRarity>
<itemID>0003</itemID>
<positionID>
<X>1</X>
<Y>1</Y>
</positionID>
<name>The Drone</name>
<description>Description</description>
</Item>
</Asset>
</XnaContent>
现在的问题是我收到以下错误:
error: Importer 'XmlImporter' had unexpected failure!
Microsoft.Xna.Framework.Content.Pipeline.InvalidContentException: Could not resolve type 'Game.Item[]'.
我在这里读到了其他一些问题,我必须要参考,但我找不到办法来做到这一点。在解决方案资源管理器中,我可以看到引用,但是当我单击添加时,我在项目中看不到任何内容,只有Frameworks等标准内容存在。 哦,我有一个在Item类中没有参数的构造函数,所以应该没问题。
还有一件事。我试图将项目列表写入XML文件,并且它运行良好..
提前致谢!
答案 0 :(得分:0)
您需要添加对已编译的dll库的引用,这意味着您的类型需要在外部项目中定义。
创建另一个编译成dll的项目,在那里定义所有结构和类(至少需要序列化的那些),并通过执行以下操作从内容管理器添加对dll的引用:
我最近在monogame社区问了一个类似的问题,目前不可能将你自己项目中的类型序列化为xml,而不使用另一个构建成dll的项目。