「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Daserialization中に欠落しているフィールドのJSON.NETをスローして例外をスローするにはどうすればよいですか?

Daserialization中に欠落しているフィールドのJSON.NETをスローして例外をスローするにはどうすればよいですか?

2025-01-29に公開
ブラウズ:706

How Can I Make Json.NET Throw Exceptions for Missing Fields During Deserialization?

はjson.netを使用して、JSONの背中の間に欠落しているフィールドを検出します - && && &&]

JSONの背中のシーケンシャル化では、欠落しているフィールドに対処することが重要です。デフォルトでは、json.netのシリアイザーは、欠落しているフィールドに遭遇すると静かに沈黙に戻ります。この動作は、誤ったディープタイ化属性を持つオブジェクトが無制限のエラーにつながる可能性があります。

質問:

問題に遭遇します。つまり、JSON.NETシリアイザーは、フィールドを欠くオブジェクトにフィールドがない場合、異常を投げません。代わりに、サイレント値を返します。これにより、誤ったデータを検出することが困難になります。 解決:

json.netは、構成可能な

MissionMemberHandling 設定を提供します。それをエラー

に設定することにより、砂漠化期間中に行方不明のフィールドに遭遇したときにシリアナーが

jsonserializationExceptionを引き起こすことを示すことができます。このようにして、コード内のこのようなエラーを明示的に処理できます。 コード: newtonsoft.json; 試す {{ // json文字列を読みます const string recortdata = @"{'myjsonint':42}"; const string誤解= @"{'someotherproperty': 'fbe8c20b'}"; //シリアイザー設定を作成します jsonserializersettings settings = new jsonserialatetngs(); settings.missingmemberhandling = missingmemberhandling.error; //シーケンシャル化オブジェクトを逆にします var goodobj = jsonconvert.deserializeObject (recortData、settings); console.writeline(goodobj.myjsonint.tostring()); var badobj = jsonconvert.deserializeObject (ingdata、settings); console.writeline(badobj.myjsonint.tostring()); } キャッチ(例外Ex) {{ console.writeline(ex.getType()。name ":" ex.message); }

output:

42 jsonserionionexceuon:オブジェクトにメンバー「sometherproperty」を見つけることができませんでした タイプ「myjsonobjview」

using Newtonsoft.Json;

try
{
    // 读取JSON字符串
    const string correctData = @"{ 'MyJsonInt': 42 }";
    const string wrongData = @"{ 'SomeOtherProperty': 'fbe8c20b' }";

    // 创建序列化器设置
    JsonSerializerSettings settings = new JsonSerializerSettings();
    settings.MissingMemberHandling = MissingMemberHandling.Error;

    // 反序列化对象
    var goodObj = JsonConvert.DeserializeObject(correctData, settings);
    Console.WriteLine(goodObj.MyJsonInt.ToString());

    var badObj = JsonConvert.DeserializeObject(wrongData, settings);
    Console.WriteLine(badObj.MyJsonInt.ToString());
}
catch (Exception ex)
{
    Console.WriteLine(ex.GetType().Name   ": "   ex.Message);
}
に設定することにより、シリアナーがフィールドの欠如のオブジェクトを捨てることを確認しますそして、そのデータ陶器を確認してください。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3