【发布时间】:2021-06-18 09:55:37
【问题描述】:
我在阅读根元素的子元素和理解我在下面的 JSON 中出错的地方时遇到问题:
{
"001": {
"peers": [
{
"id": 0,
"server": "1.1.1.1:80",
"name": "1.1.1.1:80",
"backup": false,
"weight": 1,
"state": "up",
"active": 0,
"requests": 0,
"responses": {
"1xx": 0,
"2xx": 0,
"3xx": 0,
"4xx": 0,
"5xx": 0,
"total": 0
},
"sent": 0,
"received": 0,
"fails": 0,
"unavail": 0,
"health_checks": {
"checks": 0,
"fails": 0,
"unhealthy": 0
},
"downtime": 0
},
{
"id": 1,
"server": "127.0.0.1:8888",
"name": "127.0.0.1:8888",
"backup": false,
"weight": 1,
"state": "down",
"active": 0,
"requests": 0,
"responses": {
"1xx": 0,
"2xx": 0,
"3xx": 0,
"4xx": 0,
"5xx": 0,
"total": 0
},
"sent": 0,
"received": 0,
"fails": 0,
"unavail": 0,
"health_checks": {
"checks": 0,
"fails": 0,
"unhealthy": 0
},
"downtime": 0
}
],
"keepalive": 0,
"zombies": 0,
"zone": "001"
},
"002": {
"peers": [
{
"id": 0,
"server": "1.1.1.2:80",
"name": "1.1.1.2:80",
"backup": false,
"weight": 1,
"state": "up",
"active": 0,
"requests": 0,
"responses": {
"1xx": 0,
"2xx": 0,
"3xx": 0,
"4xx": 0,
"5xx": 0,
"total": 0
},
"sent": 0,
"received": 0,
"fails": 0,
"unavail": 0,
"health_checks": {
"checks": 0,
"fails": 0,
"unhealthy": 0
},
"downtime": 0
},
{
"id": 1,
"server": "127.0.0.1:8888",
"name": "127.0.0.1:8888",
"backup": false,
"weight": 1,
"state": "down",
"active": 0,
"requests": 0,
"responses": {
"1xx": 0,
"2xx": 0,
"3xx": 0,
"4xx": 0,
"5xx": 0,
"total": 0
},
"sent": 0,
"received": 0,
"fails": 0,
"unavail": 0,
"health_checks": {
"checks": 0,
"fails": 0,
"unhealthy": 0
},
"downtime": 0
}
],
"keepalive": 0,
"zombies": 0,
"zone": "002"
}
}
我知道我可以将 JSON 传递到 JObject 并通过命名 001 JSON 对象来找到下面的服务器值:
JObject obj = JObject.Parse(jsonResponse);
var h = obj.Value<JObject>("001").Value<JArray>("peers")[0].SelectToken("server").ToString();
但是我想读取根元素的子元素(我认为是对象001 和002),不管它们的名称如何,通过它们查找键“zone”和“keepalive”的值”。我想我可以这样做:
List<JToken> toks = obj.Root.Children().ToList<JToken>();
string output = "";
foreach (JToken token in toks)
{
JProperty prop = (JProperty)token;
output += prop.Value<string>("zone"); // returns nothing
string bla = token.ToString(); //returns 001 and all it's child objects
}
但是输出字符串是空白的。我可以看到,如果我尝试token.ToString(),JToken 对象中有内容,但我似乎无法阅读。
如果我使用 Visual Studio 创建一个反序列化对象,我会得到这个根对象,这让我更加困惑:
public class Rootobject
{
public 001 001 { get; set; }
public 002 002 { get; set; }
}
我做错了什么?任何帮助将不胜感激。
乔恩
【问题讨论】: