没有“最好”的方法来做到这一点;这取决于你将如何使用它。
一个简单的方法是使用序列化,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>();
}
}
你不介意我问,为什么你不” t只是做一些像'string json = JsonConvert.Serialize(places); File.WriteAllText(“places.json”,places);'?这似乎是一个更简单的方法来进行序列化。 – mason
@mason,在大多数情况下,你可以做到这一点,它会没事的。但是如果你想要序列化一个非常大的列表呢?你会得到一个巨大的字符串,将使用大量的内存...使用JsonSerializer,JSON直接写入文件;完整的JSON字符串永远不会在内存中。所以一般情况下,我喜欢这样做,即使通常没有必要。 –
好的,有道理。但是如果我向某个不知道如何序列化和反序列化为JSON的人解释它,我可能会坚持最简单的例子,而不是更专业的例子。并非每个人都像你一样有经验! – mason