【发布时间】:2014-07-24 10:38:54
【问题描述】:
我正在编写一个带有多个接收 JSON 数据的 PUT 方法的 Web API ApiController。 JSON 不是确定性的因此不能硬映射到自定义 C# 对象,但需要作为字典/序列(映射/列表)接收。
我已经尝试在控制器中为 PUT 方法的数据参数使用 IDictionary,并且这种方法很有效——数据似乎从 JSON 映射到字典。但是,有必要将字典声明为<String,Object>,并且没有明确的方法可以将 Object 值检索为其适当的类型。 (我在搜索中发现了一些建议的 kluges,但它们就是这样。)
还有一个 System.Json.JsonObject 类型,我终于设法通过 NuGet 加载它,但是当我使用它时,系统似乎不知道如何映射数据。
这通常是如何完成的?如何实现一个接收通用 JSON 的 ApiController 方法?
我可以看到三种基本方法:
- 以某种方式使 Dictionary/Sequence 与 Object 或类似对象一起工作。
- 让 System.Json.JsonObject 之类的东西工作起来,或许可以通过调整路由信息来实现。
- 以字节数组的形式接收 JSON,然后使用可用的 C# JSON 工具包之一显式解析。
(关于数据的动态性,JSON 对象可能缺少条目或无关条目,在某些情况下,特定条目可能表示为单个 JSON 值或 JSON 值数组。(其中“值”是 JSON 数组、对象、字符串、数字、布尔值或 null。)一般情况下,除了数组/非数组的歧义外,键和值类型之间的关系是已知的。)
(但我应该注意,这是一个大型项目,我将从其他作者的其他几个组件接收 JSON 字符串。能够检查接收到的类型并断言它与预期的一样非常有用,并且可能从安全的角度来看,甚至是必要的。)
(我应该补充一点,我是 C# 的相对新手——只使用了大约 6 个月。)
【问题讨论】:
-
问题需要更具体,“这通常是如何完成的?”风格问题通常会因为过于宽泛或基于观点而被关闭。
-
dynamic您收到的 JSON 格式如何?您是否提前知道它可能包含哪些字段? -
好吧,我打算为此提供大量赏金,但我想我不会那样做。
-
我已经很清楚了。可惜没人想知道我发现了什么。
-
@HotLicks,问题已重新打开,请随时添加您发现的内容。
标签: c# json asp.net-web-api asp.net-apicontroller