Apakah ada cara sederhana menggunakan JSON di .NET untuk memastikan bahwa kunci dikirim dengan huruf kecil?
Saat ini saya menggunakan perpustakaan Json.NET newtonsoft dan hanya menggunakan
string loginRequest = JsonConvert.SerializeObject(auth);
Dalam hal auth
ini hanya objek berikut
public class Authority
{
public string Username { get; set; }
public string ApiToken { get; set; }
}
Ini menghasilkan
{"Username":"Mark","ApiToken":"xyzABC1234"}
Apakah ada cara untuk memastikan bahwa kunci username
dan apitoken
muncul sebagai huruf kecil?
Saya tidak ingin hanya menjalankannya String.ToLower()
saja karena nilai untuk username
dan apitoken
kasus campuran.
Saya menyadari bahwa saya dapat melakukan ini secara terprogram dan membuat string JSON secara manual, tetapi saya membutuhkan ini untuk kira-kira 20 atau lebih string data JSON dan saya melihat apakah saya dapat menghemat waktu. Saya bertanya-tanya apakah sudah ada pustaka yang dibangun yang memungkinkan Anda menerapkan huruf kecil untuk pembuatan kunci.
Jawaban:
Anda dapat membuat pemecah kontrak kustom untuk ini. Penyelesai kontrak berikut akan mengonversi semua kunci menjadi huruf kecil:
Pemakaian:
Wil menghasilkan:
Jika Anda selalu ingin membuat serial menggunakan
LowercaseContractResolver
, pertimbangkan untuk menggabungkannya di kelas untuk menghindari pengulangan:Yang bisa digunakan seperti ini:
ASP.NET MVC4 / WebAPI
Jika Anda menggunakan ASP.NET MVC4 / WebAPI, Anda dapat menggunakan
CamelCasePropertyNamesContractResolver
pustaka dari Newtonsoft.Json yang disertakan secara default.sumber
CamelCasePropertyNamesContractResolver
. Sekarang saya menemukanSystem.Net.Http.Formatting.JsonContractResolver
adalah default di WebAPI dan kelas ini bersifat internal. Saya berakhir dengan menulis ulangJsonContractResolver
dengan kasus unta. Seseorang melaporkan ini sebagai publik aspnetwebstack.codeplex.com/workitem/228CamelCasePropertyNamesContratResolver
jangan mengubah properti menjadi huruf kecil, cukup karakter pertama.sumber
Di Json.NET 9.0.1 dan yang lebih baru, dimungkinkan untuk memastikan bahwa semua nama properti diubah menjadi huruf kecil dengan menggunakan kustom
NamingStrategy
. Kelas ini mengekstrak logika untuk pemetaan ulang algoritmik nama properti dari resolver kontrak ke objek ringan yang terpisah yang dapat disetelDefaultContractResolver.NamingStrategy
. Melakukan hal itu menghindari kebutuhan untuk membuat kebiasaanContractResolver
dan dengan demikian mungkin lebih mudah diintegrasikan ke dalam kerangka kerja yang sudah memiliki penyelesai kontrak sendiri.Definisikan
LowercaseNamingStrategy
sebagai berikut:Kemudian buat serial sebagai berikut:
Catatan -
Menggunakan
string.ToLowerInvariant()
memastikan bahwa kontrak yang sama dibuat di semua lokal.Untuk mengontrol apakah nama properti yang diganti, kunci kamus, dan nama data ekstensi menggunakan huruf kecil, Anda dapat menyetel
NamingStrategy.OverrideSpecifiedNames
,NamingStrategy.ProcessDictionaryKeys
atauNamingStrategy.ProcessExtensionDataNames
(Json.NET 10.0.1 dan yang lebih baru) ketrue
.Anda mungkin ingin meng-cache pemecah kontrak untuk kinerja terbaik .
Jika Anda tidak memiliki akses ke pengaturan serializer dalam kerangka kerja Anda, Anda dapat menerapkan a
NamingStrategy
langsung ke objek Anda sebagai berikut:Jangan ubah
NamingStrategy
dariCamelCasePropertyNamesContractResolver
. Penyelesai kontrak ini membagikan informasi jenis secara global di semua instansnya, sehingga mengubah satu instans dapat memiliki efek samping yang tidak terduga.sumber
Anda dapat menggunakan "JsonProperty":
Pemakaian:
sumber
Bagi saya, saya menggunakan kombinasi dari beberapa jawaban lain dan berakhir dengan ini
lebih dekat ke solusi untuk apa yang saya cari karena saya tidak ingin membuatnya sendiri
sumber