c# - 使用内容管道的 Monogame XML 序列化

标签 c# xml monogame

我一直在尝试为我的游戏中的元素实现一个 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 的引用:

  1. 打开内容管道管理器。
  2. 选择根节点(“内容”)。
  3. 在“属性”选项卡上单击“引用”。
  4. 点击“添加”并选择您从其他项目生成的 dll 文件的路径。

我最近在 monogame 社区问了一个类似的问题,目前如果不使用另一个构建到 dll 中的项目,就不可能将类型从您自己的项目序列化到 xml 中/从 xml 中序列化。

关于c# - 使用内容管道的 Monogame XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36070484/

相关文章:

c# - XmlNode 值与 InnerText

c# - 将 C++ 代码转换为 C#

javascript - XSL + Java 脚本问题...无法从 xsl 文件调用 javascript 函数

c# - 如何在 Windows Phone 8 项目中使用 Monogame 浏览 xaml 页面?

c# - 使用 Monogame/XNA 将 Sprite 绘制到永久的 Texture2d

c# - 如何将此列值转换为整数?

c# - 使用领域事件模式

java - 无法将一个节点添加到另一个节点

Javascript - 解析 XML 文档以创建数组

c# - Monogame - 从曲线绘制自动生成的内容