我从网站上获取以下JSON代码; 不幸的是我无法控制或改变这一点。 工人部分是可变的,因此可以添加或删除工人。 (最少1名工人)
您通常希望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.
如果有一种很好的反序列化方法,我真的很好奇。 记得;工人的数量(和名字!)可以改变!所以只是制作一个名为worker.1的硬编码类不是一种选择。
答案 0 :(得分:2)
由于worker.n
不是有效的媒体资源名称且可以随工作人员数量而变化,因此将工作人员声明为Dictionary<string, Worker>
var workers = JsonConvert.DeserializeObject<Status>(json);
public class Worker
{
public bool alive { get; set; }
public int hashrate { get; set; }
}
public class Status
{
public string confirmed_rewards { get; set; }
public int hashrate { get; set; }
public string payout_history { get; set; }
public double estimated_rewards { get; set; }
public Dictionary<string, Worker> workers { get; set; }
public string efficiency { get; set; }
public string shares { get; set; }
public string rewardType { get; set; }
}
答案 1 :(得分:0)
Status datalist = JsonConvert.DeserializeObject<Status>(jsonstring);
你需要让你的工作者成为一个字典
public Dictionary<string, Worker> workers { get; set; }
这是使用Newtonsoft.Json