ホームページ >バックエンド開発 >C++ >JSON.Net で「JsonProperty」属性のシリアル化をオーバーライドするにはどうすればよいですか?

JSON.Net で「JsonProperty」属性のシリアル化をオーバーライドするにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-07 15:57:44231ブラウズ

How to Override `JsonProperty` Attribute Serialization in JSON.Net?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。