如何在 Windows.Storage UWP 中使用 System.IO 序列化程序
How to use System.IO Serializers in UWP with Windows.Storage
我希望能够拥有 class 个对象 (List<Class>
) 的列表,并且能够轻松地写入和读取文本文件。
在我以前使用的控制台应用程序和Windows表单应用程序中:
List<Class> _myList = ...
WriteToFile<List<Class>>("C:\...\Test.txt", Class _myList)
public static void WriteToFile<T>(string filePath, T objectToWrite, bool append = false) where T : new()
{
TextWriter writer = null;
try
{
var serializer = new XmlSerializer(typeof(T));
writer = new StreamWriter(filePath, append);
serializer.Serialize(writer, objectToWrite);
}
finally
{
if (writer != null)
writer.Close();
}
}
然而,这在 UWP 应用程序 中不起作用,我必须使用 StorageFolder
和 StorageFile
,这对于将简单文本写入文件非常有效像这样:
StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFile file= await storageFolder.GetFileAsync("Test.txt");
await FileIO.WriteTextAsync(sampleFile, "Example Write Text");
但我希望能够使用 XmlSerializer
的更高级功能以及 StreamWriter
将 classes 的列表写入我的 UWP 应用程序中的文件。
我该怎么做?
您可以使用基于 Stream
的版本您使用的方法,例如 StreamWriter
有一个采用 System.IO.Stream
实例的构造函数。
要从 StorageFile
获取 System.IO.Stream
,您可以使用 OpenStreamForWriteAsync
and OpenStreamForReadAsync
扩展方法,它们位于 UWP 上的 System.IO
命名空间中:
//add to the top of the file
using System.IO;
//in your code
var stream = await myStorageFile.OpenStreamForWriteAsync();
//do something, e.g.
var streamWriter = new StreamWriter(stream);
我希望能够拥有 class 个对象 (List<Class>
) 的列表,并且能够轻松地写入和读取文本文件。
在我以前使用的控制台应用程序和Windows表单应用程序中:
List<Class> _myList = ...
WriteToFile<List<Class>>("C:\...\Test.txt", Class _myList)
public static void WriteToFile<T>(string filePath, T objectToWrite, bool append = false) where T : new()
{
TextWriter writer = null;
try
{
var serializer = new XmlSerializer(typeof(T));
writer = new StreamWriter(filePath, append);
serializer.Serialize(writer, objectToWrite);
}
finally
{
if (writer != null)
writer.Close();
}
}
然而,这在 UWP 应用程序 中不起作用,我必须使用 StorageFolder
和 StorageFile
,这对于将简单文本写入文件非常有效像这样:
StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFile file= await storageFolder.GetFileAsync("Test.txt");
await FileIO.WriteTextAsync(sampleFile, "Example Write Text");
但我希望能够使用 XmlSerializer
的更高级功能以及 StreamWriter
将 classes 的列表写入我的 UWP 应用程序中的文件。
我该怎么做?
您可以使用基于 Stream
的版本您使用的方法,例如 StreamWriter
有一个采用 System.IO.Stream
实例的构造函数。
要从 StorageFile
获取 System.IO.Stream
,您可以使用 OpenStreamForWriteAsync
and OpenStreamForReadAsync
扩展方法,它们位于 UWP 上的 System.IO
命名空间中:
//add to the top of the file
using System.IO;
//in your code
var stream = await myStorageFile.OpenStreamForWriteAsync();
//do something, e.g.
var streamWriter = new StreamWriter(stream);