將 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 屬性 UserId
和 DetailLevel
。
反序列化就很簡單了:
<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
實例。
注意事項:
DataContractJsonSerializer
與 JavaScriptSerializer
相比提供了更出色的映射功能,但它可能稍微冗長一些。 DetailLevel
屬性,自訂 DataContractResolver
可以促進值對應。 DataContractJsonSerializer
也與 Silverlight 相容。 以上是如何使用 JavaScriptSerializer 或 DataContractJsonSerializer 將 JSON 欄位名稱對應到 .NET 物件屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!