2016-11-03 3 views
0

У нас есть набор результатов, который возвращается как список с родительским, дочерним и несколькими столбцами. Мы хотим преобразовать это в Json с родительским преобразованием в Id и Child в соответствующие узлы. пример нижеПреобразование ArrayList в желаемый формат Json

возвращаемый результат:

parent | Child ab | cd ab | ef ab | gh cd | ij cd | kl ef | mn ef | op gh | qr ij | st and so on

ожидается Json:

{ "id": "ab", "label": "ab", "nodes": [ { "id": "cd", "label": "cd", "nodes": [ { "id": "ij", "label": "ij", "nodes": { "id": "st", "label": "st" } }, { "id": "kl", "label": "kl" } ] }, { "id": "ef", "label": "ef", "nodes": [ { "id": "mn", "label": "mn" }, { "id": "op", "label": "op" } ] }, { "id": "gh", "label": "gh", "nodes": { "id": "qr", "label": "qr" } } ] }

Надежда Вопрос ясно, пожалуйста, дайте мне знать, как C# или JS утилита, которая помогает мне в делая это.

Заранее спасибо

Edited

После некоторых исследований,

public class TreeNode 
{ 
public TreeNode() 
{ 
    nodes = List<TreeNode>(); 
} 

String id {get; set;} 
List<TreeNode> nodes {get; set;} 
} 

Метод

public List<TreeNode> FlatToHierarchy(List<TreeNode> list) 
{ 
     var lookup = new Dictionary<string, TreeNode>(); 
     // actual nested collection to return 
     List<TreeNode> nested = new List<TreeNode>(); 

     foreach (TreeNode item in list) 
     { 
      if (lookup.ContainsKey(item.Parent)) 
      { 
       lookup[item.Parent].Children.Add(item); 
      } 
      else 
      { 
       nested.Add(item); 
      } 
      lookup.Add(item.Part, item); 
     } 

     return nested; 
} 

Но это возвращается,

ab 
| 
--cd 
    | 
    --ij 
--cd 
| 
    --kl 
ab 
| 
--ef 
    | 
    --mn 
--ef 
    | 
    --op 

и др., Который не ожидается данные.

обновил вопрос, чтобы было полезно получить ответы.

Спасибо заранее.

+0

Вам нужно разобрать свой JSON, возможно, используя Newtonsoft.Json - это все! – duDE

+0

@duDE. Спасибо, но я новичок в C#, нахожу трудности в разборе и получении ожидаемого Json. –

+0

Отредактировал мой вопрос с исследованиями. –

ответ

0

Наконец, мы могли бы написать код, и это сработало для нас.

public List<TreeNode> FillRecursive(List<T> eqpList) 
    { 

     List<TreeNode> list = new List<TreeNode>(); 
     //First Item in the list is our RootNode 
     var FirstEqp = eqpList.FirstOrDefault(); 
     TreeNode RootNode = new TreeNode(); 
     RootNode.text = FirstEqp.Parent; 
     RootNode.items.Add(new TreeNode() { text = FirstEqp.child }); 
     foreach (EquipmentHierarchySPList eqp in eqpList) 
     { 
      GetTreeStructureFromList(eqp, list, RootNode); 
     } 
     return list; 

    } 

    public void GetTreeStructureFromList(T eqp, List<TreeNode> list,TreeNode RootNode) 
    { 
     bool found = false; 
     TreeNode FoundNode = GetTreeNode((list.Count != 0 ? RootNode : null), eqp.Parent, out found); 
     if (!FoundNode.IsNullValue()) 
      FoundNode.items.Add(new TreeNode() { text = eqp.child }); 
     else //this will execute only once. 
      list.Add(RootNode); 
    } 

    public TreeNode GetTreeNode(TreeNode RootNode, string findText,out bool found) 
    { 
     //if RootNode is Null , just return; 
     if (RootNode.IsNullValue()) 
     { 
      found = false; 
      return null; 
     } 

     if (RootNode.text.Equals(findText)) 
     { 
      found = true; 
      return RootNode; 
     } 
     for (int j = 0; ; j++) 
     { 
      if (j >= RootNode.items.Count) 
      { 
       found = false; 
       return RootNode; 
      } 

      var final = GetTreeNode(RootNode.items[j], findText,out found); 

      if (found == true) 
       return final; 

      if (final.IsNullValue()) 
       return RootNode; 

     } 

    } 
} 
public class TreeNode 
{ 
    public TreeNode() 
    { 
     items = new List<TreeNode>(); 
    } 

    public string text { get; set; } 

    public List<TreeNode> items { get; set; } 

     public bool TreeCompare(string findText) 
     { 
      return Convert.ToBoolean(text.CompareTo(findText)); 
     } 



} 

Спасибо за предложения/помощь.

1

Пожалуйста, используйте JSON.Net или другие json-парсеры.

Смежные вопросы