使用 Newtonsoft.Json 将 JSON 对象反序列化为字典

Deserialize a JSON Object to a dictionary with Newtonsoft.Json

提问人:Mark Mullen 提问时间:9/5/2023 最后编辑:Mark Mullen 更新时间:9/5/2023 访问量:51

问:

我尝试将JSON对象反序列化为字典(of String, List(Of String)),以便使用动态键值而不是静态变量名称。

因此,我使用 Newtonsoft.Json

我的json文件的内容如下:

{
"locations":{
"Template1": "/c/temp/test1",
"Template2": "/c/temp/test2",
"Template3": "/c/temp/test3",
"Template4": "/c/temp/test4",
},
"default":{
"repTempUrl": {
    "us": "Template1",
    "de": "Template2"
    }
   }
  }

我使用以下代码对对象进行反序列化,但没有成功。

        Dim json = File.ReadAllText("c:\temp\test.json")
        Dim response = JsonConvert.DeserializeObject(Of Dictionary(Of String, List(Of String)))(json)
   

我收到的消息如下:

无法反序列化当前 JSON 对象(例如 {“”name“”:“”value“”}) 类型为“System.Collections.Generic.List”1[System.String]“,因为 该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。

原则上,这是与这里相同的问题,但解决方案不起作用:

如何在 ASP.NET 中将JSON反序列化为简单的Dictionary<string,string>?

因为我不确定,如果我使用正确的数据类型,我还尝试了以下方法:

List(Of Dictionary(Of String, Dictionary(Of String, String)))

但结果是一样的。

JSON vb.net

评论

0赞 Craig 9/5/2023
为了使用任何类型的,你需要一个json数组,而你没有。您需要坚持,但问题在于值类型,因为您有不同的嵌套级别。我不认为你可以完全按照你的意愿去做,也许你应该只使用令牌类型?ListDictionary
1赞 Jimi 9/6/2023
也许构建一个简单的类模型来定义 ,并将第一个和最后一个对象的 Type 声明为locationsdefaultrepTempUrlDictionary(Of String, String)

答: 暂无答案