【问题标题】:Monogame XML serialization with Content pipelineMonogame XML 序列化与内容管道
【发布时间】:2016-03-17 19:56:21
【问题描述】:

我一直在尝试为我的游戏中的项目实现一个 XML 系统。但我就是无法让它工作。 我正在使用 Monogame 和它附带的内容管道。 我已经创建了一个 Inventory 类和一个 Item 类。

这是来自 Inventory 类的 sn-ps(具有序列化):

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 文件,它运行良好..

提前致谢!

【问题讨论】:

  • 也许this tutorial 会有所帮助。抱歉,我现在没有时间写一个正确的答案。
  • @craftworkgames 我做了一些事情,但我不知道如何做一些事情。我应该在 writer 而不是 FileFileData 中拥有什么,如果我只想使用 XML 文件创建对象,是否需要处理?我对此有点陌生...
  • 我不明白你所说的“”还有一件事是什么意思。我试图将项目列表写入 XML 文件,它运行良好.."" - 什么工作正常?你能反序列化你的类型的单个实例吗?

标签: c# xml monogame


【解决方案1】:

您需要添加对已编译 dll 库的引用,这意味着您的类型需要在外部项目中定义。

创建另一个编译成 dll 的项目,在那里定义所有结构和类(至少是那些需要序列化的),并通过执行以下操作从内容管理器添加对 dll 的引用:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多