Синтаксическая проблема определения JsonConvert.DeserializeAnonymousType - PullRequest
0 голосов
/ 19 марта 2019

У меня есть следующий код:

var definition = new { result = "", accountinformation = new[] { "" ,  "" , "" } };

var accountInformationResult = JsonConvert.DeserializeAnonymousType(responseBody, definition);

Структура информации об учетной записи возвращается из конечной точки в виде массива, причем каждый элемент является другим массивом, содержащим 3 строки.Таким образом, встроенный массив не находится в формате пары ключ-значение.С приведенным выше определением accountinformation возвращает null.Какой должен быть синтаксис для этой структуры?

Для справки, это то, что происходит в конечной точке php.

$account_information[] = array( $billing_company, $customer_account_number, $customer_account_manager );

Эта первая строка находится в цикле.Отсюда и многомерный массив.

echo json_encode(array('result'=>$result, 'account_information'=>$account_information));

Я знаю, что могу использовать динамический, но зачем дополнительные усилия?

1 Ответ

0 голосов
/ 19 марта 2019

Полагаю, ваш json будет выглядеть примерно так:

{
  "result": "the result",
  "account_information": [
    ["company1", "account_number1", "account_manager1"],
    ["company2", "account_number2", "account_manager2"]
  ]
}

В этом случае вы сможете выполнить десериализацию со следующим определением (обратите внимание на подчеркивание в account_information:

var definition = new { result = "", account_information = new List<string[]>() };

В json вы можете добавлять дополнительные свойства по своему усмотрению при изменении модели данных. Поэтому, если вы определите модель данных, которая не включает одно из этих свойств, это свойство будет просто проигнорировано. В вашем случае определение не имеет свойства с именем account_information (точно), поэтому эта часть json игнорируется при десериализации.

EDIT: В любом случае, если это будет анонимный объект, вы можете также рассмотреть синтаксический анализ в JObject:

var obj = JObject.Parse(responseBody);
string firstCompany = obj["account_information"][0][0];
string secondCompany = obj["account_information"][1][0];
...