首頁 > 後端開發 > C++ > 如何使用 JavaScriptSerializer 將 JSON 欄位名稱對應到不同的 C# 物件欄位名稱?

如何使用 JavaScriptSerializer 將 JSON 欄位名稱對應到不同的 C# 物件欄位名稱?

Linda Hamilton
發布: 2025-01-10 08:22:41
原創
242 人瀏覽過

How Can I Map JSON Field Names to Different C# Object Field Names Using JavaScriptSerializer?

使用 JavaScriptSerializer 進行 JSON 反序列化:欄位名稱映射挑戰

問題: 當 JSON 欄位名稱與 C# 屬性名稱不同時,使用 JavaScriptSerializer 直接將 JSON 資料反序列化為 C# 物件通常會帶來挑戰。 XmlElement 屬性無法解決此對應問題。

場景:

假設您有以下 JSON:

<code class="language-json">{"user_id":1234, "detail_level":"low"}</code>
登入後複製

對應的 C# 類別:

<code class="language-csharp">public class DataObject
{
    public int UserId { get; set; }
    public DetailLevel DetailLevel { get; set; }

    public enum DetailLevel
    {
        Low, /* ... other values */
    }
}</code>
登入後複製

JavaScriptSerializer 由於名稱不匹配,將無法正確對應欄位。

解:利用DataContractJsonSerializer

建議的方法是使用DataContractJsonSerializer代替。此序列化器允許透過 DataMember 屬性進行明確映射。

修改後的 C# 類別:

<code class="language-csharp">using System.Runtime.Serialization;

[DataContract]
public class DataObject
{
    [DataMember(Name = "user_id")]
    public int UserId { get; set; }

    [DataMember(Name = "detail_level")]
    public string DetailLevel { get; set; } 
}</code>
登入後複製

注意: DetailLevel 屬性現在是 string 以避免枚舉潛在的反序列化問題。

用法範例:

<code class="language-csharp">using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;

// ... within a test method ...

[TestMethod]
public void DataContractJsonSerializerTest()
{
    string jsonData = "{\"user_id\":1234, \"detail_level\":\"low\"}";
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DataObject));
    MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonData)); // UTF8 encoding is crucial
    DataObject dataObject = (DataObject)serializer.ReadObject(ms);

    Assert.IsNotNull(dataObject);
    Assert.AreEqual(1234, dataObject.UserId);
    Assert.AreEqual("low", dataObject.DetailLevel);
}</code>
登入後複製

此程式碼示範了 DataContractJsonSerializer 如何正確地將 JSON 欄位(「user_id」、「detail_level」)對應到對應的 C# 屬性(UserIdDetailLevel),儘管名稱有差異。 請記住在生產環境中反序列化期間處理潛在的異常。

以上是如何使用 JavaScriptSerializer 將 JSON 欄位名稱對應到不同的 C# 物件欄位名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板