更新
感谢所有的答案。我在一个新项目上,看来我终于明白了这一点:似乎实际上是以下代码在怪:
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时必须将这些属性添加到生成的代码中…
有办法自动执行此操作吗?这种“讨厌”困扰了我很长时间。
放在一起就可以得到…
protected void Application_Start() { HttpConfiguration config = GlobalConfiguration.Configuration; config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); config.Formatters.JsonFormatter.UseDataContractJsonSerializer = false; }