首頁 >後端開發 >C++ >如何使用 JavaScriptSerializer 或 DataContractJsonSerializer 將 JSON 欄位名稱對應到 .NET 物件屬性?

如何使用 JavaScriptSerializer 或 DataContractJsonSerializer 將 JSON 欄位名稱對應到 .NET 物件屬性?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-10 09:04:42648瀏覽

How to Map JSON Field Names to .NET Object Properties Using JavaScriptSerializer or DataContractJsonSerializer?

將 JSON 欄位名稱對應到 .NET 物件屬性

將 JSON 資料解析為 .NET 物件通常需要將 JSON 欄位名稱對應到對應的物件屬性。 當 JSON 欄位名稱與 .NET 屬性名稱不同時,這一點變得至關重要。雖然 JavaScriptSerializer.Deserialize 可能看起來很方便,但它並不總是可靠地處理名稱不符。 更強大的解決方案利用 DataContractJsonSerializer.

使用 DataContractJsonSerializer 進行可靠映射

DataContractJsonSerializer 透過 DataMember 屬性提供對欄位名稱對應的精確控制。 方法如下:

<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>

這段程式碼定義了一個DataObject類別。 DataMember 屬性將 JSON 欄位「user_id」和「detail_level」分別明確地對應到 .NET 屬性 UserIdDetailLevel

反序列化就很簡單了:

<code class="language-csharp">DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DataObject));
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(JsonData));
DataObject dataObject = serializer.ReadObject(ms) as DataObject;</code>

此程式碼片段將 JSON 資料 (JsonData) 反序列化為 DataObject 實例。

注意事項:

  • 雖然 DataContractJsonSerializerJavaScriptSerializer 相比提供了更出色的映射功能,但它可能稍微冗長一些。
  • 對於定義為枚舉的 DetailLevel 屬性,自訂 DataContractResolver 可以促進值對應。
  • DataContractJsonSerializer 也與 Silverlight 相容。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn