MEMPERBARUI
Terima kasih atas semua jawabannya. Saya sedang dalam proyek baru dan sepertinya saya akhirnya sampai di dasar ini: Sepertinya kode berikut sebenarnya yang harus disalahkan:
public static HttpResponseMessage GetHttpSuccessResponse(object response, HttpStatusCode code = HttpStatusCode.OK)
{
return new HttpResponseMessage()
{
StatusCode = code,
Content = response != null ? new JsonContent(response) : null
};
}
di tempat lain...
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");
}
Saya telah mengabaikan JsonContent yang tampak tidak berbahaya dengan asumsi itu adalah WebAPI tetapi tidak.
Ini digunakan di mana-mana ... Bisakah saya menjadi yang pertama mengatakan, wtf? Atau mungkin itu seharusnya menjadi "Mengapa mereka melakukan ini?"
pertanyaan asli berikut
Orang akan mengira ini akan menjadi pengaturan konfigurasi sederhana, tetapi itu terlalu lama untuk saya sekarang.
Saya telah melihat berbagai solusi dan jawaban:
https://gist.github.com/rdingwall/2012642
tampaknya tidak berlaku untuk versi WebAPI terbaru ...
Berikut ini tampaknya tidak berhasil - nama properti masih PascalCased.
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.UseDataContractJsonSerializer = true;
json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
Jawaban Mayank di sini: Sub-Objek CamelCase JSON WebAPI (Objek bersarang, objek anak) tampak seperti jawaban yang tidak memuaskan tetapi bisa diterapkan sampai saya menyadari atribut ini harus ditambahkan ke kode yang dihasilkan karena kami menggunakan linq2sql ...
Adakah cara untuk melakukan ini secara otomatis? 'Jahat' ini telah mengganggu saya sejak lama.
JsonSerializer
. stackoverflow.com/questions/13274625/…Jawaban:
Menyatukan semuanya, Anda mendapatkan ...
sumber
json.UseDataContractJsonSerializer = true;
? Ini memberitahu WebAPI untuk tidak digunakanJson.Net
untuk serialisasi. > _ <Inilah yang berhasil untuk saya:
Lalu:
Kelas
CamelCasePropertyNamesContractResolver
berasal dariNewtonsoft.Json.dll
dalam Json.NET perpustakaan.sumber
Ternyata itu
adalah pelakunya, menyebabkan proses serialisasi mengabaikan pengaturan camelcase. Dan itu
adalah droid yang saya cari.
Juga
Sedang memasang kunci pas dan ternyata BUKAN droid yang saya cari.
sumber
Json(result)
, saya melihat semuanya di PascalCase, tetapi ketika saya kembali,Content(StatusCode, result)
itu berfungsi seperti yang diharapkan.Semua jawaban di atas tidak berhasil untuk saya dengan Owin Hosting dan Ninject. Inilah yang berhasil untuk saya:
Perbedaan utamanya adalah: HttpConfiguration () baru daripada GlobalConfiguration.Configuration.
sumber
Kode WebApiConfig:
Pastikan Metode Tindakan API Anda mengembalikan data dengan cara berikut dan Anda telah menginstal versi terbaru Json.Net/Newtonsoft.Json Terinstal:
sumber
Di Startup Owin Anda, tambahkan baris ini ...
sumber
Berikut ini salah satu yang tidak jelas, ketika atribut rute tidak cocok dengan url GET tetapi url GET cocok dengan nama metode, perintah kasus unta jsonserializer akan diabaikan misalnya
sumber
Saya telah menyelesaikannya dengan cara berikut.
sumber
Saya menggunakan WebApi dengan Breeze dan saya mengalami masalah yang sama saat mencoba menjalankan tindakan non-angin ke pengontrol angin. Saya mencoba menggunakan Apprach Request.GetConfiguration tetapi hasilnya sama. Jadi, ketika saya mengakses objek yang dikembalikan oleh Request.GetConfiguration, saya menyadari bahwa serializer yang digunakan oleh permintaan adalah salah satu yang digunakan oleh server angin untuk membuatnya ajaib. Bagaimanapun, saya menyelesaikan masalah saya dengan membuat HttpConfiguration yang berbeda:
dan meneruskannya sebagai parameter di Request.CreateResponse sebagai berikut:
sumber