2016-11-02 6 views
-1

Я пытаюсь пропустить некоторые данные JSON и распечатать их на экране. Вот то, что JSON выглядит следующим образом:Как я могу перебирать дочерние узлы с помощью Json.NET?

JSON data

Используя этот код, я могу проходной список имен категорий без каких-либо проблем:

dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json); 

foreach (var obj in jsonObj.categories) 
{ 
    <p> <strong> @obj.name </strong> </p> 
} 

Я не могу понять, как однако, чтобы прокручивать подкатегории. Я пробовал это, но я просто получаю сообщение об ошибке - Object не установлен в экземпляр объекта.

foreach (var obj in jsonObj.categories) 
{ 
    <p> <strong> @obj.name </strong> </p> 

    foreach (var subcat in jsonObj.subcategories) 
    { 
     <p> <strong> @obj.name </strong> </p> 
    } 
} 
+2

У вас есть опечатка: во втором цикле вы должны использовать 'var subcat в obj.subcategories' – Nico

ответ

3

Вы пытаетесь получить подкатегорий из родительского объекта, а не ребенка одного:

foreach (var category in jsonObj.categories) 
{ 
    <p> <strong> @category.name </strong> </p> 

    foreach (var subcategory in category.subcategories) // <= here is the key. 
    { 
     <p> <strong> @subcategory.name </strong> </p> 
    } 
} 
+0

Кроме того, вам будет легче следить за потоком, если вы переименуете «obj» в «category». – JCabello

1

Вы вызываете подкатегории в jsonObject, но вы должны называть его ojb.

Изменить код:

foreach (var subcat in obj.subcategories) 
{ 
    <p> <strong> @obj.name </strong> </p> 
} 
1
foreach (var obj in jsonObj.categories) 
{ 
    <p> <strong> @obj.name </strong> </p> 

    foreach (var subcat in obj.subcategories) 
    { 
     <p> <strong> @obj.name </strong> </p> 
    } 
} 

Вы должны петля в obj.subcategories

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