Saya baru saja menukar proyek kami dari ASP .Net Core 1.0.0-rc2-final menjadi 1.0.0. Situs web dan klien kami telah berhenti berfungsi karena kapitalisasi properti JSON. Misalnya, baris JavaScript ini sekarang gagal
for (var i = 0; i < collection.Items.length; i++){
karena pengontrol sekarang memanggil array "items" dan bukan "Items". Saya tidak membuat perubahan apa pun selain menginstal paket yang diperbarui dan mengedit file project.json. Saya belum mengubah file model C # yang masih memanfaatkan propertinya.
Mengapa pengontrol ASP.Net Core mulai mengembalikan JSON dengan properti bertingkat rendah? Bagaimana saya kembali kepada mereka untuk menghormati kasus nama properti dari model?
c#
asp.net-core
asp.net-core-1.0
dumbledad
sumber
sumber
Jawaban:
MVC sekarang membuat serial JSON dengan nama kasus unta secara default
Gunakan kode ini untuk menghindari nama kasus unta secara default
services.AddMvc() .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
Sumber: https://github.com/aspnet/Announcements/issues/194
sumber
Json()
panggilan?Jika Anda menemukan ini dari Google dan mencari solusi untuk Core 3.
Core 3 menggunakan
System.Text.Json
, yang secara default tidak menyimpan case. Seperti yang disebutkan dengan masalah GitHub ini , mengaturPropertyNamingPolicy
ke nol akan memperbaiki masalah.public void ConfigureServices(IServiceCollection services) { ... services.AddControllers() .AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null);
dan jika Anda tidak ingin mengubah pengaturan global, untuk satu tindakan saja seperti ini:
return Json(obj, new JsonSerializerOptions { PropertyNamingPolicy = null });
sumber
Anda dapat mengubah perilaku seperti ini:
services .AddMvc() .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
Lihat pengumumannya di sini: https://github.com/aspnet/Announcements/issues/194
sumber
Bagi mereka yang bermigrasi ke Core 3.1 dan memiliki proyek Core MVC dapat menggunakan kode pengaturan berikut di Startup.cs:
public void ConfigureServices(IServiceCollection services) { ... services.AddControllersWithViews().AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null); ... }
sumber
Ini akan memperbaikinya di dotnet core 3 webapi, sehingga tidak mengubah nama properti Anda sama sekali, dan Anda kembali ke klien persis seperti yang Anda inginkan.
Di Startup.cs:
public void ConfigureServices(IServiceCollection services) { services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null); services.AddHttpClient(); }
sumber
Untuk beberapa orang yang menggunakan ASP.net WEB API (bukan ASP.NET Core).
Tambahkan baris ini di WebApiConfig Anda.
//Comment this jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); jsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
Menambahkan ini sebagai jawaban di sini karena ini juga muncul pertama kali di pencarian google untuk api web.
sumber
Untuk versi Core 2.x, menggunakan kode ini Anda dapat menghindari nama kasus unta secara default. Anda perlu menambahkan kode berikut di dalam metode ConfigureServices dari file Startup.cs.
services.AddMvc() .AddJsonOptions(o => { if (o.SerializerSettings.ContractResolver != null) { var castedResolver = o.SerializerSettings.ContractResolver as DefaultContractResolver; castedResolver.NamingStrategy = null; } });
sumber