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
类来反序列化它。
答
我还没有尝试过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);
}
:
}
我正在那个。好主意! – RCIX 2009-06-11 23:47:56