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

将JSON递归反序列化为IDictionary

董小林
2023-03-14
问题内容

我正在尝试将一些较旧的工作转换为使用Newtonsoft
JSON.NET。使用该System.Web.Script.Serialization.JavaScriptSerializer.Deserialize方法的默认处理(例如,如果未指定目标类型)是Dictionary<string,object>为内部对象返回a


这实际上是JSON真正有用的基本类型,因为它也恰好是JSON使用的基础类型,ExpandoObjects并且是动态类型最明智的内部实现。

如果我指定这种类型,例如:

 var dict = JsonConvert.DeserializeObject<Dictionary<string,object>>(json);

JSON.NET将正确反序列化最外部的对象结构,但是它将JObject为任何内部结构返回一个类型。我真正需要的是将相同的外部结构用于任何内部对象类型的结构。

有没有一种方法可以指定要用于内部对象的类型,而不仅仅是返回最外层的类型?


问题答案:

使用Json反序列化复杂对象时,您需要添加JsonSerializer设置作为参数。这将确保所有内部类型都正确地反序列化。

    private JsonSerializerSettings _jsonSettings = new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.All,
        TypeNameAssemblyFormat = FormatterAssemblyStyle.Full
    };

序列化对象时,可以使用SerializerSettings:

    string json= JsonConvert.SerializeObject(myObject, _jsonSettings)

然后在反序列化时,使用:

    var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(json, _jsonSettings);

另外,序列化时,将JsonSerializerSettings添加到SerializeObject(对象,设置)

编辑:您还可以根据需要更改TypeNameHandling和TypeNameAssemblyFormat。我将它们分别设置为“全部”和“全部”,以确保毫无疑问,我的复杂对象可以正确地序列化和反序列化,但是intellisense为您提供了其他选择



 类似资料:
  • 问题内容: 使用Jackson 2,我正在寻找一种 通用的 方式将对象序列化为单个值(然后序列化它们,然后再填充该单个字段),而不必重复创建JsonSerializer / JsonDeserializer来处理每种情况。@JsonIdentityInfo批注非常接近,但由于我知道,它将始终对完整的子对象进行序列化,因此略微遗漏了该标记。 这是我想做的一个例子。给定的类: 我希望Order可以序列

  • 问题内容: 我在Android上的Java中具有以下枚举,并且我希望能够将传入的JSON字符串/对象中的整数反序列化为此Enum类型。我一直在Jackson和GSON上受到欢迎,但在我正在使用的JSON.org包上却什么也没有。 有没有简单的方法可以做到这一点,或者我需要更改JSON解码器?谢谢。 问题答案: 将返回您的数组,然后可以遍历数组并检查

  • 问题内容: 我在使用AJAX访问的Java服务器应用程序中有一个字符串。它看起来像以下内容: 当从服务器提取字符串时,是否有一种简单的方法可以将其转换为活动的JavaScript对象(或数组)?还是我必须手动拆分字符串并手动构建对象? 问题答案: 现代浏览器支持。 在不浏览器,您可以包括在库中。

  • 我有一个通过RabbitMQ作为消息发送的类,在sender服务上,它的定义如下: 并且在接收方服务上: 在receiver controller中,我有以下方法,它应该接受该消息,将其转换为一个对象,并将其保存在数据库中,看起来如下所示: 编辑:根据请求添加堆栈跟踪。

  • 我在Android上的Java中有以下枚举,我希望能够将传入的JSON字符串/对象中的整数反序列化为该枚举类型。我在杰克逊和GSON上得到了点击,但在json.org包上没有,我正在使用。 是否有一个简单的方法来做到这一点,或者我需要改变JSON解码器?谢了。

  • 问题内容: 我需要将Objective- C对象序列化和反序列化为JSON以存储在CouchDB中。人们是否有通用解决方案最佳实践的示例代码?我看了几个JSON框架,它们在NSDictionary / NSArray级别停止了。即,许多框架会将NSDictionary / NSArray序列化和反序列化为JSON。但是我仍然要做将NSDictionary转换为Objective-C对象的工作。 为