ホームページ >バックエンド開発 >C++ >Json.NET で JSON 逆シリアル化中に欠落しているフィールドを処理するにはどうすればよいですか?

Json.NET で JSON 逆シリアル化中に欠落しているフィールドを処理するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-19 05:44:12465ブラウズ

How to Handle Missing Fields During JSON Deserialization in Json.NET?

Json.NET での JSON 逆シリアル化中に欠落しているフィールドを処理する方法

Json.NET を使用して JSON オブジェクトを逆シリアル化する場合、欠落しているフィールドを正しく処理することが重要です。デフォルトでは、Json.NET は欠落しているプロパティを無視してデフォルト値を返すため、後続の処理中にエラーが発生する可能性があります。

次のコードを考えてみましょう:

<code class="language-csharp">using Newtonsoft.Json;

namespace Json_Fail_Test
{
    [JsonObject(MemberSerialization.OptOut)]
    private class MyJsonObjView
    {
        [JsonProperty("MyJsonInt")]
        public int MyJsonInt { get; set; }
    }

    static void Main(string[] args)
    {
        string correctData = @"{'MyJsonInt': 42}";
        string wrongData = @"{'SomeOtherProperty': 'fbe8c20b'}";

        var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData);
        var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData);

        Console.WriteLine(goodObj.MyJsonInt); // 输出 42
        Console.WriteLine(badObj.MyJsonInt); // 输出 0
    }
}</code>

このコードは、JSON オブジェクトを MyJsonObjView オブジェクトに逆シリアル化しようとします。正しい JSON には「MyJsonInt」属性が含まれていますが、間違った JSON には含まれていません。出力は次のようになります:

<code>42
0</code>

ご覧のとおり、間違った JSON を逆シリアル化するとコードは通知なしで失敗し、欠落しているプロパティのデフォルト値を返します。このような動作を回避するには、MissingMemberHandling 設定を使用できます。

<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MissingMemberHandling = MissingMemberHandling.Error;</code>

MissingMemberHandlingError に設定することで、逆シリアル化中に欠落しているプロパティが見つかった場合に例外をスローするように Json.NET に指示します。

<code class="language-csharp">try
{
    var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData, settings);
    var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData, settings);
}
catch (Exception ex)
{
    Console.WriteLine(ex.GetType().Name + ": " + ex.Message);
}</code>

ここで、間違った JSON を逆シリアル化すると、例外が発生します。

<code>JsonSerializationException: Could not find member 'SomeOtherProperty' on object
of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>

この例外は、属性が欠落しているために逆シリアル化が失敗したことを明確に示しており、エラーを適切に処理できるようになります。

MissingMemberHandling 属性を設定すると、欠落している JSON 属性を処理するときに Json.NET の動作をより効果的に制御できるため、潜在的なエラーが回避され、コードの堅牢性が向上します。

以上がJson.NET で JSON 逆シリアル化中に欠落しているフィールドを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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