c# - 反序列化时是否有可能以某种方式捕获与任何 POCO 属性都不匹配的剩余 JSON 数据?

标签 c# json .net-core system.text.json

我从外部 API 获取一些 JSON 数据。我有数据反序列化的 POCO 对象。我使用 System.Text.Json.JsonSerializer 进行反序列化。最近,我意识到我收到的 JSON 的结构发生了变化,我只是在检查其他东西时偶然知道它。我的问题是,是否有可能以某种方式捕获未成功映射到任何 POCO 字段的 json 数据?
更准确地说,我的问题是一个示例 POCO:

public class Car
{
    public string Name { get; set; }
    public int Age { get; set; }
}
我之前收到的 JSON:
{"Name" : "PinkCar", "Age": 3}
我现在收到的 JSON:
{"Name" : "PinkCar", "Age": 3, "RogueField": "Loser"}
我希望至少能够以某种方式获得信息,即在不破坏反序列化过程的情况下,这个新的“RogueField”与任何 POCO 属性都不匹配。

最佳答案

额外的属性可以与您的对象一起保存在字典中。您可以操作此目录,并在再次序列化您的对象时使用它。
来自 https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to#handle-overflow-json : 创建类型为 Dictionary<string, object> 的属性, 这可以有任何名称(大多数情况下它被命名为 ExtensionData 但可以是任何名称),并用 [JsonExtensionData] 装饰它属性,例如:

public class Car
{
    public string Name { get; set; }
    public int Age { get; set; }
    [JsonExtensionData]
    public Dictionary<string, object> ExtensionData { get; set; }
}

关于c# - 反序列化时是否有可能以某种方式捕获与任何 POCO 属性都不匹配的剩余 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63227109/

相关文章:

c# - 如何在不按 Ctrl + C 的情况下将任何应用程序中的选定文本获取到 VB.NET

jquery - Fullcalendar jQuery - 可以从谷歌日历检索颜色吗?

json - Groovy - 在不知道每个键的情况下将 XML 转换为 JSON

c# - 将 Cake dotnet 核心测试输出导出到 TeamCity

c# - 如何使用 Nunit 断言每个集合项

c# - 你怎么知道你得到了一个真实的街道地址?

android - 安卓的json utf-8编码

c# - .net core 2 API 中是否真的需要 services.AddSingleton<IConfiguration>

c# - 我的应用程序设置应该在 .Net Core/EF Core 类库项目中的什么位置?

c# - 生成密码重置 token 时出现身份 IUserEmailStore 错误