public static Node ResolveChildren(IEnumerable<string> splitNodes, Node node) { string currentParentNode = splitNodes.First(); foreach (string splitNode in splitNodes) { if (node.Children.Any()) { if (!NodeExistsInHierachy(node.Children, splitNode)) { Node matchingParentNode = FindMatchingNodeInHierarchy(node.Children, currentParentNode); if (matchingParentNode == null) { node.Children.Add(new Node(splitNode, currentParentNode)); } else { matchingParentNode.Children.Add(new Node(splitNode, currentParentNode)); } } } else { node.Children.Add(new Node(splitNode, currentParentNode)); } currentParentNode = splitNode; } return node; }
private static void Main(string[] args) { //OriginalApproach(); var sharepointData = new List<KeyValuePair<string, string>>(); sharepointData.Add(new KeyValuePair<string, string>("/Trades Database", "/Trades Database/Admin")); sharepointData.Add(new KeyValuePair<string, string>("/Trades Database", "/Trades Database/Something")); sharepointData.Add(new KeyValuePair<string, string>("/Trades Database/Something", "/Trades Database/Something/doc1.txt")); sharepointData.Add(new KeyValuePair<string, string>("/Trades Database/Something", "/Trades Database/Something/blah.txt")); sharepointData.Add(new KeyValuePair<string, string>("/blah", "/blah/Folder1")); sharepointData.Add(new KeyValuePair<string, string>("/blah/Folder1", "/blah/Folder1/wow")); sharepointData.Add(new KeyValuePair<string, string>("/blah/Folder1/wow", "/blah/Folder1/wow/hellothere.txt")); sharepointData.Add(new KeyValuePair<string, string>("/Yolo", "/Yolo/Something")); var tree = new Node(); foreach (var sharePointListItem in sharepointData) { var splitNodes = sharePointListItem.Key.Split('/'); var filterNodes = FilterNodes(splitNodes); tree = NodeResolver.ResolveChildren(filterNodes, tree); splitNodes = sharePointListItem.Value.Split('/'); filterNodes = FilterNodes(splitNodes); tree = NodeResolver.ResolveChildren(filterNodes, tree); } if (tree.Children != null) { var raw = JsonConvert.SerializeObject(tree); var json = JsonConvert.DeserializeObject<Noded>(raw); _finalJson = JsonConvert.SerializeObject(json); _finalJson = _finalJson.Replace("\"Name\"", "text"); _finalJson = _finalJson.Replace("\"Children\"", "items"); _finalJson = _finalJson.Replace("\"Children\": []", ""); } Console.WriteLine("Final Json---> {0}", _finalJson); Console.ReadKey(); }