如何正确处理反序列化 JSON 对象
How to properly handle a deserialize JSON object
这是我第一次反序列化复杂的 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 数据
您的模型应该是什么样子:
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;
}
}
}
}
这是我第一次反序列化复杂的 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 数据
您的模型应该是什么样子:
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;
}
}
}
}