首頁 > 後端開發 > C++ > 如何在 C# 中將巢狀 JSON 反序列化為巢狀字典?

如何在 C# 中將巢狀 JSON 反序列化為巢狀字典?

Susan Sarandon
發布: 2024-12-29 20:10:20
原創
693 人瀏覽過

How to Deserialize Nested JSON to a Nested Dictionary in C#?

將巢狀JSON 反序列化為巢狀字典在C

使用巢狀JSON 物件時,您可能會想要將它們反序列化為Dictionary其中每個鍵值對對應於JSON 物件中的屬性值對。但是,預設情況下,System.Text.Json 將所有物件反序列化為 JsonElement 對象,這可能無法提供所需的 C# 類型。

自訂 JsonConverter

要實現正確的 C# 類型,您需要建立自訂 JsonConverter。以下轉換器將處理所有JSON 值類型並將它們轉換為對應的C# 類型:

public class ObjectAsPrimitiveConverter : JsonConverter<object>
{
    ...

    public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        switch (reader.TokenType)
        {
            // Handle null, boolean, string, and number types.

            case JsonTokenType.StartArray:
                // Handle arrays.

            case JsonTokenType.StartObject:
                // Handle objects.

            default:
                throw new JsonException("Unknown token");
        }
    }
}
登入後複製

使用轉換器

要使用自訂轉換器,請在反序列化選項中指定它:

var options = new JsonSerializerOptions
{
    Converters = { new ObjectAsPrimitiveConverter() },
};

dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);
登入後複製

註釋

  • JSON可以表示任意精確度的數字,且大小,而 .Net 原始數字類型有限制。您可以設定是否將不支援的數字作為 JsonElements 傳回或引發異常。
  • 您可以自訂轉換器以傳回雙精確度或十進制浮點數和字典。或 ExpandoObject,依照您的喜好取得 JSON 物件。

以上是如何在 C# 中將巢狀 JSON 反序列化為巢狀字典?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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