Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memetakan Nama Medan JSON kepada Nama Harta .NET Berbeza Menggunakan JavaScriptSerializer?
Mengendalikan Percanggahan Antara JSON dan Nama Harta .NET dengan JavaScriptSerializer
JavaScriptSerializer
dalam .NET kadangkala memerlukan pelarasan apabila memetakan nama medan JSON kepada sifat objek .NET anda. Sebagai contoh, medan JSON seperti "user_id" mungkin perlu dipetakan ke sifat .NET bernama "UserId". Menyesuaikan nama medan secara langsung dengan JavaScriptSerializer
menggunakan anotasi tidak boleh dilaksanakan.
Penyelesaian Unggul: DataContractJsonSerializer
Untuk pemetaan nama medan yang fleksibel, DataContractJsonSerializer
menawarkan penyelesaian yang lebih mantap. Ia memanfaatkan atribut [DataMember]
untuk mentakrifkan pemetaan secara eksplisit:
<code class="language-csharp">[DataContract] public class DataObject { [DataMember(Name = "user_id")] public int UserId { get; set; } [DataMember(Name = "detail_level")] public string DetailLevel { get; set; } }</code>
Kod ini memastikan bahawa medan "user_id" JSON mengisi dengan betul sifat UserId
dalam objek .NET anda.
Menguji DataContractJsonSerializer
Berikut ialah ujian unit sampel yang menunjukkan kefungsian:
<code class="language-csharp">using System.Runtime.Serialization.Json; using System.Text; using System.IO; using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public class DataContractJsonSerializerTest { [TestMethod] public void DataObjectSerializationTest() { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DataObject)); string jsonData = "{\"user_id\":1234,\"detail_level\":\"low\"}"; //Example JSON using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonData))) { DataObject dataObject = (DataObject)serializer.ReadObject(ms); Assert.IsNotNull(dataObject); Assert.AreEqual("low", dataObject.DetailLevel); Assert.AreEqual(1234, dataObject.UserId); } } }</code>
Nota Penting tentang Enum:
Apabila berurusan dengan enum dalam respons JSON pelayan anda, tukarkannya kepada rentetan sebelum penyahsirilan dengan DataContractJsonSerializer
untuk mengelakkan kemungkinan ralat penghuraian. Pemetaan enum langsung boleh menjadi masalah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memetakan Nama Medan JSON kepada Nama Harta .NET Berbeza Menggunakan JavaScriptSerializer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!