CẬP NHẬT
Cảm ơn tất cả các câu trả lời. Tôi đang thực hiện một dự án mới và có vẻ như cuối cùng tôi đã hiểu được điều này: Có vẻ như đoạn mã sau trên thực tế đã bị đổ lỗi:
public static HttpResponseMessage GetHttpSuccessResponse(object response, HttpStatusCode code = HttpStatusCode.OK)
{
return new HttpResponseMessage()
{
StatusCode = code,
Content = response != null ? new JsonContent(response) : null
};
}
nơi khác ...
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");
}
Tôi đã bỏ qua JsonContent trông vô hại khi cho rằng đó là WebAPI nhưng không.
Cái này được sử dụng ở khắp mọi nơi ... Tôi có thể là người đầu tiên nói, wtf được không? Hoặc có lẽ đó phải là "Tại sao họ làm điều này?"
câu hỏi ban đầu theo sau
Người ta có thể nghĩ rằng đây sẽ là một cài đặt cấu hình đơn giản, nhưng nó đã bỏ qua tôi quá lâu rồi.
Tôi đã xem xét các giải pháp và câu trả lời khác nhau:
https://gist.github.com/rdingwall/2012642
dường như không áp dụng cho phiên bản WebAPI mới nhất ...
Cách sau dường như không hoạt động - tên thuộc tính vẫn là PascalCased.
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.UseDataContractJsonSerializer = true;
json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
Câu trả lời của Mayank ở đây: Đối tượng phụ CamelCase JSON WebAPI (Đối tượng lồng nhau, đối tượng con) có vẻ như là một câu trả lời không thỏa đáng nhưng khả thi cho đến khi tôi nhận ra rằng các thuộc tính này sẽ phải được thêm vào mã được tạo vì chúng tôi đang sử dụng linq2sql ...
Bất kỳ cách nào để làm điều này tự động? Sự 'khó chịu' này đã làm tôi khó chịu trong một thời gian dài.
JsonSerializer
. stackoverflow.com/questions/13274625/…