我一直在尝试为我的游戏中的元素实现一个 XML 系统..但我就是无法让它工作。 我正在使用 Monogame 及其附带的内容管道。 我制作了一个库存类和一个元素类。
以下是 Inventory 类的片段(将进行序列化):
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[]'.
我在这里阅读了其他一些我必须做引用的问题,但我就是找不到方法去做。在解决方案资源管理器中,我可以看到引用,但是当我单击添加时,我在项目中看不到任何东西,只有框架等标准的东西在那里。 哦,我在 Item 类中有一个没有参数的构造函数,所以应该没问题。
还有一件事。我试图将项目列表写入 XML 文件并且它运行良好..
提前致谢!
最佳答案
您需要添加对已编译的 dll 库的引用,这意味着您的类型需要在外部项目中定义。
创建另一个编译成 dll 的项目,在那里定义所有结构和类(至少是那些需要序列化的),并通过执行以下操作从内容管理器添加对 dll 的引用:
- 打开内容管道管理器。
- 选择根节点(“内容”)。
- 在“属性”选项卡上单击“引用”。
- 点击“添加”并选择您从其他项目生成的 dll 文件的路径。
我最近在 monogame 社区问了一个类似的问题,目前如果不使用另一个构建到 dll 中的项目,就不可能将类型从您自己的项目序列化到 xml 中/从 xml 中序列化。
关于c# - 使用内容管道的 Monogame XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36070484/