首頁 > 後端開發 > C++ > 如何在 .NET Core 中將巢狀 JSON 反序列化為具有類型區分的巢狀字典?

如何在 .NET Core 中將巢狀 JSON 反序列化為具有類型區分的巢狀字典?

DDD
發布: 2024-12-29 08:04:13
原創
892 人瀏覽過

How to Deserialize Nested JSON into a Nested Dictionary with Type Discrimination in .NET Core?

將巢狀JSON 反序列化為巢狀字典有型別

在.NET Core 3.1中, System.Text.Json提供了反序列化JSON的標準方法。預設情況下,JSON 物件會反序列化為 JsonElement 對象,這些物件提供對 JSON 資料結構的訪問,但不會自動將值轉換為其對應的 C# 類型。

問題:

目標是將巢狀的JSON 物件反序列化為Dictionary,但對JSON 屬性進行以下類型區分值:

  • 字串作為字串
  • 數字作為int/double
  • 物件作為字典

解決方案:

要實現這一點,名為ObjectAsPrimitiveConverter的自訂JsonConverter 是必要的,因為System.Text.Json不提供此特定類型轉換的開箱即用功能。

ObjectAsPrimitiveConverter 提供以下功能:

  • 型別感知反序列化:

    • 將字串轉換為字元串
    • 根據使用者可設定的格式將數字轉換為int/double
    • 將物件轉換為 Dictionary
  • 數位處理:

    • 支援浮點數的雙精確度或小精度
    • 包括一個選項,用於將不支援的數字處理為JsonElements 或throw異常
  • 物件處理:

    • 允許使用者選擇使用Dictionary或 Expandoobject>對象

實現:

用法:

註釋:

JSON 允許任意精度和大小的數字,而. NET 原始數字類型則不然。如果 JSON 數字無法解析為 .NET 基元類型,則轉換器提供傳回該數字的 JsonElement 或引發例外狀況的選項。
  • 轉換器可以配置為使用雙精確度或十進制精確度對於浮點數和 Dictionary或 ExpandoObject 用於 JSON 物件。

以上是如何在 .NET Core 中將巢狀 JSON 反序列化為具有類型區分的巢狀字典?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板