Web API 2: come restituire JSON con i nomi di proprietà camelCased, sugli oggetti e sui relativi oggetti secondari

AGGIORNARE

Grazie per tutte le risposte. Sono su un nuovo progetto e sembra che finalmente sono arrivato alla fine di questo: sembra che il seguente codice fosse di fatto da incolpare:

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

altrove…

 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"); } 

Avevo trascurato l’innocuo aspetto di JsonContent assumendo che fosse WebAPI ma no.

Questo è usato ovunque … Posso essere il primo a dire, wtf? O forse dovrebbe essere “Perché stanno facendo questo?”


la domanda originale segue

Si sarebbe pensato che sarebbe stata una semplice configurazione, ma mi è sfuggito da troppo tempo ormai.

Ho esaminato varie soluzioni e risposte:

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

non sembra applicarsi all’ultima versione WebAPI …

Quanto segue non sembra funzionare – i nomi delle proprietà sono ancora in PascalCased.

 var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.UseDataContractJsonSerializer = true; json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore; json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 

La risposta di Mayank qui: CamelCase JSON Gli oggetti secondari WebAPI (oggetti nidificati, oggetti figlio) sembravano una risposta insoddisfacente ma praticabile fino a quando non mi sono reso conto che questi attributi dovevano essere aggiunti al codice generato dato che stiamo usando linq2sql …

Un modo per farlo automaticamente? Questa “ctriggers” mi ha tormentato da molto tempo ormai.