我将来自第三方提供程序的JSON反序列化为一个对象,并希望查询该对象以查找特定属性中的值。
我的问题是对象具有一个属性(零件),其值是具有相同类型的列表。
@{
var myChart = new Chart(width: 600, height: 400)
.AddTitle("Chart Title")
.AddSeries(
name: "Employee",
xValue: new[] { "Peter", "Andrew", "Julie", "Mary", "Dave" },
yValues: new[] { "2", "6", "4", "5", "3" })
.Write();
}
当“零件”属性可以具有6或7个级别时,如何查询该对象以查找特定的值?
这是我收到的JSON示例:
public class RulePartModel
{
public string isExistsUnder { get; set; }
public int State { get; set; }
public string Value { get; set; }
public List<RulePartModel> Parts { get; set; }
}
答案 0 :(得分:2)
尝试一下:
static void Main(string[] args)
{
var testobj = new RulePartModel();
var results = FindParts(testobj, q => q.Value == "123");
// results =>>> all objects with your condition
}
static IEnumerable<RulePartModel> FindParts(RulePartModel obj, Func<RulePartModel, bool> predicate)
{
if (predicate.Invoke(obj))
yield return obj;
foreach (var item in obj.Parts)
foreach (var res in FindParts(item, predicate))
yield return res;
}
或对非递归函数使用 @Parrish 建议:
static IEnumerable<RulePartModel> FindParts(RulePartModel obj)
{
var stack = new Stack<RulePartModel>();
stack.Push(obj);
while (stack.Count > 0)
{
var current = stack.Pop();
yield return current;
foreach (var item in current.Parts)
stack.Push(item);
}
}
用法示例:
var results = FindParts(testobj).Where(q => q.Value == "123");