Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何反序列化使用未指定和变量属性名的JSON对象_C#_Json.net - Fatal编程技术网

C# 如何反序列化使用未指定和变量属性名的JSON对象

C# 如何反序列化使用未指定和变量属性名的JSON对象,c#,json.net,C#,Json.net,我有一个类似以下内容的JSON响应(我无法控制): {"response":{ "a" : "value of a", "b" : "value of b", "c" : "value of c", ... }} 其中: “a”、“b”、“c”是事先未知的名称 项目的数量可能会有所不同 最后我只需要一个字符串数组来表示所有的值。保留这些名称是一个额外的好处(字典?),但我需要按它们出现的顺序浏览值 您将如何使用JSON.NET实现这一点 您可以使用Newtonsoft.Js

我有一个类似以下内容的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]);
    }
}
输出:

value of a
value of b
value of c

为什么不能直接使用
JavaScriptSerializer
?在这种情况下不需要第三方工具:)请参阅不要定义
Blah
类,或者将其用于反序列化。哦,Blah类是不需要的。我会删除它。
value of a
value of b
value of c