使用 JavaScriptSerializer 處理 JSON 和 .NET 屬性名稱之間的差異
將 JSON 欄位名稱對應到 .NET 物件屬性時,.NET 中的 JavaScriptSerializer
有時需要調整。 例如,像「user_id」這樣的 JSON 欄位可能需要對應到名為「UserId」的 .NET 屬性。 使用註解直接使用 JavaScriptSerializer
自訂欄位名稱是不可行的。
卓越的解決方案: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>
此程式碼可確保 JSON“user_id”欄位正確填入 .NET 物件中的 UserId
屬性。
測試 DataContractJsonSerializer
這是示範功能的範例單元測試:
<code class="language-csharp">using System.Runtime.Serialization.Json; using System.Text; using System.IO; using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public class DataContractJsonSerializerTest { [TestMethod] public void DataObjectSerializationTest() { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DataObject)); string jsonData = "{\"user_id\":1234,\"detail_level\":\"low\"}"; //Example JSON using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonData))) { DataObject dataObject = (DataObject)serializer.ReadObject(ms); Assert.IsNotNull(dataObject); Assert.AreEqual("low", dataObject.DetailLevel); Assert.AreEqual(1234, dataObject.UserId); } } }</code>
關於枚舉的重要說明:
處理伺服器 JSON 回應中的枚舉時,請在使用 DataContractJsonSerializer
反序列化之前將它們轉換為字串,以防止潛在的解析錯誤。 直接枚舉映射可能會出現問題。
以上是如何使用 JavaScriptSerializer 將 JSON 欄位名稱對應到不同的 .NET 屬性名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!