ОНОВЛЕННЯ
Дякую за всі відповіді. Я над новим проектом, і, схоже, я нарешті дійшов до цього: Здається, винуватий був наступний код:
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();
Відповідь Майанка тут: Суб’єкти CamelCase JSON WebAPI (Вкладені об'єкти, дочірні об’єкти) здалися незадовільною, але працездатною відповіддю, поки я не зрозумів, що ці атрибути повинні бути додані до генерованого коду, як ми використовуємо linq2sql ...
Будь-який спосіб зробити це автоматично? Цей "бридкий" мучить мене вже давно.
JsonSerializer
. stackoverflow.com/questions/13274625/…