
將巢狀JSON 反序列化為巢狀字典使用自訂JSON 類型對應
使用JSON 物件反型序列化為嵌套字典是一項常見任務,但預設的System.Text.Json反序列化通常會導致所有巢狀物件都表示為 JsonElement 實例。要實現更具體的類型映射,需要自訂 JSON 轉換器。
用於類型對映的自訂JSON 轉換器
以下自訂JSON 轉換器,名為ObjectAsPrimitiveConverter,提供所需的類型對應:
- 字串->字串
- 數字-> int/double
- 物件 -> Dictionary
轉換器實作
轉換器的 Readad方法執行自訂映射:
-
讀取:
- 根據傳入的 JSON 令牌的類型解析其類型。
- 返回特定的.Net 類型(string、int、double、Dictionary 等),或者如果類型不能為則拋出異常
-
寫入:
- 依自訂要求,透過寫入空JSON 物件來處理物件類型
轉換器的使用
要使用自訂轉換器,必須在反序列化期間將其添加到JsonSerializerOptions 中:
1 2 3 4 5 6 7 | var options = new JsonSerializerOptions
{
Converters = { new ObjectAsPrimitiveConverter() },
WriteIndented = true,
};
dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);
|
登入後複製
設定選項
轉換器提供了幾個設定選項:
- FloatFormat:
- UnknownNumberFormat: 決定如何處理無法解析為.Net 原始型別。
- ObjectFormat: 將 JSON 物件的輸出型別配置為 Dictionary 或 Dictionary。或 ExpandoObject。
範例 Fiddle
此處提供現場示範:[範例 Fiddle](https://dotnetfiddle.net/tD9pPI)
以上是如何在 C# 中使用自訂類型映射將巢狀 JSON 反序列化為巢狀字典?的詳細內容。更多資訊請關注PHP中文網其他相關文章!