簡體   English   中英

XML XNA對象反序列化

[英]XML XNA Object Deserialization

我在XNA 3中構建游戲,並且我以XML格式存儲了級別。 您建議將這些XML文件反序列化為級別對象的解決方案是什么? 它需要能夠在Xbox上工作。

我沒有在360上試過它(我打賭它會起作用),但是XmlSerializer是一種將對象圖保存/加載到XML中的一種非常簡單的方法。 基本上,您獲取xml文件並對其運行xsd.exe。 這將生成一組C#類,您可以將XML反序列化為。 在您的代碼中,您將編寫如下內容:

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

全部做完。

我不認為二進制序列化可用於Zune和XBox,但XmlSerializer對我來說很好。 序列化集合沒有問題,但是你必須對像ArrayList這樣的無類型集合使用XmlArrayItem屬性,或者將附加類型信息傳遞給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);
    }
        :
}

我不建議(de)序列化實際級別,只需創建一個包含從中構造級別對象的信息的簡單容器類。

就像是:

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

    ... etc
}

這將產生漂亮,干凈的XML。

然后只需使用XmlSerializer類對其進行反序列化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM