如何在带有 Windows.Storage 的 UWP 中使用 System.IO 序列化程序
Posted
技术标签:
【中文标题】如何在带有 Windows.Storage 的 UWP 中使用 System.IO 序列化程序【英文标题】:How to use System.IO Serializers in UWP with Windows.Storage 【发布时间】:2020-04-23 04:30:53 【问题描述】:我希望能够拥有一个类对象列表 (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
的更高级功能将类列表写入我的UWP 应用程序中的文件。
我该怎么做?
【问题讨论】:
【参考方案1】:您可以使用基于Stream
的版本的方法,例如StreamWriter
有一个构造函数,它采用System.IO.Stream
实例。
要从StorageFile
获取System.IO.Stream
,您可以使用OpenStreamForWriteAsync
和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);
【讨论】:
以上是关于如何在带有 Windows.Storage 的 UWP 中使用 System.IO 序列化程序的主要内容,如果未能解决你的问题,请参考以下文章
C++ 中未找到 Windows::Storage::ApplicationData::Current
Unity3D Hololens 访问 Windows.Storage.KnownFolders