![](/img/trans.png)
[英]C# Deserializing a Dictionary<(Enum,Enum),string> with JSON.NET
[英]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.