2014-02-11 7 views
0

Я создаю свое первое приложение WP8, и у меня возникли сомнения.IsolatedStorage best practice

Мне нужно сохранить в IsolStorage некоторые данные, полученные путем сериализации трех разных объектов.

Мой код для загрузки этих данных заключается в следующем:

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

Посмотрите на Generics. Ваш метод сериализации будет выглядеть следующим образом:

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

Метод Invoke:

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

Ты спасатель жизни человека, она работала отлично Большое спасибо! – user2878912

+0

Рад, что я мог помочь :) –