XNA:将对象序列化为隔离存储

时间:2012-02-17 05:29:03

标签: windows-phone-7 xna xml-serialization

我有一个定义我的关卡的课程。我的Content Project中有一个XML文件,用于存储关卡的详细信息。

我可以使用LoadContent()从Content Project加载XML文件的详细信息。这将创建一个包含XML文件中所有详细信息的对象。

现在,我想将该游戏级别保存到独立存储中。

我见过的所有示例都表明我需要使用XMLWriter和XMLSerializer。这是为什么?我是否可以不使用XNA框架从内容管道加载的机制?

1 个答案:

答案 0 :(得分:4)

您不需要XMLWriter或XMLSerializer,但您需要一个序列化程序。 以下是我的Generic IsolatedStorage Utilty

的示例
public static void Save<T>(string fileName, T item)
{
    using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(fileName, FileMode.Create, storage))
        {
            DataContractSerializer serializer = new DataContractSerializer(typeof(T));
            serializer.WriteObject(fileStream, item);
        }
    }
}

public static T Load<T>(string fileName)
{
    using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(fileName, FileMode.Open, storage))
        {
            DataContractSerializer serializer = new DataContractSerializer(typeof(T));
            return (T)serializer.ReadObject(fileStream);
        }
    }
}

引用XML作为XNA内容时,它将通过ContentPipeline进行编译。因此,当您加载内容时,您可以通过ContentManager执行此操作。引用的XML文件应 NOT 在ContentPipeline中,因为它无法修改。您应该保留通过ContentPipline引用的静态文件,并将所有动态文件保存在IsolatedStorage中。一旦文件被编译,它们就无法更改,这就是为什么它不能保存到ContentPipeline。