在 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_id
和 detail_level
JSON 欄位名稱分別對應到 C# 物件中的 UserId
和 DetailLevel
屬性。
要使用 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中文網其他相關文章!