反序列化JSON - 如何忽略根元素?

Nik*_*iou 21 .net c# json.net deserialization

我正在使用一个WCF服务,该服务返回包含在'd'根元素内的JSON结果.JSON响应如下所示:

{"d":[
  {
    "__type":"DiskSpaceInfo:#Diagnostics.Common",
    "AvailableSpace":38076567552,
    "Drive":"C:\\",
    "TotalSpace":134789197824
  },
  {
    "__type":"DiskSpaceInfo:#Diagnostics.Common",
    "AvailableSpace":166942183424,
    "Drive":"D:\\",
    "TotalSpace":185149157376
  }
]}
Run Code Online (Sandbox Code Playgroud)

我不想使用动态类型,我有我的类Diagnostics.Common.DiskSpaceInfo,我想在反序列化时使用.

我正在使用Json.NET(Netwonsoft JSON).

问题是如何告诉它忽略根元素(即'd'元素)并解析其中的内容.

我到目前为止最好的解决方案是使用匿名类型:

DiskSpaceInfo[] result = JsonConvert.DeserializeAnonymousType(json, new
    {
        d = new DiskSpaceInfo[0]
    }).d;
Run Code Online (Sandbox Code Playgroud)

这实际上有效,但我不太喜欢它.还有另外一种方法吗?我想要的是:

DiskSpaceInfo[] result = JsonConvert.Deserialize(json, skipRoot: true);
Run Code Online (Sandbox Code Playgroud)

或类似的东西...

key*_*eyr 19

如果您知道在这种情况下搜索的内容"d"是一个根节点,那么您可以执行以下操作.

JObject jo = JObject.Parse(json);
DiskSpaceInfo[] diskSpaceArray = jo.SelectToken("d", false).ToObject<DiskSpaceInfo[]>();
Run Code Online (Sandbox Code Playgroud)

如果您只是想忽略您不知道的根类,那么您可以使用"@Giu Do"解决方案,只是您可以使用test2.ToObject<DiskSpaceInfo[]>();而不是Console.Write(test2);

        JObject o = JObject.Parse(json);
        if (o != null)
        {
            var test = o.First;
            if (test != null)
            {
                var test2 = test.First;
                if (test2 != null)
                {
                    DiskSpaceInfo[] diskSpaceArray = test2.ToObject<DiskSpaceInfo[]>();
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)