2013-12-07 4 views
3

Я пытаюсь проанализировать JSON с помощью объекта динамической обработки. Вот библиотека, переводчик JSON данных, которые я использую: https://github.com/cmcdonaldca/shopify.netСинхронизация динамических данных

Вот мое сообщение об ошибке:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: «строка» делает не содержит определения для 'продукты'

Вот мой JSON:

http://pastebin.com/pnmz7jN0

Вот мой код:

public void GetProducts() 
    { 
     // The JSON Data Translator will automatically decode the JSON for you 
     dynamic data = _api.Get("/admin/products.json"); 

     // the dynamic object will have all the fields just like in the API Docs 
     foreach (var product in data.products) 
     { 
      Console.Write(product.title); 
     } 
    } 

я пытался data.products и данные, но я не могу получить объект продукта внутри.

+0

Покажите нам реализацию этого "Переводчик JSON данных". –

+0

Имеет ли объект json свойство title? – PCG

+0

Я добавил код и да, есть свойство title. –

ответ

0

Рассмотрите data[0].title для запуска, но в режиме отладки вы должны иметь возможность перемещаться по объекту или использовать немедленное окно и запускать некоторые ручные запросы.

Относительно ошибки кажется, что ваш dynamic data может быть просто строковым объектом, попробуйте свой собственный код, просто удалите слово «продукты».

public void GetProducts() 
{ 
    // The JSON Data Translator will automatically decode the JSON for you 
    dynamic data = _api.Get("/admin/products.json"); 

    // the dynamic object will have all the fields just like in the API Docs 
    foreach (var product in data) //here is the change from the code you posted 
    { 
     Console.Write(product.title); 
    } 
} 

Your sample data parsed

+0

Каким образом изменение от 'data.products' до' data' будет решением в этом случае ?! – Khez

+0

, поскольку динамические данные могут быть массивом уже, если вы делаете data.products, это означает, что вы ссылаетесь на динамический объект, называемый данными, и на его свойства «продукты». Тот факт, что нотация JSON имеет имя, не означает, что любой API, который вы используете, десериализует его с помощью имен. Посмотрите на изображение снова, данные динамических объектов могут быть массивом, поэтому вместо foreach (p в data.products) попробуйте foreach (p в данных) –

+0

Кстати, мой пример - «сухая попытка». Я не тестировал этот подход во время выполнения. Не могу проверить. Я не уверен, что означает «_api», даже если упоминается JSON Data Translator, или, другими словами, я слишком ленив :) –

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