2017-10-20 44 views
0

我想從我返回的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 –

回答

3

您的字符串不是有效的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'。 –

0

結果是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 
    }