在C#中通过Newtonsoft从Json读取List <double>

时间:2019-11-12 08:36:49

标签: c# json

我想通过Newtonsoft Json库读取JSON字符串。它适用于任何基本数据类型,但不适用于List<double>或任何List

测试应用程序如下所示:

static void main()
{
  string jsonString = @"
            {
                'name': 'set1',
                'Xvv': {
                         'parameter': 'hByT',
                         'values': '[1,2,3]'
                    }
            }";
  JObject Json = JObject.Parse(jsonString);

  var name = Json["name"].ToString();
  var data = Json["Xvv"]["values"].Value<List<double> >(); // Raises error
}

最后一行抛出以下异常:

  

System.InvalidCastException:从'System.String'到'System.Collections.Generic.List

的无效转换

是否有一种以List<double>的形式直接访问数据的方法?

1 个答案:

答案 0 :(得分:1)

在您提供的示例JSON中,values是一个字符串。正确的JSON数组应该是

'values': [1,2,3]

无论如何,将字符串更改为数组后,.Value<List<double>>()会引发异常,即无法将JArray强制转换为JToken-不幸的是,我真的不知道,为什么不起作用。

但是,JToken.ToObject<T>可以解决问题,

  

从JToken创建指定.NET类型的实例

see the documentation for ToObject

一行

var data = Json["Xvv"]["values"].ToObject<List<double>>();

您可以正确转换数组。

如果IEnumerable也适合您,您也可以使用

var data = Json["Xvv"]["values"].Values<double>();