Dalam proyek ASP.NET Core 3.0 Web API, bagaimana Anda menentukannya opsi serialisasi System.Text.Json untuk membuat serial / deserialize properti Pascal Case ke Camel Case dan sebaliknya secara otomatis?
Diberikan model dengan properti Pascal Case seperti:
public class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
Dan kode untuk menggunakan System.Text.Json untuk deserialize string JSON ke tipe Person
kelas:
var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Deserialize<Person>(json);
Tidak berhasil deserialize kecuali JsonPropertyName digunakan dengan masing-masing properti seperti:
public class Person
{
[JsonPropertyName("firstname")
public string Firstname { get; set; }
[JsonPropertyName("lastname")
public string Lastname { get; set; }
}
Saya mencoba yang berikut startup.cs
, tetapi tidak membantu dalam hal masih membutuhkan JsonPropertyName
:
services.AddMvc().AddJsonOptions(options =>
{
options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});
// also the following given it's a Web API project
services.AddControllers().AddJsonOptions(options => {
options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});
Bagaimana Anda bisa mengatur Camel Case serialize / deserialize di ASP.NET Core 3.0 menggunakan namespace System.Text.Json yang baru?
Terima kasih!
sumber
Dalam
startup.cs
:Ini berarti Anda tidak perlu mengimpor newtonsoft.json.
Satu-satunya pilihan lain
options.JsonSerializerOptions.PropertyNamingPolicy
adalahJsonNamingPolicy.CamelCase
. Tampaknya tidak adaJsonNamingPolicy
opsi kebijakan penamaan lainnya, seperti snake_case atau PascalCase.sumber
Anda bisa menggunakannya
PropertyNameCaseInsensitive
. Anda harus meneruskannya sebagai parameter ke deserializer.yang (dari dokumen ):
Jadi, itu tidak menentukan camelCase atau PascalCase tetapi akan menggunakan perbandingan case-insensitive. Tidak yakin apakah ini memenuhi persyaratan Anda.
Catatan: Saya tidak dapat mengatur lebar aplikasi ini di aplikasi konsol. Seperti disebutkan dalam jawaban Kahbazi
services.AddMvc().AddJsonOptions
dan hanyaservices.AddControllers().AddJsonOptions
akan mengonfigurasi Json untuk MVC dan pengontrol WebApi (yaitu tidak akan mengonfigurasi aplikasi pengaturan Json secara luas di aplikasi konsol, misalnya). Di bawah ini hanya akan mengkonfigurasi System.Text.Json untuk Json melewati titik akhir controller:sumber
Jika Anda ingin serialisasi CamelCase gunakan kode ini di Startup.cs : (misalnya firstName)
Jika Anda ingin serialisasi PascalCase gunakan kode ini di Startup.cs : (misalnya FirstName)
sumber
Anda masih dapat mengatur aplikasi secara luas dengan menginstal Paket Nugget Microsoft.AspNetCore.Mvc.NewtonsoftJson, yang memungkinkan Anda untuk menggunakan implementasi serializer Json sebelumnya:
Kredit untuk Poke, jawabannya ditemukan di sini: Di mana IMvcBuilder AddJsonOptions masuk. Net Core 3.0?
sumber