Публикация

Как разобрать массив данных ответа веб-сервиса?

Вопрос:

Возникла необходимость разобрать массив с большим кол-вом данным.  На академии такой пример не рассмотрен.
В курсе о возможности парсинга массива при настройке параметров JSONPath, но это работает при условии возвращения одной записи в массиве. А как быть с большим кол-вом данных?

При настройке обработки ответа веб-сервиса, есть поле "Является массивом", при его активации, ответ конвертируется в интерфейс IObjectList, и записать его в параметрах бизнес процесса представляется возможным только с типом данных "Коллекция значений", что усложняет парсинг массива.

Вопросы:
Что за интерфейсы IObjectList/ICompositeObject/ICompositeObjectList<TObject>, и как обрабатывать такой конвертированный массив?
Можно-ли обработать массив из ответа веб-сервиса и как это сделать?

Веб-сервис http://hetzner1.k-matika.ru:64123/0/rest/KmWebService/GenderSearchContact?GenderName={значение}, выборка по полу {Male/Female}

Выборка полей по каждому контакту: Id, Name, Phone

Ответ:

Пример реализации:
Сервис (схема):

Рекомендации: используйте контракты для передачи объектов, для формирования json, используйте возможности newtonsoft.json
Бизнес-процесс:

Сервис


Настройки элемента "Вызвать веб сервис"


Настройки элемента "Задание-сценарий":

Поделиться

1 комментарий

ICompositeObjectList представляет собой массив элементов ICompositeObject. Перебирается обычным циклом (foreach).
ICompositeObject - dictionary (ключ-значение).
Получить значение можно одним из 2х методов:
 

/// <summary>Returns inner value by key.</summary>
    /// <param name="key">The key.</param>
    /// <param name="valueType">Type of the value.</param>
    /// <param name="value">Result value.</param>
    bool TryGetValue(string key, Type valueType, out object value);
 
    /// <summary>Returns inner value by key.</summary>
    /// <typeparam name="TValueType">The type of the value.</typeparam>
    /// <param name="key">The key.</param>
    /// <param name="value">Result value.</param>
    bool TryGetValue<TValueType>(string key, out TValueType value);

 

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