ホームページ > バックエンド開発 > C++ > Json.netを使用してプロパティをシリアル化せずにJSON内のプロパティを逆シリアル化する方法は?

Json.netを使用してプロパティをシリアル化せずにJSON内のプロパティを逆シリアル化する方法は?

Mary-Kate Olsen
リリース: 2025-01-10 20:13:42
オリジナル
468 人が閲覧しました

How to Deserialize a Property in JSON Without Serializing It Back Using Json.net?

Json.net を使用して、プロパティをシリアル化して戻さずに逆シリアル化します

Json.net を使用すると、C# オブジェクト プロパティのシリアル化および逆シリアル化プロセスを制御できます。この記事では、JSON ファイルから特定のプロパティを逆シリアル化するが、JSON ファイルにシリアル化して戻さないシナリオについて説明します。これを実現する方法は次のとおりです:

方法 1: ShouldSerialize メソッドを使用する

Json.net は、ShouldSerialize メソッドを使用した条件付きシリアル化をサポートしています。シリアル化中に無視したいプロパティの場合は、Boolean ShouldSerializeBlah() メソッドをクラスに追加します。Blah はプロパティ名です。このメソッドは常に false を返す必要があります。

例:

<code class="language-csharp">class Config
{
    public Fizz ObsoleteSetting { get; set; }

    public Bang ReplacementSetting { get; set; }

    public bool ShouldSerializeObsoleteSetting()
    {
        return false;
    }
}</code>
ログイン後にコピー

方法 2: JObject を使用して JSON を操作する

JsonConvert.SerializeObject に依存する代わりに、構成オブジェクトを JObject に逆シリアル化できます。 JSON に書き込む前に、JSON から不要な属性を削除します:

<code class="language-csharp">JObject jo = JObject.FromObject(config);

// 从其父级中删除“ObsoleteSetting” JProperty
jo["ObsoleteSetting"].Parent.Remove();

json = jo.ToString();</code>
ログイン後にコピー

方法 3: 属性を使用する

もう 1 つの方法は、属性を使用することです:

  1. シリアル化を必要としないプロパティに [JsonIgnore] 属性を追加します。
  2. 元のプロパティと同じ型で代替のプライベート プロパティ セッターを作成します。セッターの実装では、元のプロパティを設定する必要があります。
  3. 元のプロパティと同じ JSON 名を持つ [JsonProperty] 属性をオーバーライド セッターに適用します。

これは例です:

<code class="language-csharp">class Config
{
    [JsonIgnore]
    public Fizz ObsoleteSetting { get; set; }

    [JsonProperty("ObsoleteSetting")]
    private Fizz ObsoleteSettingAlternateSetter
    {
        // get intentionally omitted here
        set { ObsoleteSetting = value; }
    }

    public Bang ReplacementSetting { get; set; }
}</code>
ログイン後にコピー

以上がJson.netを使用してプロパティをシリアル化せずにJSON内のプロパティを逆シリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート