【问题标题】:Read List<double> from Json via Newtonsoft in C#通过 C# 中的 Newtonsoft 从 Json 读取 List<double>
【发布时间】:2019-11-12 08:36:49
【问题描述】:

我想通过 Newtonsoft Json 库读取 JSON 字符串。它适用于任何基本数据类型,但不适用于List&lt;double&gt; 或任何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&lt;double&gt; 的身份直接访问数据?

【问题讨论】:

  • 您能否阐明您想要发生的事情与当前代码发生的事情?我不清楚你在这个问题中寻找什么。 (我个人不会在这里使用插值字符串 - 你没有使用任何插值,这意味着双括号。我也可能使用撇号而不是双引号,最后是 .Replace('\'', '"')。它使JSON 更易于阅读。)
  • 我已经更新了整个问题,因为它现在更有意义了。

标签: c# json


【解决方案1】:

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

'values': [1,2,3]

无论如何,在将字符串更改为数组后,.Value&lt;List&lt;double&gt;&gt;() 会抛出异常,即不能将 JArray 转换为 JToken - 不幸的是我真的不知道,为什么它不起作用。

但是,JToken.ToObject&lt;T&gt; 可以解决问题,它

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

(see the documentation for ToObject)

随行

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

你可以正确地转换数组。

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

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

【讨论】:

  • 非常感谢!在过去的 6 个小时里,我一直在用头撞墙。
猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 2021-01-21
  • 2017-05-23
  • 2018-05-05
  • 1970-01-01
相关资源
最近更新 更多