【发布时间】:2020-03-18 17:32:50
【问题描述】:
我知道您可以使用 Newtonsoft 轻松做到这一点。然而,当我使用 .NET Core 3.0 时,我正在尝试使用新方法与 JSON 文件进行交互——即System.Text.Json——我拒绝相信我正在尝试做的事情有那么困难!
我的应用程序需要列出尚未添加到我的数据库中的用户。为了获取所有用户的完整列表,应用程序从 Web API 检索 JSON 字符串。我现在需要遍历每个用户并检查他们是否已经添加到我的应用程序中,然后再将新的 JSON 列表返回到我的视图,以便它可以向最终用户显示新的潜在用户。
由于我最终会在流程结束时返回另一个 JSON,因此我不想特别费心将其反序列化为模型。请注意,API 中的数据结构可能发生变化,但它总是有一个键,我可以从中与我的数据库记录进行比较。
我的代码目前如下所示:
using (WebClient wc = new WebClient())
{
var rawJsonDownload = wc.DownloadString("WEB API CALL");
var users = JsonSerializer.Deserialize<List<UserObject>>(rawJsonDownload);
foreach (var user in users.ToList())
{
//Check if User is new
if (CHECKS)
{
users.Remove(user);
}
}
return Json(users);
}
这似乎是一个很多的障碍,以实现对 Newtonsoft 来说相当微不足道的事情。
谁能告诉我一个更好的方法——最好是不需要UserObject?
【问题讨论】:
-
"...我相信 Newtonsoft 的一些事情是相当微不足道的" - 如果您将其作为学习练习,为什么不先创建 Newtonsoft 解决方案,然后再反向 -在此基础上设计您的 .Net 解决方案。据我所知,上面的代码对于这类事情来说是微不足道的——你对数据库的检查依赖于源中的一个值,无论你使用什么框架,删除一个节点都需要一个代码步骤使用。
-
这可能不是你的意思,但你可以使用 List 上的 RemoveAll 方法来减少你的代码。这会将您的解决方案减少到 3 行代码(反序列化、删除、序列化)。它不会比这更短。如果这不是您想要的,也许您可以使用 newtonsoft 提供一个示例实现,说明您尝试使用 system.text.json 完成的工作
-
由于您使用的是
System.Text.Json,您可能会考虑将WebClient换成HttpClient并进行异步反序列化。参见例如stu.dev/a-look-at-jsondocument
标签: c# json asp.net-core asp.net-core-3.0 system.text.json