我有一个JSON响应(我无法控制),类似于:
{"response":{
"a" : "value of a",
"b" : "value of b",
"c" : "value of c",
...
}}
其中:
最后我需要的是所有值的字符串数组。保留名称是一个奖励(字典?)但我需要按它们出现的顺序浏览值。
你如何使用JSON.NET实现这一目标?
答案 0 :(得分:5)
您可以使用JObject
命名空间中的Newtonsoft.Json.Linq
类将对象反序列化为类似DOM的结构:
public class StackOverflow_10608188
{
public static void Test()
{
string json = @"{""response"":{
""a"" : ""value of a"",
""b"" : ""value of b"",
""c"" : ""value of c""
}}";
JObject jo = JObject.Parse(json);
foreach (JProperty property in jo["response"].Children())
{
Console.WriteLine(property.Value);
}
}
}
答案 1 :(得分:1)
这可行,但不是很漂亮。我相信你可以和JavaScriptSerializer
交换到json.net。
var json = "{\"response\":{\"a\":\"value of a\",\"b\":\"value of b\",\"c\":\"value of c\"}}";
var x = new System.Web.Script.Serialization.JavaScriptSerializer();
var res = x.Deserialize<IDictionary<string, IDictionary<string, string>>>(json);
foreach (var key in res.Keys)
{
foreach (var subkey in res[key].Keys)
{
Console.WriteLine(res[key][subkey]);
}
}
或
Console.WriteLine(res["response"]["a"]);
Console.WriteLine(res["response"]["b"]);
Console.WriteLine(res["response"]["c"]);
输出:
value of a
value of b
value of c