反序列化这个JSON字符串的正确方法是什么?它只是一个字典数组,其中每个字典都有一个"title"one_answers"children",其中children是另一个字典数组。
我使用这个作为一个树视图项目源,但树视图只显示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 out of box当前
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"]