使用Content管道进行Monogame XML序列化

时间:2016-03-17 19:56:21

标签: c# xml monogame

我一直在尝试为我的游戏中的项目实现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文件,并且它运行良好..

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

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

  1. 开放内容管道经理。
  2. 选择根节点(&#34;内容&#34;)。
  3. 在属性标签上,点击&#34;参考&#34;。
  4. 点击&#39;添加&#39;并选择从其他项目生成的dll文件的路径。
  5. 我最近在monogame社区问了一个类似的问题,目前不可能将你自己项目中的类型序列化为xml,而不使用另一个构建成dll的项目。