收到的数据是这样的:
在每个项目中,有一个对象customer
,我有一个相同的类。如何使用Json.net转换它们?
我尝试了以下内容:
var data = JsonConvert.DeserializeObject<List<customer>>(val);
并添加另一个类:
public class customerJson
{
public Customer customer{ get; set; }
}
试图反序列化它:
var data = JsonConvert.DeserializeObject<List<customerJson>>(val);
他们两个都得到了例外:
无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Collections.Generic.List`1 [customer]',因为该类型需要JSON数组(例如[1,2] ,3])正确反序列化。 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。 路径'rows',第1行,第8位。
数据:
{"rows":[{"id":"232333","name":"nam"},{"id":"3434444","name":"2ndName"}]}
答案 0 :(得分:7)
如果我正确地读了你的json数据结构,你会想要这个:
public class Root
{
public List<Customer> rows { get; set; }
}
和
var data = JsonConvert.DeserializeObject<Root>(val);
经过测试的代码:
void Main()
{
var test = JsonConvert.DeserializeObject<Root>("{\"rows\":[{\"id\":\"232333\",\"name\":\"nam\"},{\"id\":\"3434444\",\"name\":\"2ndName\"}]}");
Console.WriteLine(test.rows[0].id); // prints 232333
}
public class Customer
{
public int id { get; set; }
}
public class Root
{
public List<Customer> rows { get; set; }
}
答案 1 :(得分:1)
以防万一仍然有人遇到问题。这对我来说很有效:
如果Json看起来像这样:
"result": [
{
"firstname": "John",
"lastname": "Doe",
},
{
"firstname": "Max",
"lastname": "Mustermann",
}
]
ResultList.cs
public class ResultList {
[JsonProperty("result")]
public List<ResultObj> ResultObj { get; set }
}
ResultObj.cs
public class ResultObj {
[JsonProperty("firstname")]
public string FirstName { get; set; }
[JsonProperty("lastname")]
public string LastName{ get; set; }
}
最后:
using Newtonsoft.Json;
var resultList = JsonConvert.DeserializeObject<ResultList>(jsonString);
答案 2 :(得分:0)
.as-console-wrapper { min-height: 100%!important; top: 0; }
它不是一个有效的 Json