0
    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 流 = File.OpenWrite(store.Path); 它说这是无法访问的。

我打算做的是将一些数据序列化到一个名为 ListCollection.json 的文件中,该文件是 emtpy ,该文件是项目文件。它可能是流,也可能是给我该错误的文件。不知道。

4

2 回答 2

0

我浏览了一些文档并遇到了这个: MSDN

应用程序的安装目录是只读位置。

我发现了一个链接,它使用了一些小技巧,或者看起来如此。我不确定如果部署了应用程序等这是否会起作用,但你可以尝试这个来编写文件。我不确定您是否需要流,但请随时发表评论:

    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;
        }
    }

这基本上是:

  1. 查找文件
  2. 删除文件
  3. 创建一个新文件
  4. 将您的 JSON 写入文件

我真的不是这方面的专家,即使对我来说,它似乎也很老套,但它显然可以完成工作。如果您可以避免写入安装目录,请使用 Frank J 提出的方法

于 2015-08-10T21:34:26.897 回答
0

我的猜测是您的项目文件位于应用程序的安装目录中,据我所知,您不能只写入该目录。

您必须在解决方案中放置一个部署操作,将所需的项目文件写入应用程序数据目录。在那里你应该可以写它。

于 2015-08-10T20:14:20.387 回答