繁体   English   中英

c#Json.net反序列化列表 <Dictionary<string,object> &gt;

[英]c# Json.net deserializing List<Dictionary<string,object>>

反序列化此JSON字符串的正确方法是什么? 它只是一个字典数组,其中每个字典都有一个“标题”和“孩子”,其中孩子是另一组字典。

我使用它作为TreeView项目源,但树视图只显示Title1> Child1,因为我假设我正在做的反序列化有问题。 我也尝试打印出Child1的第一个孩子,但无法弄明白该怎么做。 下面的代码有一个无效的强制转换异常。

s = @"[{""title"":""Title1"",""children"":[{""title"":""Child1"",""children"":[{""title"":""grandchild1"",""children"":[{""title"":""Huh""}]}] }] }]";

List<Dictionary<string, object>> marr = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(s);
mTreeView.ItemsSource = marr;

List<Dictionary<string,object>> cs = (List<Dictionary<string,object>>)marr[0]["children"];
Debug.WriteLine(cs[0]["title"]);

在我看来,你有以下几点:

class MyObject
{
    public string title { get; set; }
    public List<MyObject> children { get; set; }
}

var deserialized = JsonConvert.DeserializeObject<List<MyObject>>(s);

不,这里没有字典,因为:

  • 尽我所能,我不会在这里看到一个“字典”,就像上面对象的递归列表一样
  • 这是您想要的对象的实际定义,因此您可以利用拥有真实类型的所有好处,而不仅仅是字符串字典。

注意解决您的注释:如果JSON字符串更改,它将不会破坏您的代码; 将忽略无关属性,并且缺少的属性将正确设置为null。

https://codetitans.codeplex.com/

codetitans JSON支持将JSON正确解析为基元的数组/字典,如下所示:

JSonReader jr = new JSonReader();
IJSonObject json = jr.ReadAsJSonObject(s);
Debug.WriteLine(json[0]["children"][0]["title"]);

据我所知,它是唯一的C#库。

看起来您现在可以使用JSON.NET开箱即用

var @object = JsonConvert.DeserializeObject(s)
var slightlyMoreUsefulObject = (JArray)@object;

var actualObject = slightlyMoreUsefulObject[0]

var topLevelTitle = actualObject["title"]

var children = actualObject["children"]
var firstChild = children[0]
var firstChildTitle = firstChild["title"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM