当前位置: 首页 > 面试题库 >

Json.NET:反序列化嵌套字典

谢英耀
2023-03-14
问题内容

将对象反序列化为DictionaryJsonConvert.DeserializeObject<IDictionary<string,object>>(json))时,嵌套对象反序列化为JObjects。是否可以强制将嵌套对象反序列化为Dictionarys?


问题答案:

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

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()});
    }
}

文档:
Json.NET的CustomCreationConverter



 类似资料:
  • 考虑: 如果我们序列化Foo(),输出是: 我想要: 最干净的方法是什么?

  • 问题内容: 我需要将复杂的JSON Blob反序列化为标准.NET容器,以便 在不了解JSON的代码中 使用。它期望的事情是在标准的.NET类型,具体地或其中“对象”可以是原语或递归(词典或列表)。 我不能使用静态类型来映射结果,并且JObject / JToken不适合。理想情况下,将有某种方式(也许通过Contracts?)将原始JSON转换为基本.NET容器。 我一直在寻找任何方法来诱使JS

  • 我有以下xml 我需要将其反序列化为以下POJO: 这里的问题是被包装在元素中

  • 问题内容: 我正在尝试对a进行序列化/反序列化,如果对象是简单类型,这似乎很好,但是当对象更复杂时,它不起作用。 我有这个课: 在我的字典中,我添加了一个带有“重定向链”键的键和一些带有“状态”,“网址”,“父网址”键的简单字符串。我从JSON.Net返回的字符串如下所示: 我用来序列化的代码如下: 反序列化我正在做的事情: 字典恢复正常,所有字符串恢复正常,但是列表未正确反序列化。它只是作为 当

  • 我知道我可以创建一个单独的Report类,然后使用@JSONProperty将其嵌入到ReportResponse中。有没有一种方法可以避免这种情况,并用一个注释标记ReportResponse类,将它映射到JSON中的“Report”元素?

  • 问题内容: 在我当前的项目中,我在android中使用GSON库,并且遇到了嵌套地图反序列化的问题。这就是初始json的样子 而我的pojo的 和花类 但是当我尝试反序列化此对象时,我可以访问嵌套的哈希图,示例代码为 有什么建议? 问题答案: 这告诉Gson您想反序列化为未知值类型的Map。您可能会想指定类似的东西,但是您无法在Java中进行指定,因此解决方案是使用他们在Gson中称为TypeTo