C# 在UWP中将对象列表保存为JSON

C# 在UWP中将对象列表保存为JSON,c#,json,C#,Json,有人能告诉我如何在UWP中将对象数组序列化为json保存吗?我试过这种方法,但效果不好。文件长度后缺少文本。我使用的是Newtonsoft.Json 代码- private void btn_saveModel_Click(object sender, RoutedEventArgs e) { SaveModel(); } StorageFile file; private async Task openSaveFile() {

有人能告诉我如何在UWP中将对象数组序列化为json保存吗?我试过这种方法,但效果不好。文件长度后缺少文本。我使用的是Newtonsoft.Json

代码-

private void btn_saveModel_Click(object sender, RoutedEventArgs e)
    {

        SaveModel();

    }

    StorageFile file;

    private async Task openSaveFile()
    {
        var savePicker = new Windows.Storage.Pickers.FileSavePicker();
        savePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
        // Dropdown of file types the user can save the file as
        savePicker.FileTypeChoices.Add("JSON", new List<string>() { ".json" });
        savePicker.FileTypeChoices.Add("Plain Text", new List<string>() { ".txt" });
        // Default file name if the user does not type one in or select a file to replace
        savePicker.SuggestedFileName = "New Data";

        StorageFile file = await savePicker.PickSaveFileAsync();

        this.file = file;
    }

    private void SaveModel()
    {
        var task = openSaveFile();
        Task.WhenAll(task);
        if (file != null)
        {
            var handle = file.CreateSafeFileHandle(options: FileOptions.RandomAccess);
            var stream = new FileStream(handle, FileAccess.ReadWrite);
            var writer = new StreamWriter(stream);

            JsonSerializer serializer = new JsonSerializer();
            serializer.Serialize(writer, LoadedIntents);

        }
    }
]

保存后,即使没有改变,我得到这个

[ { “标签”:“问候语”, “模式”:[ “问候”, “嗨”, “嘿”, “有人在吗?”, “你好”, “干草” ], “回应”:[ “你好”, “嗨”, “你好” ] }, { “标签”:“再见”, “模式”:[ “再见”, “回头见”, “再见” ], “回应”:[ “回头见”, “祝你有愉快的一天”, “再见!再来” ] }, { “标签”:“谢谢”, “模式”:[ “谢谢”, “谢谢你”, “这很有帮助”, “谢谢你的帮助” ], “回应”:[ “很乐意帮忙!”, “随时!”, “我的荣幸”, “不客气!” ] }, { “标签”:“关于”, “模式”:[ “你是谁?”, “你是干什么的?”, “你是谁?” ], “回应”:[ “I.m.Osumen,你的虚拟朋友”, “我是奥斯曼,一个拥有人工智能的朋友” ] }, { “标签”:“名称”, “模式”:[ “你叫什么名字”, “我该怎么称呼你”, “你叫什么名字?” ], “回应”:[ “你可以叫我男人。”, “我是男人!”, “叫我男人就行了” ] }, { “标签”:“帮助”, “模式”:[ “你能帮我吗?”, “请帮帮我”, “你能帮忙吗?”, “你能为我做些什么?”, “我需要支持”, “我需要帮助”, “请支持我” ], “回应”:[ “告诉我怎样才能帮助你”,“把你的问题告诉我”

我做错了什么?

当您使用时,您使用的是一种异步方法,它试图立即完成
任务,如果没有,它应该继续执行代码,以便在后台工作时处理其他事情

但是,当您使用诸如:
wait Task.WhenAll(Task);
之类的关键字时,会发生一些不同的情况

wait关键字告诉编译器“您应该立即尝试完成此任务,如果它不能及时完成,请继续工作,但我会耐心等待您完成它。”

无需等待
任务。当所有
如果
打开保存文件
未完成并立即返回时,
保存模型
将继续执行其代码,而不是耐心等待。这就是为什么有时你会从
保存模型中得到半生不熟的结果,因为你需要恢复因为你不等待结果,所以在它完成之前就结束了


您可能打算使用的是非异步版本的
任务。WhenAll
,它强制等待任务完成,没有结果就无法继续。

您忘记等待
任务。WhenAll(任务)
。您也没有刷新StreamWriter。这不是一个真正的UWP问题;问题完全在与UWP无关的代码中。谢谢您…我对此还是新手…非常感谢您..在我添加Wait并使方法异步后,它起了作用。刷新stream writer后,长度问题也得到了纠正。
[
   {"tag": "greeting",
    "patterns": ["Hi", "Hey", "Is anyone there?", "Hello", "Hay"],
    "responces": ["Hello", "Hi", "Hi there"]
   },
   {"tag": "goodbye",
    "patterns": ["Bye", "See you later", "Goodbye"],
    "responces": ["See you later", "Have a nice day", "Bye! Come back again"]
   },
   {"tag": "thanks",
    "patterns": ["Thanks", "Thank you", "That's helpful", "Thanks for the help"],
    "responces": ["Happy to help!", "Any time!", "My pleasure", "You're most welcome!"]
   },
   {"tag": "about",
    "patterns": ["Who are you?", "What are you?", "Who you are?" ],
    "responces": ["I.m Osumen, your virtual friend", "I'm Osumen, a Friend who has an Artificial Intelligence"]
   },
   {"tag": "name",
   "patterns": ["what is your name", "what should I call you", "whats your name?"],
   "responces": ["You can call me Osumen.", "I'm Osumen!", "Just call me as Osumen"]
   },
   {"tag": "help",
   "patterns": ["Could you help me?", "give me a hand please", "Can you help?", "What can you do for me?", "I need a support", "I need a help", "support me please"],
   "responces": ["Tell me how can assist you", "Tell me your problem to assist you", "Yes Sure, How can I support you"]
   },
   {"tag": "complaint",
   "patterns": ["have a complaint", "I want to raise a complaint", "there is a complaint about a service"],
   "responces": ["Please provide us your complaint in order to assist you", "Please mention your complaint, we will reach you and sorry for any inconvenience caused"]
   }