C# 在UWP中将对象列表保存为JSON
有人能告诉我如何在UWP中将对象数组序列化为json保存吗?我试过这种方法,但效果不好。文件长度后缺少文本。我使用的是Newtonsoft.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() {
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"]
}