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
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