private CategoryTreeNode createNode(string key, object node) { var keys = key.Split(';'); string name = keys[0]; Uri icon = null; if (keys.Length > 1) { icon = new Uri("/Assets/Categories/" + keys[1], UriKind.Relative); } if (node is CategoryTree) { CategoryTree root = node as CategoryTree; return(new CategoryTreeInnerNode { Name = name, Icon = icon, Children = root.Select(x => createNode(x.Key, x.Value)).ToList() }); } else { return(new CategoryTreeLeaf { Name = name, Icon = icon, RouteSelector = node as RouteSelector }); } }