我想用Newtonsoft Json.NET解析一段JSON
JSON :
[{
"type": "switchStatus",
"Data" :[
{
"ID" : "1",
"value" : "2.5"
},
{
"ID" : "2",
"value" : "4.2"
}
],
"Datetime": "2014-12-01",
"customerID": "50"
}]
类:
public class Account
{
[JsonProperty("type")]
public string Type { get; set; }
public List<Data> Data { get; set; }
[JsonProperty("Datetime")]
public string DateTime { get; set; }
[JsonProperty("customerID")]
public string CustomerId { get; set; }
}//Account
public class Data
{
[JsonProperty("ID")]
public string Id { get; set; }
[JsonProperty("value")]
public string Value { get; set; }
}
解析:
Account account = JsonConvert.DeserializeObject<Account>(message);
错误:
无法将当前JSON数组(例如[1,2,3])反序列化为类型“JSonParser.Account”,因为该类型需要JSON对象(例如{“name”:“value”})才能正确反序列化。 / p>
要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList)可以从JSON数组反序列化的列表。 JsonArrayAttribute也可以添加到类型中,以强制它从JSON数组反序列化。
路径'',第1行,第1位。
答案 0 :(得分:5)
您的问题是您的JSON与您声明的类不匹配。具体来说,您的Data
属性不是List<string>
,它是一个复杂的对象。
你的课应该是这样的:
public class Data
{
[JsonProperty("ID")]
public int Id { get; set; }
[JsonProperty("value")]
public double Value { get; set; }
}
public class Account
{
[JsonProperty("type")]
public string Type { get; set; }
public List<Data> Data { get; set; }
[JsonProperty("Datetime")]
public string DateTime { get; set; }
[JsonProperty("customerID")]
public int CustomerId { get; set; }
}
修改强>
当您编辑JSON时,现在很清楚您需要一个List<Account>
,而不是一个。{1}}。反序列化时,您需要:
List<Account> accounts = JsonConvert.DeserializeObject<List<Account>>(message);
答案 1 :(得分:1)
您不能像这样反序列化数据数据属性。由于列表不是一个开头的字符串。
尝试:
public class Data
{
public int ID { get; set; }
public float value { get; set; }
}//Data
public class Account
{
public string type { get; set; }
public List<Data> Data { get; set; }
public string Datetime { get; set; }
public string customerID { get; set; }
}//Account