c# Json.net 反序列化列表<字典<字符串,对象>>



反序列化这个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"]

相关内容

  • 没有找到相关文章

最新更新