JSON.Net の JsonProperty プロパティのシリアル化動作をオーバーライドします
ASP.Net MVC で Json.Net を使用して JSON をシリアル化する場合、[JsonProperty]
属性を使用してプロパティ名をカスタマイズできます。ただし、場合によっては、このプロパティを無視して、シリアル化に元のプロパティ名を使用したい場合があります。
この目的のために、カスタム コントラクト パーサーを使用できます。コントラクト パーサーは、JSON.Net がオブジェクトを JSON にシリアル化する方法を決定します。 [JsonProperty]
属性を無視するコントラクト パーサーを作成する方法は次のとおりです:
<code class="language-csharp">class LongNameContractResolver : DefaultContractResolver { protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { // 基类创建具有简短名称的属性 IList<JsonProperty> list = base.CreateProperties(type, memberSerialization); // 使用原始名称覆盖属性名称 foreach (JsonProperty prop in list) { prop.PropertyName = prop.UnderlyingName; } return list; } }</code>
コントラクト リゾルバーを使用するには、それをインスタンス化して JsonSerializerSettings
に渡します:
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Formatting = Formatting.Indented; settings.ContractResolver = new LongNameContractResolver();</code>
最後に、これらの設定を JsonConvert.SerializeObject
に渡してオブジェクトをシリアル化します。
<code class="language-csharp">string json = JsonConvert.SerializeObject(obj, settings);</code>
このカスタム コントラクト パーサーは、[JsonProperty]
属性で短い名前が指定されている場合でも、JsonProperty
属性を事実上無視し、元の名前を使用して属性をシリアル化します。
以上がJSON.Net で「JsonProperty」属性のシリアル化をオーバーライドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。