如何反序列化使用未指定和可变属性名称的 JSON 对象
本文关键字:属性 对象 JSON 反序列化 未指定 | 更新日期: 2023-09-27 18:34:11
我有一个类似于这样的JSON响应(我无法控制):
{"response":{
"a" : "value of a",
"b" : "value of b",
"c" : "value of c",
...
}}
哪里:
- "A"、"B"、"C"是前面的未知名称。
- 项目的数量可能会有所不同。
最后我所需要的只是一个所有值的字符串数组。保留名称是一个奖励(字典?),但我需要按它们出现的顺序浏览值。
您将如何使用 JSON.NET 实现这一目标?
可以使用
Newtonsoft.Json.Linq
命名空间中的 JObject
类将对象反序列化为类似 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);
}
}
}
这有效,但不是很漂亮。我相信你可以和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