无法在组合的XNA-Silverlight WP7项目中反序列化XML内容

时间:2011-07-16 21:08:18

标签: xml silverlight windows-phone-7 xna

我正在开发一个组合的XNA-Silverlight项目,我正在尝试向其中添加XML内容。在此之前,我进行了以下设置:

  1. 内容项目
  2. XNA游戏库 - 引用内容项目
  3. Silverlight项目 - 引用XNA游戏库
  4. 我在内容项目中有图像,我可以从Silverlight代码中编译和加载它们。现在我正在尝试将XML内容添加到内容项目并将代码添加到描述它的游戏库中,但我必须做错了,因为我收到以下错误:反序列化中间XML时出错。找不到类型“CrystalLib.Map”

    在内容项目中,我有一个名为maps的文件夹,在其下面我有以下xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <XnaContent>
      <Asset Type="CrystalLib.Map">
        <TileSetFile>grassland</TileSetFile>
        <Dimensions>500 250</Dimensions>
        <Tiles>
          ... Lots of integers (500 x 250)
        </Tiles>
      </Asset>
    </XnaContent>
    

    然后我在xna游戏项目(Map.cs)中有以下课程:

    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Content;
    
    namespace CrystalLib
    {
        /// Represents the data stored in a map file
        class Map
        {
            /// The name of tile set file
            private string tileSetFile;
    
            /// The name of tile set file
            public string TileSetFile
            {
                get { return tileSetFile; }
                set { tileSetFile = value; }
            }
    
            /// The dimensions of the map, in tiles.
            private Point dimensions;
    
            /// The dimensions of the map, in tiles.
            public Point Dimensions
            {
                get { return dimensions; }
                set { dimensions = value; }
            }
    
            /// Spatial array for the tiles for this map.
            private int[] tiles;
    
            /// Spatial array for the tiles for this map.
            public int[] Tiles
            {
                get { return tiles; }
                set { tiles = value; }
            }
    
            /// Retrieves the base layer value for the given map position.
            public int GetTile(int x, int y)
            {
                return tiles[y * dimensions.X + x];
            }
    
            /// Read a Map object from the content pipeline.
            public class MapReader : ContentTypeReader<Map>
            {
                protected override Map Read(ContentReader input, Map existingInstance)
                {
                    Map map = existingInstance;
                    if (map == null)
                    {
                        map = new Map();
                    }
    
                    map.TileSetFile = input.ReadString();
                    map.Dimensions = input.ReadObject<Point>();
                    map.Tiles = input.ReadObject<int[]>();
    
                    return map;
                }
            }
        }
    }
    

    我还需要什么?

2 个答案:

答案 0 :(得分:3)

当您的解决方案构建时,您的内容项目将首先构建(在包含Map类的xna游戏项目之前)。在构建内容时,它试图引用尚未构建的Map类,因此它不了解它。

地图类需要进入一个首先构建的单独项目(将xna游戏项目设置为依赖它)。将该项目添加到xna项目的引用中,并在必要时添加一些using语句。这就是应用程序中心教育部门的所有样本都是这样做的。

答案 1 :(得分:0)

这只是猜测,但你的Map类不需要公开吗?它在您的代码中是内部的。