我想通过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>
的形式直接访问数据的方法?
答案 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>();