反序列化此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"]);
答案 0 :(得分:2)
在我看来,你有以下几点:
class MyObject
{
public string title { get; set; }
public List<MyObject> children { get; set; }
}
var deserialized = JsonConvert.DeserializeObject<List<MyObject>>(s);
不,这里没有字典,因为:
注意解决您的意见:如果JSON字符串发生更改,则不会破坏您的代码;将忽略无关属性,并且将缺少的属性正确设置为null。
答案 1 :(得分:1)
https://codetitans.codeplex.com/
codetitans JSON支持将JSON正确解析为基元的数组/字典,如下所示:
JSonReader jr = new JSonReader();
IJSonObject json = jr.ReadAsJSonObject(s);
Debug.WriteLine(json[0]["children"][0]["title"]);
据我所知,它是唯一的C#库。
答案 2 :(得分:0)
看起来您可以使用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"]