一尘不染

Web API 2:如何在对象及其子对象上返回带有camelCased属性名称的JSON

c#

更新

感谢所有的答案。我在一个新项目上,看来我终于明白了这一点:似乎实际上是以下代码在怪:

public static HttpResponseMessage GetHttpSuccessResponse(object response, HttpStatusCode code = HttpStatusCode.OK)
{
    return new HttpResponseMessage()
    {
        StatusCode = code,
        Content = response != null ? new JsonContent(response) : null
    };
}

别处…

public JsonContent(object obj)
{
    var encoded = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore } );
    _value = JObject.Parse(encoded);

    Headers.ContentType = new MediaTypeHeaderValue("application/json");
}

假设它是WebAPI,但我没有理会看起来无害的JsonContent。

无处不在 …我可以首先说一下wtf吗?也许应该是“他们为什么要这样做?”


原始问题如下

有人会以为这将是一个简单的配置设置,但是现在我已经太久了。

我看过各种解决方案和答案:

https://gist.github.com/rdingwall/2012642

似乎不适用于最新的WebAPI版本…

以下内容似乎不起作用-属性名称仍为PascalCased。

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;

json.UseDataContractJsonSerializer = true;
json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;

json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

Mayank的答案在这里:CamelCase JSON
WebAPI子对象(嵌套对象,子对象)
似乎不尽人意,但可行的答案,直到我意识到在使用linq2sql时必须将这些属性添加到生成的代码中…

有办法自动执行此操作吗?这种“讨厌”困扰了我很长时间。


阅读 224

收藏
2020-05-19

共1个答案

一尘不染

放在一起就可以得到…

protected void Application_Start()
{
    HttpConfiguration config = GlobalConfiguration.Configuration;
    config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    config.Formatters.JsonFormatter.UseDataContractJsonSerializer = false;
}
2020-05-19