首頁 > 後端開發 > C++ > 如何在反序列化期間將不同名稱的 JSON 欄位對應到 C# 屬性?

如何在反序列化期間將不同名稱的 JSON 欄位對應到 C# 屬性?

Mary-Kate Olsen
發布: 2025-01-10 09:15:42
原創
601 人瀏覽過

How Can I Map Differently Named JSON Fields to C# Properties During Deserialization?

在 C# 中使用 JavaScriptSerializer.Deserialize 更改欄位名稱

C# 中的 JavaScriptSerializer 類別提供了一種方便的方法將 JSON 資料反序列化為 C# 物件。但是,預設情況下,它會直接將 JSON 欄位名稱對應到目標物件中的屬性名稱。當 JSON 欄位名稱與 C# 物件中的屬性名稱不一致時,這可能會導致反序列化失敗。

為了解決這個問題,有兩種常用的方法:

1. 使用 XmlElement 屬性

這種方法涉及使用 [XmlElement] 屬性手動設定欄位名稱對應。但是,正如原始帖子中提到的,此方法不適用於 JavaScriptSerializer。 應改用 [DataMember] 屬性來實作欄位名稱對應。

2. 使用 DataContractJsonSerializer

System.Runtime.Serialization 命名空間中提供的 DataContractJsonSerializer 類別為欄位名稱映射提供了更強大的解決方案。透過在 C# 物件的屬性上套用 [DataMember] 屬性,可以明確指定對應的 JSON 欄位名稱。

例如:

<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>
登入後複製

在此範例中,user_iddetail_level JSON 欄位名稱分別對應到 C# 物件中的 UserIdDetailLevel 屬性。

要使用 DataContractJsonSerializer 反序列化 JSON 資料:

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

...

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DataObject));
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(JsonData));
DataObject dataObject = serializer.ReadObject(ms) as DataObject;</code>
登入後複製

透過使用 DataContractJsonSerializer[DataMember] 屬性,可以有效地在 JSON 反序列化期間更改欄位名稱,確保 JSON 資料和 C# 物件之間正確對應。

以上是如何在反序列化期間將不同名稱的 JSON 欄位對應到 C# 屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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