存储类实例 - Windows存储应用程序

时间:2013-08-10 23:02:16

标签: windows-store-apps file-storage

我对编写一个Windows商店应用程序有点新。所以问题是如何将类的实例保存到xml或二进制文件中。我尝试了一些代码,但它无法正常工作。

希望有人能引导我朝着正确的方向前进。

2 个答案:

答案 0 :(得分:0)

您可以使用Windows.Storage存储任何文件,其用法类似于IO操作。 MSDN

对于Windows Phone应用,

IsolatedStorage与此类似。

答案 1 :(得分:0)

您可以使用此代码序列化您的实例

    /// <summary>
    /// Deserializes the XML.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="xml">The XML.</param>
    /// <returns>The instance</returns>
    public static T DeserializeXml<T>(this String xml)
    {
        var bytes = Encoding.UTF8.GetBytes(xml);
        using (var stream = new MemoryStream(bytes))
        {
            var serializer = new DataContractSerializer(typeof(T));
            return (T)serializer.ReadObject(stream);
        }
    }

    /// <summary>
    /// Serializes the specified instance.
    /// </summary>
    /// <param name="instance">The instance.</param>
    /// <returns>Xml</returns>
    public static String SerializeXml(this Object instance)
    {
        using (var stream = new MemoryStream())
        {
            var serializer = new DataContractSerializer(instance.GetType());
            serializer.WriteObject(stream, instance);
            stream.Position = 0;
            using (var reader = new StreamReader(stream))
            {
                var result = "<?xml version='1.0' encoding='UTF-8' ?>";
                result += reader.ReadToEnd();
                return result;
            }
        }
    }

下一步是将序列化实例文本保存到文件中。

   var filename = "instance.txt";    
   var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists);
   var content = yourInstance.SerializeXml();
   await FileIO.WriteTextAsync(file, content, Windows.Storage.Streams.UnicodeEncoding.Utf8);

现在AppPackage-Local-Folder中应该有一个名为instance.txt的文件,其中包含序列化为xml的当前实例。