Вы можете использовать метод, который выполняет итерацию по всем узлам в дереве, например:
public static IEnumerable<T> Flatten<T>(T node, Func<T, IEnumerable<T>> childSelector)
{
yield return node;
var children = childSelector(node);
if (children == null)
{
yield break;
}
foreach (var child in children)
{
foreach (var grandChild in Flatten(child, childSelector))
{
yield return grandChild;
}
}
}
Затем использовать его, чтобы сгладить структуру дерева перед фильтрацией всего набора или поиском указанного c узел, например:
var rootNode = JavaScriptSerializer.Deserialize<SiteNode>(json);
var filteredNodes = Flatten(rootNode, n => n.children)
.Where(n => n.serviceid== "System-016");