这是我第一次反序列化复杂的JSON字符串。这是我的模型:
public class Child
{
public List<object> children { get; set; }
public bool var { get; set; }
public string name { get; set; }
public bool leaf { get; set; }
public int category_id { get; set; }
}
public class Datum
{
public List<Child> children { get; set; }
public bool var { get; set; }
public string name { get; set; }
public bool leaf { get; set; }
public int category_id { get; set; }
}
public class RootObject
{
public List<Datum> data { get; set; }
}
然后我使用以下方法反序列化字符串:
RootObject rootobj = JsonConvert.DeserializeObject<RootObject>(response.Body);
这是我的结果: https://i.stack.imgur.com/4jiMA.png
我如何正确处理此结果?我正在使用ASP.NET,如何在子数据中获取子数据,又如何使用它们呢?我在互联网上搜索了几天,但是所有帮助都使我反序列化JSON响应,而不是如何使用它们。谢谢您的回答。
这是我的Json数据
答案 0 :(得分:1)
您的模型应如下所示:
public class Datum
{
public List<Datum> children { get; set; }
public bool var { get; set; }
public string name { get; set; }
public bool leaf { get; set; }
public int category_id { get; set; }
}
public class RootObject
{
public List<Datum> data { get; set; }
}
创建json结果的平面结构。这样一来,您就可以遍历所有对象,就好像它是单个数组一样(我认为您想对数据进行处理)。
var flat = root.data.SelectMany(x => x.SelectChilds(y => y.children));
扩展方法可帮助创建平面结构:
public static class Extensions
{
/// <summary>
/// Recursive method to return a flat structure of child elements
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="func">Function to get child elements</param>
/// <returns></returns>
public static IEnumerable<T> SelectChilds<T>(this T source, Func<T, IEnumerable<T>> func)
{
yield return source;
foreach (T element in func(source) ?? Enumerable.Empty<T>())
{
var subs = element.SelectChilds(func);
foreach (T sub in subs)
{
yield return sub;
}
}
}
}