2014-04-22 115 views
0

我是C#和Windows Phone开发人员的新手,我需要为学校项目开发应用程序。
我有一个简单的课程,我希望在下次开始申请时保存它以便稍后访问。
什么是最好的(和最简单的)方法来做到这一点?使用文件,数据库或其他应用程序内存?最简单的写/读类的方法

这里是我的类:

public class Place 
{ 
    private string name; 
    private string description; 
    private int distance; 
    private bool enabled; 
    private GeoCoordinate coordinates; 
} 

我需要存储类的多个实例。

回答

2

没有“最好”的方法来做到这一点;这取决于你将如何使用它。

一个简单的方法是使用序列化,XML,JSON,二进制或任何你想要的。我个人喜欢JSON,因为它非常轻便,易于阅读。您可以使用JSON.NET库将对象序列化为JSON。

举例来说,如果你想序列的Place集合到一个文件中,你可以做这样的事情:

static async Task SavePlacesAsync(ICollection<Place> places) 
{ 
    var serializer = new JsonSerializer(); 
    var folder = ApplicationData.Current.LocalFolder; 
    var file = await folder.CreateFileAsync("places.json", CreationCollisionOption.ReplaceExisting); 
    using (var stream = await file.OpenStreamForWriteAsync()) 
    using (var writer = new StreamWriter(stream)) 
    { 
     serializer.Serialize(writer, places); 
    } 
} 

,并读取它从文件回:

static async Task<ICollection<Place>> LoadPlacesAsync() 
{ 
    try 
    { 
     var serializer = new JsonSerializer(); 
     var folder = ApplicationData.Current.LocalFolder; 
     var file = await folder.GetFileAsync("places.json"); 
     using (var stream = await file.OpenStreamForReadAsync()) 
     using (var reader = new StreamReader(stream)) 
     using (var jReader = new JsonTextReader(reader)) 
     { 
      return serializer.Deserialize<ICollection<Place>>(jReader, places); 
     } 
    } 
    catch(FileNotFoundException) 
    { 
     return new List<Place>(); 
    } 
} 
+0

你不介意我问,为什么你不” t只是做一些像'string json = JsonConvert.Serialize(places); File.WriteAllText(“places.json”,places);'?这似乎是一个更简单的方法来进行序列化。 – mason

+0

@mason,在大多数情况下,你可以做到这一点,它会没事的。但是如果你想要序列化一个非常大的列表呢?你会得到一个巨大的字符串,将使用大量的内存...使用JsonSerializer,JSON直接写入文件;完整的JSON字符串永远不会在内存中。所以一般情况下,我喜欢这样做,即使通常没有必要。 –

+0

好的,有道理。但是如果我向某个不知道如何序列化和反序列化为JSON的人解释它,我可能会坚持最简单的例子,而不是更专业的例子。并非每个人都像你一样有经验! – mason

1

我认为使对象持久化的最简单方法是将它们存储在一个文件中。然而,这并不是由于IO操作,安全性低花费的时间的最好办法,等

这里有一个很好的例子:

How to quickly save/load class instance to file