_CastError (тип '_InternalLinkedHashMap'не является подтипом типа' Карта'в типе литья) - PullRequest
0 голосов
/ 07 ноября 2019

Я использую пакет Dart "json_serializable" для десериализации ниже структуры данных Firestore в приложении Flutter.

{
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);
}

При десериализации Iполучаю следующую ошибку

_CastError (тип '_InternalLinkedHashMap' не является подтипом типа 'Map' в приведении типа)

Есть ли какая-либо другая библиотека, которую я могу использовать для десериализациидокумент?

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Хорошо, я не знаю, знаете ли вы, но тогда Firestore отправляет вам карту, а не JSON. Вы пытаетесь использовать JSON Serializer. Json Map<String,dynamic>, а firestore отправляет Map<dynamic,dynamic>. Так что вы не можете использовать парсинг как json.

Проверьте это https://medium.com/@atul.sharma_94062/how-to-use-cloud-firestore-with-flutter-e6f9e8821b27

0 голосов
/ 08 ноября 2019

Как опубликовано в другой вопрос Мне удалось десериализовать документ Firestore путем кодирования в строку JSON и обратно в объект JSON перед десериализацией.

@ Chiziaruhoma Ogbonda спасибо за разъяснения, это помогает мне думать иначе, напрямую связывая процесс десериализации документа.

...