【发布时间】:2017-10-20 17:45:23
【问题描述】:
我从外部 api 获得一个大的嵌套 json 对象。我想确保所有字段都填充在该 json 对象中。有没有可用的库来做到这一点? Newtonsoft.Json 有 JToken 类,它检查 Json 的模式是否有效,但我没有找到任何方法来检查 json 对象内的所有字段是否都已填充。
场景:我正在构建一个 api,用于收集有关个人或实体的信息。有许多信息来源。我需要继续搜索数据,直到所需的对象已满。所以首先调用 api1,获取一些数据,检查对象是否已满。如果对象未满,则转到 api2 等等。所以调用在对象满后返回。 一个关键点是所需的对象架构不是静态的。
我可以将其反序列化为 POCO 并循环遍历每个嵌套对象,但我正在寻找更好的解决方案。
非常感谢任何建议。
【问题讨论】:
-
您可以使用来自Json.NET require all properties on deserialization 的
RequireObjectPropertiesContractResolver。从你的问题中不清楚你是否想要Required.AlwaysorRequired.AllowNull。 -
我需要
Required.Always。所以它在反序列化时检查?它也适用于儿童吗? -
在不反序列化 json 的情况下是否有同样的结果?
-
所以它在反序列化时进行检查? 是的。 它也适用于儿童吗? 是的。使用自定义合约解析器的优点是它适用于所有被反序列化的类型,无需手动向这些类型添加属性。 在不反序列化 json 的情况下是否可以实现相同的结果? Json.NET 通过查看被反序列化类型的协定来确定预期属性集。您还想如何指定一组必需的属性?还是您只是希望所有 JSON 属性都不为空?
-
是的,我希望对象内的所有 json 属性都不为空。我正在开发一个从其他 api 获取信息的 api。它一直在寻找下一个 api,直到它获得所需的所有信息。所以我需要每次检查对象是否已满并继续下一个 api,如果对象已满则返回。
标签: c# json json.net json-deserialization