JavaScriptSerializer を使用した JSON と .NET プロパティ名の矛盾の処理
.NET の JavaScriptSerializer
は、JSON フィールド名を .NET オブジェクトのプロパティにマッピングするときに調整が必要になる場合があります。 たとえば、「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 中国語 Web サイトの他の関連記事を参照してください。