2017-02-08 4 views
0

В настоящее время я получаю значения, используя 3 вложенных forloops. У меня уже есть JSON, десериализованный в класс someCollection. Я видел похожие примеры в Интернете, но я надеялся, что кто-то может объяснить, как я могу заставить его работать. СпасибоКак получить значения для всех дочерних узлов в классе JSON C#

private List<Guid> GetIds(SomeCollection someList) 
    { 
     var list = new List<Guid>(); 

     for (int i = 0; i < someList.Categories.Count; i++) 
     { 
      for (int j = 0; j < someList.Categories[i].Categories.Count; j++) 
      { 
       for (int k = 0; k < someList.Categories[i].Categories[j].Categories.Count; k++) 
       { 
        list.Add(Guid.Parse((someList.Categories[i].Categories[j].Categories[k].Key))); 
       } 
       list.Add(Guid.Parse((someList.Categories[i].Categories[j].Key))); 
      } 
      list.Add(Guid.Parse((someList.Categories[i].Key))); 
     } 
     return list; 
+0

Это типичный случай, когда вы должны использовать рекурсивные вызовы. – Graffito

+0

Спасибо @ Graffito. У меня возникает проблема с тем, как реализовать рекурсию таким образом, чтобы динамически вызывать подкатегории. т. е. этот код только опускается на три уровня. Я не уверен, как реализовать условие, чтобы проверить, есть ли дополнительные подкатегории – Giolla

ответ

0

Эквивалент кода рекурсивным образом будет:

var list = new List<Guid>(); 
GetIds(someList,list) ; 

private void GetIds(SomeCollection someList,List<Guid> list) 
{ 
    for (int i = 0; i < someList.Categories.Count; i++) 
    { 
    GetIds (someList.Categories[i],list) ; 
    list.Add(Guid.Parse((someList.Categories[i].Key))) ; 
    } 
} 
+0

Спасибо @Graffito очень много. Он работал с некоторыми незначительными изменениями, и я смог понять и узнать. – Giolla