【问题标题】:Ignoring cast fail from JSArray to List<String>忽略从 JSArray 到 List<String> 的强制转换失败
【发布时间】:2018-08-15 08:51:19
【问题描述】:

我从 api 接收带有字符串数组的 json。然后我将其设置为 List 类型的局部变量。

if (json['x'] is List) {
  List<String> x = json['x'];
  print(x);
}

当我运行应用程序时,Chrome 向我显示警告:“Ignoring cast failed from JSArray to List”

我该怎么办?


  • Angular 5.0.0-alpha+6
  • 铬 63.0.3239.132
  • Dart 虚拟机版本:2.0.0-dev.32.0

【问题讨论】:

  • 我认为这是来自 DDC,对吧? Dart2 的 dar2js 正在进行中。我想只有在此处也显示警告时才有意义。另见github.com/dart-lang/sdk/blob/…

标签: angular dart


【解决方案1】:

JSON 将所有数组编码为 List&lt;dynamic&gt;,因为这是规范。

如果您想将某些内容强制转换为 List&lt;String&gt;,则不能像在 Dart 2 中那样仅依赖隐式强制转换。您必须使用真实类型:

List x = json['x'];

或者使用.cast函数:

var x = (json['x'] as List).cast<String>();

我意识到这比以前写得更多。如果您不喜欢这里的样板,您可能需要查看 JSON 序列化包,例如 json_serializablebuilt_value

【讨论】:

    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2020-06-02
    • 2012-06-25
    相关资源
    最近更新 更多