Json序列化器——如何创建流
本文关键字:创建 何创建 序列化 Json | 更新日期: 2023-09-27 18:07:15
public static async Task Store(ObservableCollection<Product> list)
{
Uri path = new Uri("ms-appx:///ListCollection.json");
var store = await StorageFile.GetFileFromApplicationUriAsync(path);
var stream = File.OpenWrite(store.Path);
var serialize = new DataContractJsonSerializer(typeof(ObservableCollection<Product>));
serialize.WriteObject(stream, list);
}
好的,这是我用来序列化集合的代码,工作得很好,没有问题,但是我想要的和尝试的都没有成功。我在我的项目中创建了一个JSON文件。我想将数据存储并流式传输到该文件。我尝试了一些方法,但没有成功,我如何打开一个流到一个文件,目前在我的项目?
编辑:注释了正在工作的代码,并编写了我打算做的事情。谢谢您的支持。
当我到达这一行
var stream = File.OpenWrite(store.Path);它说这是不可访问的
我打算做的是序列化一些数据到一个名为ListCollection的文件。Json是空的,这个文件是项目文件。可能是流或者文件给了我错误。不知道。
我的猜测是,您的项目文件位于应用程序的安装目录中,据我所知,您不能只是写入该目录。
您必须在解决方案中放置一个部署操作,该操作将所需的项目文件写入应用程序数据目录。这样你就可以写了
我浏览了一些文档,发现了这个:MSDN
应用程序的安装目录是一个只读位置
我发现了一个链接,它使用了一个小hack或看起来如此。我不确定这是否会工作,如果应用程序部署等。但是您可以尝试这样写文件。我不确定你是否需要一个流,但请随意评论:
private void Button_Click(object sender, RoutedEventArgs e)
{
ObservableCollection<string> list = new ObservableCollection<string>();
list.Add("Hallo");
list.Add("Welt");
Task t = Store(list);
}
public static async Task Store(ObservableCollection<string> list)
{
StorageFile file = await GetStorageFileFromApplicationUriAsync();
if (file == null)
{
file = await GetStorageFileFromFileAsync();
}
if (file != null)
{
await file.DeleteAsync();
await CreateFileInInstallationLocation(list);
}
}
private static async Task<StorageFile> GetStorageFileFromFileAsync()
{
StorageFile file = null;
if (file == null)
{
try
{
StorageFolder folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
file = await folder.GetFileAsync("ListCollection.json");
}
catch
{ }
}
return file;
}
private static async Task<StorageFile> GetStorageFileFromApplicationUriAsync()
{
StorageFile file = null;
try
{
Uri path = new Uri("ms-appx:///ListCollection.json");
file = await StorageFile.GetFileFromApplicationUriAsync(path);
}
catch
{ }
return file;
}
private static async Task CreateFileInInstallationLocation(ObservableCollection<string> list)
{
var pkg = Windows.ApplicationModel.Package.Current;
var installedLocationFolder = pkg.InstalledLocation;
try
{
var file = await installedLocationFolder.CreateFileAsync("ListCollection.json", Windows.Storage.CreationCollisionOption.GenerateUniqueName);
var filePath = file.Path;
DataContractJsonSerializer serialize = new DataContractJsonSerializer(typeof(ObservableCollection<String>));
using (Stream stream = await file.OpenStreamForWriteAsync())
{
serialize.WriteObject(stream, list);
stream.Flush();
}
}
catch (Exception ex)
{
var msg = ex.Message;
}
}
它的基本作用是:
- 查找文件
- 删除文件
- 新建文件 将JSON写入文件
我真的不是这方面的专家,甚至对我来说,它似乎很粗糙,但它显然能起到作用。如果您可以避免写入安装目录,请使用Frank J建议的方法