c# - 是否有可能在反序列化时以某种方式捕获与任何 POCO 属性不匹配的 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"}
我希望至少能够以某种方式获得有关存在与任何 POCO 属性都不匹配的新“RogueField”的信息,而不会破坏反序列化过程。
解决方案
额外的属性可以与您的对象一起保存在字典中。您可以操作此目录,并将在再次序列化您的对象时使用它。
来自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; }
}
推荐阅读
- postgresql - Heroku postgresql 数据库对于爱好包是免费的吗?如果是,可以存储多少数据?
- angular - 如何定义具有相同父类型的对象数组?
- jenkins - Jenkins Pipeline 在 NonCPS 方法中抛出 java.io.NotSerializableException: org.jenkinsci.plugins.workflow.job.WorkflowJob
- algorithm - KMP算法-时间复杂度
- javascript - 如何将 bool 值从 viewbag 传递到 jQuery 端?
- javascript - 两个选择选项 - 不需要验证和隐藏选项
- android - UTM 值始终未设置
- c# - OrderedDictionary 键数组是否有单行解决方案?
- git - 用于在没有合并请求的情况下通过所有测试的合并钩子
- java - 我收到以下代码的方法模棱两可的错误