public Deserializer(string filepath, string localization) { this.localization = localization; //Parse JSON into our auxiliary system string data = System.IO.File.ReadAllText(filepath); this.dataStructure = new AuxiliaryDataStructure(); JToken token = (JToken)JsonConvert.DeserializeObject(data); this.dataStructure = token.ToObject <AuxiliaryDataStructure>(); JToken treeToken = token.Children <JProperty>().FirstOrDefault(x => x.Name == "tree"); AuxiliaryTreeNode tree = new AuxiliaryTreeNode(); FillAuxiliaryTree(treeToken, ref tree); this.dataStructure.Tree = tree; //Set available_filters category this.availableFilters = new HashSet <IFilter>(dataStructure.AvailableFilters.Items.Values .Select(x => new Filter.Filter(this.GetNameWithLocalization(x.Caption), x.Values.Values .Select(y => this.GetNameWithLocalization(y.Caption))))); this.defaultFilters = new HashSet <IFilter>(this.availableFilters .Where(x => this.dataStructure.AvailableFilters.Items .Where(y => this.dataStructure.AvailableFilters.DefaultList.Contains(y.Key)) .Select(z => this.GetNameWithLocalization(z.Value.Caption)) .Contains(x.Name))); //Set tree_elements category this.treeElements = new HashSet <ITreeElement>(); foreach (KeyValuePair <string, AuxiliaryItem> pair in this.dataStructure.TreeElements) { Dictionary <IFilter, IEnumerable <string> > filters = new Dictionary <IFilter, IEnumerable <string> >(); if (pair.Value.Filters != null) { foreach (KeyValuePair <string, List <string> > f in pair.Value.Filters) { filters.Add(this.GetFilter(f.Key), f.Value.Select(fil => this.GetNameWithLocalization(this.dataStructure.AvailableFilters.Items[f.Key].Values[fil].Caption))); } } this.treeElements.Add(new TreeElement.TreeElement( pair.Key, pair.Value.Caption == null ? pair.Key : this.GetNameWithLocalization(pair.Value.Caption), this.defaultFilters .Union(pair.Value.FilterList == null ? new List <IFilter>() : this.availableFilters .Where(x => this.dataStructure.AvailableFilters.Items .Where(y => pair.Value.FilterList.Contains(y.Key)) .Select(z => this.GetNameWithLocalization(z.Value.Caption)) .Contains(x.Name))), filters )); } //Generate Tree ITreeElement root = this.GetTreeElement(this.dataStructure.Tree.Children.First().Key); this.FillResultTree(root, this.dataStructure.Tree.Children.First().Value); this.Tree = new Tree.Tree(root); }
private void FillResultTree(ITreeElement treeElement, AuxiliaryTreeNode nodeInfo) { foreach (KeyValuePair <string, AuxiliaryTreeNode> pair in nodeInfo.Children) { ITreeElement child = this.GetTreeElement(pair.Key); FillResultTree(child, pair.Value); treeElement.AddChild(child); } }
private static void FillAuxiliaryTree(JToken token, ref AuxiliaryTreeNode node) { if (token is JProperty) { AuxiliaryTreeNode child = new AuxiliaryTreeNode(); foreach (JToken t in token.Children()) { FillAuxiliaryTree(t, ref child); } node.Children.Add(((JProperty)token).Name, child); } else if (token is JObject) { foreach (JToken t in token.Children()) { FillAuxiliaryTree(t, ref node); } } }