将对象反序列化为Dictionary(JsonConvert.DeserializeObject<IDictionary<string,object>>(json))时,嵌套对象反序列化为JObject.是否可以强制将嵌套对象反序列化为Dictionary秒?

推荐答案

通过提供CustomCreationConverter实现,我找到了一种将所有嵌套对象转换为Dictionary<string,object>的方法:

class MyConverter : CustomCreationConverter<IDictionary<string, object>>
{
    public override IDictionary<string, object> Create(Type objectType)
    {
        return new Dictionary<string, object>();
    }

    public override bool CanConvert(Type objectType)
    {
        // in addition to handling IDictionary<string, object>
        // we want to handle the deserialization of dict value
        // which is of type object
        return objectType == typeof(object) || base.CanConvert(objectType);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.StartObject
            || reader.TokenType == JsonToken.Null)
            return base.ReadJson(reader, objectType, existingValue, serializer);

        // if the next token is not an object
        // then fall back on standard deserializer (strings, numbers etc.)
        return serializer.Deserialize(reader);
    }
}

class Program
{
    static void Main(string[] args)
    {
        var json = File.ReadAllText(@"c:\test.json");
        var obj = JsonConvert.DeserializeObject<IDictionary<string, object>>(
            json, new JsonConverter[] {new MyConverter()});
    }
}

Documentation: CustomCreationConverter with Json.NET

Json相关问答推荐

中间初始化的Jolt配置

当并非所有子对象都有 Select 器字段时 Select

从包含 JSON 对象序列的文件中获取第一个 JSON 对象

在Databricks中如何将JSON文件作为字典读取

使用不同行数的数据创建嵌套Jolt

将 GEOSwift.JSON 转换为 Swift 中的 struct

如何在 jq 中按 IP 地址排序?

每次在 SoapUI 中发送请求时,将 JSON 响应的子 node 分配给项目变量

我如何将 JSON 格式与 flutter 一起使用?帮助使用 Gamebanana api

如何在 powerapps 中将详细信息表单转换为 json?

流导入错误:重新上传时不存在布局释放 UUID

JQuery,使用 GET 方法发送 JSON 对象

杰克逊 2.0 和 Spring 3.1

JSON.NET 中特定对象的自定义转换

Jackson 的@JsonView、@JsonFilter 和 Spring

一起使用 Argparse 和 Json

字符串的 Gson 数组到 JsonArray

使用 jq 如何用其他名称替换键的名称

Swift :将 struct 转换为 JSON?

FastAPI:如何将正文读取为任何有效的 json?