Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memetakan Nama Medan JSON kepada Nama Harta .NET Berbeza Menggunakan JavaScriptSerializer?

Bagaimanakah Saya Boleh Memetakan Nama Medan JSON kepada Nama Harta .NET Berbeza Menggunakan JavaScriptSerializer?

Linda Hamilton
Linda Hamiltonasal
2025-01-10 08:16:40678semak imbas

How Can I Map JSON Field Names to Different .NET Property Names Using 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn