XML XNA对象反序列化

问题描述:

我在XNA 3中构建了一个游戏,并且我有以XML格式存储的级别。你会推荐什么解决方案将这些XML文件反序列化为级别对象?它需要能够在Xbox上工作。XML XNA对象反序列化

我不会推荐(德)序列化的实际水平,只是创建一个简单的容器类,其中包含的信息,从中构建一个级别的对象。

类似:

[Serializable()] 
public class LevelDefinition 
{ 
    public Vector3 PlayerStartPosition { get; set; } 
    public string LevelName { get; set; } 
    public List<Enemy> Enemies { get; set; } 

    ... etc 
} 

这将导致好的,干净的XML。

然后只使用XmlSerializer类来反序列化它。

+0

我正在那个。好主意! – RCIX 2009-06-11 23:47:56

我还没有尝试过360(我敢打赌它会工作),但XmlSerializer是一种非常简单的方法来将您的对象图保存/加载到XML中。基本上,你把你的XML文件,并运行xsd.exe反对它。这将生成一组C#类,您可以将您的XML反序列化。在你的代码中,你会写如下:

var serializer = new XmlSerializer(typeof(LevelType)); 
var level = (LevelType)serializer.Deserialize(streamToYourLevel); 

全部完成。

+0

这可以工作。当我有机会时,我会尝试。谢谢! – RCIX 2009-06-11 21:21:54

我不认为二进制序列化可用于Zune和XBox,但XmlSerializer适用于我。我没有序列化集合的问题,但是你必须使用XmlArrayItem属性来处理像ArrayList这样的非类型化集合,或者将附加类型信息传递给XmlSerializer构造函数,但是现在使用List更好更简单。字典不能被序列化,但你可以为它创建一个包装类。我通常为每个项目存储一个唯一的ID,然后将其用作字典中的键。 然后,我可以创建一个包装字典但暴露为项目集合的类。

public class MyItem { 
    public string ID { get; set; } 
      : 
} 

public class MyList : ICollection<MyItem> { 
    private Dictionary<string,MyItem> items; 
    public MyList() { 
     items = new Dictionary<string, MyItem>(); 
    } 
    void Add(MyItem item) { 
     items.Add(item.ID, item); 
    } 
     : 
}