我正在编写一个带有几个接收 JSON 数据的 PUT 方法的 Web API ApiController。JSON 不是确定性的,因此不能硬映射到自定义 C# 对象,但需要作为字典/序列(映射/列表)接收。
我已经尝试在控制器中为 PUT 方法的数据参数使用 IDictionary,并且这种工作 - 数据似乎从 JSON 映射到字典。但是,有必要将字典声明为<String,Object>
,并且没有明确的方法可以将 Object 值检索为其适当的类型。(我在搜索中发现了一些建议的 kluges,但它们就是这样。)
还有一个 System.Json.JsonObject 类型,我终于设法通过 NuGet 加载它,但是当我使用它时,系统似乎不知道如何映射数据。
这通常是如何完成的?如何实现接收通用 JSON 的 ApiController 方法?
我可以看到三种基本方法:
- 不知何故使字典/序列与对象或类似的东西一起工作。
- 使 System.Json.JsonObject 之类的东西工作,也许是通过调整路由信息。
- 将 JSON 作为字节数组接收,然后使用可用的 C# JSON 工具包之一显式解析。
(关于数据的动态程度,JSON 对象可能缺少条目或无关条目,在某些情况下,特定条目可能表示为单个 JSON 值或 JSON 值数组。(其中“值”是 JSON 数组、对象、字符串、数字、布尔值或空值。)一般来说,除了数组/非数组的歧义之外,键和值类型之间的关系是已知的。)
(但我应该注意,这是一个大型项目,我将从其他作者的几个其他组件接收 JSON 字符串。能够检查接收到的类型并断言它是预期的将非常有用,甚至可能是必要的从安全的角度来看。)
(我应该补充一点,我是 C# 的相对新手——只使用了大约 6 个月。)