【问题标题】:Which part of the ASP.NET WebAPI is responsible for resolving dynamic to JObjectASP.NET WebAPI 的哪一部分负责将动态解析为 JObject
【发布时间】:2015-01-20 13:02:03
【问题描述】:

我有一个具有以下方法的 ApiController:

public void Post(dynamic data)
{
    Type actualType = data.GetType(); // returns JObject
}

当我进行 AJAX 调用,将 JSON 数据发送到控制器时,“数据”参数的实际类型是 JObject(来自 Newtonsoft.Json 库)。 WebAPI 的哪个部分负责将此请求中的数据绑定到 JObject?是模型粘合剂吗?如果有,是哪一个? (有几个内置的,例如'MutableObjectModelBinder'、'TypeMatchModelBinder'等)

【问题讨论】:

    标签: c# asp.net asp.net-web-api json.net


    【解决方案1】:

    它是JsonMediaTypeFormatter。 ASP.NET Web API 默认 JSON 格式化程序是 JSON.NET。这就是您的动态对象被转换为 JObject 的原因。不过,您可以将默认格式化程序切换为 DataContractJsonSerializer。

    查看this article

    JSON 媒体类型格式化程序

    JSON 格式由 JsonMediaTypeFormatter 类提供。经过 默认情况下,JsonMediaTypeFormatter 使用 Json.NET 库来执行 序列化。 Json.NET 是第三方开源项目。

    如果您愿意,可以将 JsonMediaTypeFormatter 类配置为 使用 DataContractJsonSerializer 而不是 Json.NET。为此,请设置 将 UseDataContractJsonSerializer 属性设置为 true:

    var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.UseDataContractJsonSerializer = true;

    您可以从 WebApiConfig 更改 JSON 格式化程序配置

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多