遍历JSON响应Newtonsoft.JSON.Linq.JObject C#



我不想创建一个类来取消对响应的序列化,因为将来可能会有所不同。

我尝试了几种方法来访问我想要的数据,但我真的不知道如何访问json响应中的项目。

obj {{
"type": "regular",
"response": {
"usable": [
{
"id": "897",
"name": "John Doe",
"owner": {
"id": "2",
"username": "jdoe",
"firstname": "john",
"lastname": "doe"
}
},
{
"id": "657",
"name": "Karen Whiner",
"owner": {
"id": "3",
"username": "kwhiner",
"firstname": "karen",
"lastname": "whiner"
}
},
},
"error_code": 0,
"error_msg": "",
"warnings": [],
"timestamp": 74772822
}}

我需要什么:

控制台.WriteLine:

id:897-名称:john doe-用户名:jdoe
id:657-名称:Karen Whiner-用户名:kwhiner

我尝试过的:

var jsonString = await result.Content.ReadAsStringAsync();
var obj = JsonConvert.DeserializeObject<object>(jsonString);

DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(jsonString);
DataTable dataTable = dataSet.Tables["response"];
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine(row["id"] + " - " + row["name"]);
}
---

JObject stuff = JObject.Parse(jsonString);
foreach (JProperty rate in stuff)
{
Console.WriteLine(rate.Name + ": " + rate.Value);
}

有什么建议吗?

谢谢

首先,您发布的json是不对的。。但我认为这与复制/粘贴和失效有关。

你有不同的选项,但如果你想进行动态/对象反序列化,你可以这样做来打印其中一行。

var obj = JsonConvert.DeserializeObject<dynamic>(text);
var usableList = obj["response"]["usable"];
Console.WriteLine($"id: {usableList[0]["id"]} - name: {usableList[0]["name"]} - username: {usableList[0]["owner"]["username"]}");
//prints
id: 897 - name: John Doe - username: jdoe

我建议创建一个类,将json反序列化为。这样,您就可以使用Linq和for循环来遍历所有可用列表。

public class Rootobject
{
public string type { get; set; }
public Response response { get; set; }
public int error_code { get; set; }
public string error_msg { get; set; }
public object[] warnings { get; set; }
public int timestamp { get; set; }
}
public class Response
{
public Usable[] usable { get; set; }
}
public class Usable
{
public string id { get; set; }
public string name { get; set; }
public Owner owner { get; set; }
}
public class Owner
{
public string id { get; set; }
public string username { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }
}
// and deserialization and printing would be like this,
var obj = JsonConvert.DeserializeObject<Rootobject>(text);
foreach (var item in obj.response.usable)
{
Console.WriteLine($"id: {item.id} - name: {item.name} - userid: {item.owner.username}");
}
// prints:
id: 897 - name: John Doe - userid: jdoe
id: 657 - name: Karen Whiner - userid: kwhiner

最新更新