ネストされた JSON のネストされた辞書への逆シリアル化
.NET Core 3.1 では、System.Text.Json が JSON を逆シリアル化する標準的な方法を提供します。デフォルトでは、JSON オブジェクトは JsonElement オブジェクトに逆シリアル化され、JSON データ構造へのアクセスを提供しますが、値を対応する C# 型に自動的に変換しません。
問題:
目標は、ネストされた JSON オブジェクトを Dictionary
解決策:
を達成するにはSystem.Text.Json はこの特定の型変換にすぐに使える機能を提供していないため、ObjectAsPrimitiveConverter というカスタム JsonConverter が必要です。
ObjectAsPrimitiveConverter は次の機能を提供します。
タイプ認識逆シリアル化:
数値処理:
オブジェクト処理:
実装:
public class ObjectAsPrimitiveConverter : JsonConverter<object> { // Configuration options FloatFormat FloatFormat { get; init; } UnknownNumberFormat UnknownNumberFormat { get; init; } ObjectFormat ObjectFormat { get; init; } public ObjectAsPrimitiveConverter() : this(FloatFormat.Double, UnknownNumberFormat.Error, ObjectFormat.Expando) { } public ObjectAsPrimitiveConverter( FloatFormat floatFormat, UnknownNumberFormat unknownNumberFormat, ObjectFormat objectFormat) { this.FloatFormat = floatFormat; this.UnknownNumberFormat = unknownNumberFormat; this.ObjectFormat = objectFormat; } // ... implementation details ... } public enum FloatFormat { Double, Decimal, } public enum UnknownNumberFormat { Error, JsonElement, } public enum ObjectFormat { Expando, Dictionary, }
使用法:
JSON を動的オブジェクト (または ExpandoObject の場合) に逆シリアル化するには
var options = new JsonSerializerOptions { Converters = { new ObjectAsPrimitiveConverter(floatFormat : FloatFormat.Double, unknownNumberFormat : UnknownNumberFormat.Error, objectFormat : ObjectFormat.Expando) }, WriteIndented = true, }; dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);
注:
以上が.NET Core で型判別を使用して、入れ子になった JSON を入れ子になった辞書に逆シリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。