将jsonstring转换为对象c#

问题描述:

我想从我返回的api jsonstring中获取数据。将jsonstring转换为对象c#

我的结果字符串看起来像

[ 
{"Id":12,"name":"testname","type":"testtype"} 
{"Id":12,"name":"testname","type":"testtype"} 
{"Id":12,"name":"testname","type":"testtype"} 
] 

我怎样才能提取此数据到C#对象

我只能做到这一点的人

var obj = JObject.Parse(result); 
    var ID = (int)obj["Id"]; 
    var Name = (String)obj["name"]; 
    var type = (String)obj["type"]; 

User u = new User(ID,Name,Type); 
+0

你的“结果字符串”不是有效的JSON。至少不是有效的对象或集合,而是一个接一个地存在三个对象。我不认为Json解析器将能够处理这种响应。 – madd0

+0

你**结果**是json –

您的字符串不是有效的JSON,所以使其有效JSON是快速处理它的第一步。最容易做的事情是让一个JSON阵列:

string jsonArray = "[" 
        + string.Join(", ", json.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) 
        + "]"; 

从那时起,它是简单的(见我的相关答案:Easiest way to parse JSON response):

var result = JsonConvert.DeserializeObject<User[]>(jsonArray); 

另一种选择是自己分裂线,并手动解析并添加项目到列表。

+0

的数组,但你如何循环结果?所以我可以把它们放在我的对象中 –

+0

在结果上使用'foreach'。 –

结果是JSON数组..所以循环和解析

list<User> userList = new list<User>(); 

    for(int i=0 ; i <result.length; i++) 
    { 
     var obj = JObject.Parse(result[i]); 
     var ID = (int)obj["Id"]; 
     var Name = (String)obj["name"]; 
     var type = (String)obj["type"]; 

     User u = new User(ID,Name,Type); //create User 

     userList.add(u);     //Add to list 
    }