IsolatedStorage最佳实践

时间:2014-02-11 13:09:32

标签: windows-phone-8 windows-phone isolatedstorage

我正在构建我的第一个WP8应用程序,但我遇到了疑问。

我必须在IsolatedStorage中保存一些通过序列化三个不同对象获得的数据。

我加载此数据的代码是:

public static Statistics GetData()
    {
        Statistics data = new Statistics();
        try
        {
            using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("stats.xml", FileMode.OpenOrCreate))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(Statistics));
                    data = (Statistics)serializer.Deserialize(stream);
                }
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message + "\n" + e.InnerException);

        }

        return data;
    }

对于保存数据当然是这个

public static void SaveStats(Statistics stats)
        {
            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
            xmlWriterSettings.Indent = true;
            try
            {
                using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("stats.xml", FileMode.Create))
                    {
                        XmlSerializer serializer = new XmlSerializer(typeof(Statistics));
                        using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings))
                        {
                            serializer.Serialize(xmlWriter, stats);
                        }
                    }
                }
            }
            catch
            {
                MessageBox.Show("Salvataggio non riuscito");
            }
        }

这很好用,现在问题是我必须对其他两个类做同样的事情。

我是否必须再次编写完全相同的代码,只更改其他类的统计信息?

还是有一些更聪明的方法呢?

1 个答案:

答案 0 :(得分:1)

看看Generics。 您的序列化方法如下所示:

public static void SaveStats<T>(T obj) where T : class, new()
{
   ...
   XmlSerializer serializer = new XmlSerializer(typeof(T));
   ...
}

方法调用:

SaveStats<Statistics>(new Statistics());
SaveStats<OtherObject>(new OtherObject());