我有一个像这样的json块:
{
    "ADDRESS_MAP":{
        "ADDRESS_LOCATION":{
            "type":"separator",
            "name":"Address",
            "value":"",
            "FieldID":40
        },
        "LOCATION":{
            "type":"locations",
            "name":"Location",
            "keyword":{
                "1":"LOCATION1"
            },
            "value":{
                "1":"United States"
            },
            "FieldID":41
        },
        "FLOOR_NUMBER":{
            "type":"number",
            "name":"Floor Number",
            "value":"0",
            "FieldID":55
        },
        "self":{
            "id":"2",
            "name":"Address Map"
        }
    }
}
如何获取此令牌包含的所有关键项.例如,从上面的代码我想要"ADRESS_LOCATION","LOCATION","FLOOR_NUMBER"和"self".
谢谢
Bri*_*ers 56
您可以将您转换JToken为a JObject,然后使用该Properties()方法获取对象属性的列表.从那里,你可以很容易地得到名字.
像这样的东西:
string json =
@"{
    ""ADDRESS_MAP"":{
        ""ADDRESS_LOCATION"":{
            ""type"":""separator"",
            ""name"":""Address"",
            ""value"":"""",
            ""FieldID"":40
        },
        ""LOCATION"":{
            ""type"":""locations"",
            ""name"":""Location"",
            ""keyword"":{
                ""1"":""LOCATION1""
            },
            ""value"":{
                ""1"":""United States""
            },
            ""FieldID"":41
        },
        ""FLOOR_NUMBER"":{
            ""type"":""number"",
            ""name"":""Floor Number"",
            ""value"":""0"",
            ""FieldID"":55
        },
        ""self"":{
            ""id"":""2"",
            ""name"":""Address Map""
        }
    }
}";
JToken outer = JToken.Parse(json);
JObject inner = outer["ADDRESS_MAP"].Value<JObject>();
List<string> keys = inner.Properties().Select(p => p.Name).ToList();
foreach (string k in keys)
{
    Console.WriteLine(k);
}
输出:
ADDRESS_LOCATION
LOCATION
FLOOR_NUMBER
self
Ian*_*Ian 30
除了接受的答案,我想给出一个答案,说明如何直接在Newtonsoft集合上进行迭代.它使用较少的代码,我猜它更有效,因为它不涉及转换集合.
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
//Parse the data
JObject my_obj = JsonConvert.DeserializeObject<JObject>(your_json);
foreach (KeyValuePair<string, JToken> sub_obj in (JObject)my_obj["ADDRESS_MAP"])
{
    Console.WriteLine(sub_obj.Key);
}
我自己开始这样做是因为JsonConvert自动将嵌套对象反序列化为JToken(我认为它是JObject,JValue或JArray).
我认为解析按照以下原则工作:
每个对象都被抽象为JToken
转换到您期望词典的JObject
如果JToken表示终端节点并且是值,则转换为JValue
如果它是一个数组,则转换为JArray
JValue.Value为您提供所需的.NET类型
| 归档时间: | 
 | 
| 查看次数: | 96820 次 | 
| 最近记录: |