AGGIORNARE
Grazie per tutte le risposte. Sono su un nuovo progetto e sembra che finalmente sia arrivato in fondo a questo: sembra che il seguente codice fosse in effetti la colpa:
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 JsonContent supponendo che fosse WebAPI ma no.
Questo è usato ovunque ... Posso essere il primo a dire, wtf? O forse dovrebbe essere "Perché lo fanno?"
segue la domanda originale
Si sarebbe pensato che questa fosse una semplice impostazione di configurazione, ma ormai mi è sfuggita troppo a lungo.
Ho esaminato varie soluzioni e risposte:
https://gist.github.com/rdingwall/2012642
non sembra applicarsi all'ultima versione di WebAPI ...
Quanto segue non sembra funzionare - i nomi delle proprietà sono ancora 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 WebAPI Sub-Objects (oggetti annidati, oggetti figlio) sembrava una risposta insoddisfacente ma praticabile fino a quando non ho capito che questi attributi avrebbero dovuto essere aggiunti al codice generato poiché stiamo usando linq2sql ...
Qualche modo per farlo automaticamente? Questo "cattivo" mi tormenta da molto tempo ormai.
JsonSerializer
. stackoverflow.com/questions/13274625/…