UPDATE
Спасибо за все ответы. Я нахожусь в новом проекте, и похоже, что я, наконец, дошел до конца: похоже, что на самом деле виноват следующий код:
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");
}
Я забыл безобидный JsonContent, предполагая, что это WebAPI, но нет.
Это используется везде... Могу ли я просто сказать первым, 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...
Любой способ сделать это автоматически? Эта "противная" меня мучила уже давно.