2009-06-11 117 views
1

我在XNA 3中構建了一個遊戲,並且我有以XML格式存儲的級別。你會推薦什麼解決方案將這些XML文件反序列化爲級別對象?它需要能夠在Xbox上工作。XML XNA對象反序列化

回答

1

我不會推薦(德)序列化的實際水平,只是創建一個簡單的容器類,其中包含的信息,從中構建一個級別的對象。

類似:

[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

2

我還沒有嘗試過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

1

我不認爲二進制序列化可用於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); 
    } 
     : 
}