C# で JavaScriptSerializer.Deserialize
を使用してフィールド名を変更します
クラスは、JSON データを C# オブジェクトに逆シリアル化する便利な方法を提供します。ただし、デフォルトでは、JSON フィールド名がターゲット オブジェクトのプロパティ名に直接マッピングされます。これにより、JSON フィールド名が C# オブジェクトのプロパティ名と一致しない場合、逆シリアル化が失敗する可能性があります。 JavaScriptSerializer
1. 属性 XmlElement
を使用します。
属性を使用してフィールド名のマッピングを手動で設定します。ただし、元の投稿で述べたように、この方法は [XmlElement]
では機能しません。 フィールド名のマッピングは、代わりに JavaScriptSerializer
属性を使用して実装する必要があります。 [DataMember]
2. DataContractJsonSerializer
を使用します。
名前空間で提供される System.Runtime.Serialization
クラスは、フィールド名マッピングのためのより強力なソリューションを提供します。対応する JSON フィールド名は、C# オブジェクトのプロパティに 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>この例では、
と user_id
の JSON フィールド名は、C# オブジェクトの detail_level
プロパティと UserId
プロパティにそれぞれマップされます。 DetailLevel
を使用して JSON データを逆シリアル化するには: DataContractJsonSerializer
<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
属性を使用すると、JSON デシリアル化中にフィールド名を効果的に変更でき、JSON データと C# オブジェクト間の正しいマッピングが保証されます。 [DataMember]
以上が逆シリアル化中に、異なる名前の JSON フィールドを C# プロパティにマッピングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。