Получаю код JSON ниже с веб-сайта; К сожалению, я не могу контролировать или изменять это. Рабочая часть является переменной, поэтому можно добавлять или удалять рабочих. (минимум 1 работник)Попытка десериализации переменной вложенной JSON
Обычно вы ожидаете, что часть WORKERS будет массивом JSON, но, к сожалению, это не так.
{
"confirmed_rewards": "0.00000",
"hashrate": 0,
"payout_history": "0.000000000",
"estimated_rewards": 0.0000000,
"workers": {
"worker.1": {
"alive": true,
"hashrate": 1
},
"worker.2": {
"alive": false,
"hashrate": 0
}
},
"efficiency": "100.00",
"shares": "0",
"rewardType": "4"}
Я пытался десериализацией строки JSON, используя следующие классы:
public class Status
{
public string confirmed_rewards;
public int hashrate;
public string payout_history;
public string estimated_rewards;
public List<Worker> workers;
public string efficiency;
public string shares;
public string rewardType;
}
public class Worker
{
public WorkerStatus Status;
}
public class WorkerStatus
{
public bool alive;
public int hashrate;
}
К сожалению, это просто дает мне ошибку:
Cannot deserialize the current JSON object (e.g. {"name":"value"}) into
type 'System.Collections.Generic.List`1[Worker]' because the type requires a
JSON array (e.g. [1,2,3]) to deserialize correctly.
мне действительно любопытно, если есть хороший способ десериализации этого. Запомнить; число (и имена!) рабочих МОЖЕТ меняться! Так что просто создание hardcoded класса с именем worker.1 не является вариантом.
Вы пробовали изменения определения массив? т. е. вместо «Список работников;» объявлять как «Рабочие [] работники;' –
LB2
Deserialize to map? – fge
@ LB2, который не решит проблему. Проблема i в том, что 'работники' являются объектом, а не массивом. Я рекомендую читать свойства «работников» в словаре, где ключ - это имя экземпляра, а значение - это объект «Рабочий». Это может потребовать создания настраиваемого сериализатора, но не положительного, но я гарантирую, что имеется достаточная информация для решения проблемы в документах json.NET. – evanmcdonnal