首页 >后端开发 >C++ >如何在 C# 中将嵌套 JSON 反序列化为嵌套字典?

如何在 C# 中将嵌套 JSON 反序列化为嵌套字典?

Susan Sarandon
Susan Sarandon原创
2024-12-29 20:10:20704浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn