_CastError(类型 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型转换中类型 'Map<String, dynamic>

Posted

技术标签:

【中文标题】_CastError(类型 \'_InternalLinkedHashMap<dynamic, dynamic>\' 不是类型转换中类型 \'Map<String, dynamic>\' 的子类型)【英文标题】:_CastError (type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>' in type cast)_CastError(类型 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型转换中类型 'Map<String, dynamic>' 的子类型) 【发布时间】:2020-03-03 15:14:20 【问题描述】:

我使用 Dart "json_serializable" 包在 Flutter 应用程序中的 Firestore 数据结构下反序列化。


googleBookId: jjl4BgAAQBAJ, 
providers: [
    providerId: 2FA9fULKLLf7VUPPFnFRnv, 
    providerId: 8UYTGUHY7UJS432FVBJRnv
]

下面是要映射的模型类:

@JsonSerializable()
class Book 

  String googleBookId;
  List<Provider> providers;

  Book(this.googleBookId,
  List<Provider> providers)
  : providers = providers ?? <Provider>[];

  factory Book.fromJson(Map<String, dynamic> map) => _$BookFromJson(map);

  Map<String, dynamic> toJson() => _$BookToJson(this);


@JsonSerializable()
class Provider 

  String providerId;

  Provider(this.providerId);

  factory Provider.fromJson(Map<String, dynamic> map) => _$ProviderFromJson(map);

  Map<String, dynamic> toJson() => _$ProviderToJson(this);

反序列化时出现以下错误

_CastError(类型“_InternalLinkedHashMap”不是类型转换中“Map”类型的子类型)

我可以使用任何其他库来反序列化文档吗?

【问题讨论】:

【参考方案1】:

好吧,我不知道你是否知道,但随后firestore 会向你发送Map 而不是 JSON。您正在尝试使用 JSON 序列化程序。 JSON是 Map&lt;String,dynamic&gt; 当 Firestore 发送 Map&lt;dynamic,dynamic&gt;. 所以不能用 parse 为 json。

看看这个https://medium.com/@atul.sharma_94062/how-to-use-cloud-firestore-with-flutter-e6f9e8821b27

【讨论】:

【参考方案2】:

正如other question 中发布的那样,我能够通过编码为 JSON 字符串并在反序列化之前返回 JSON 对象来反序列化 Firestore 文档。

@Chiziaruhoma Ogbonda 感谢您的澄清,它帮助我以其他方式思考,而不是直接绑定到反序列化文档。

【讨论】:

【参考方案3】:

解决方案是使用anyMap 和explicitToJson 属性。

@JsonSerializable(explicitToJson: true, anyMap: true)
class Book 


【讨论】:

以上是关于_CastError(类型 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型转换中类型 'Map<String, dynamic>的主要内容,如果未能解决你的问题,请参考以下文章

CastError:模型“用户”的路径“_id”处的值“未定义”转换为 ObjectId 失败

CastError:路径“_id”处的值“”转换为 ObjectId 失败

MongooseError [CastError]:模型“List”的路径“_id”的值“ name:'C'”转换为 ObjectId 失败

CastError:在路径“_id”处转换为 ObjectId 失败

CastError:模型“Company”的路径“_id”处的值“...”转换为 ObjectId 失败

CastError:模型“Company”的路径“_id”处的值“...”转换为 ObjectId 失败