首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型“_InternalLinkedHashMap<String,dynamic>”不是类型转换中的“List<dynamic>”类型的子类型

类型“_InternalLinkedHashMap<String,dynamic>”不是类型转换中的“List<dynamic>”类型的子类型
EN

Stack Overflow用户
提问于 2021-08-22 10:03:11
回答 2查看 177关注 0票数 0

我正尝试在Dart中反序列化一个非常复杂的JSON,但是我不知道出了什么问题。

当它试图反序列化时,它向我显示了这个错误:“类型'_InternalLinkedHashMap‘不是类型转换中类型'List’的子类型”

有人知道这是怎么回事吗?

下面是我的代码:

Json

代码语言:javascript
复制
{
  "Instytucja": [
    "TypInstytucji": "bank krajowy",
      "PodtypInstytucji": "bank centralny",
      "NrInstytucji": 101,
      "NazwaInstytucji": "Narodowy Bank Polski",
      "SymbolLiterowy": "NBP",
      "DataRozpDzial": "1945-01-15",
      "NIP": 5250008198,
      "IdentyfikatorLEI": "549300K7Z2KT76WQJD18",
      "WWW": "www.nbp.pl",
        "Jendostka": [
        {
          "NrEwidencyjny": "A000001",
          "TypJednostki": "Centrala",
          "NazwaJednostki": "Centrala",
          "SymbolLiterowy": "C-la",
          "DaneAdresowe": {
            "kraj": "POLSKA",
            "wojewodztwo": "MAZOWIECKIE",
            "powiat": "Warszawa",
            "miejscowosc": "Warszawa",
            "ulica": "ul. Świętokrzyska",
            "numerBudynku": "11/21",
            "kodPocztowy": "00-919",
            "poczta": "Warszawa",
            "nrSkrytkiPocztowej": 1011
          },
          "DataPodjeciaDzialalnosci": "1945-01-15",
          "NumerTelefonu": "22 185 10 10",
          "NumerFaksu": "22 185 23 09",
          "NumerRozliczeniowy": [
            {
              "NrRozliczeniowy": 10100000,
              "NazwaNumeru": "Centrala",
              "KodyBIC": [
                "BIC NBPLPLPWXXX",
                "BIC SEPA NBPLPLPWXXX"
              ],
              "DataWygenerowania": "1945-01-15"
            },
            {
              "NrRozliczeniowy": 10100055,
              "NazwaNumeru": "Centrala - B2B Collect",
              "KodyBIC": [
                "BIC NBPLPLPWXXX",
                "BIC SEPA NBPLPLPWXXX"
              ],
              "DataWygenerowania": "2008-04-01"
            },
            {
              "NrRozliczeniowy": 10100068,
              "NazwaNumeru": "Centrala - NBPCollect",
              "KodyBIC": [
                "BIC NBPLPLPWXXX",
                "BIC SEPA NBPLPLPWXXX"
              ],
              "DataWygenerowania": "2008-10-01"
            },
            {
              "NrRozliczeniowy": 10100071,
              "NazwaNumeru": "Centrala - B2B-2",
              "KodyBIC": [
                "BIC NBPLPLPWXXX",
                "BIC SEPA NBPLPLPWXXX"
              ],
              "DataWygenerowania": "2016-08-01"
            }
          ]
        },
  ]
 ]
}

实体

代码语言:javascript
复制
import 'package:equatable/equatable.dart';

abstract class Bank extends Equatable {
  List<Institution> get institutions;
}

abstract class Institution extends Equatable {
  List<Unit> get units;
}

abstract class Unit extends Equatable {
  List<SortNumber> get sortNumbers;
}

abstract class SortNumber extends Equatable {
  int get sortNumber;
}

模型

代码语言:javascript
复制
import 'package:jaki_to_bank/features/home/domain/entities/bank.dart';
import 'package:json_annotation/json_annotation.dart';

part 'bank_model.g.dart';

@JsonSerializable()
class BankModel extends Bank {
  BankModel({required this.institutions});

  factory BankModel.fromJson(Map<String, dynamic> json) => _$BankModelFromJson(json);

  @override
  @JsonKey(name: 'Instytucja')
  final List<InstitutionModel> institutions;

  @override
  List<Object?> get props => [institutions];
}

@JsonSerializable()
class InstitutionModel extends Institution {
  InstitutionModel({required this.units});

  factory InstitutionModel.fromJson(Map<String, dynamic> json) => _$InstitutionModelFromJson(json);

  @override
  @JsonKey(name: 'Jednostka')
  final List<UnitModel> units;

  @override
  List<Object?> get props => [units];
}

@JsonSerializable()
class UnitModel extends Unit {
  UnitModel({required this.sortNumbers});

  factory UnitModel.fromJson(Map<String, dynamic> json) => _$UnitModelFromJson(json);

  @override
  @JsonKey(name: 'NumerRozliczeniowy')
  final List<SortNumberModel> sortNumbers;

  @override
  List<Object?> get props => [sortNumbers];
}

@JsonSerializable()
class SortNumberModel extends SortNumber {
  SortNumberModel({required this.sortNumber});

  factory SortNumberModel.fromJson(Map<String, dynamic> json) => _$SortNumberModelFromJson(json);

  @override
  @JsonKey(name: 'NrRozliczeniowy')
  final int sortNumber;

  @override
  List<Object?> get props => [sortNumber];
}

数据源

代码语言:javascript
复制
import 'dart:convert';

import 'package:flutter/services.dart';
import 'package:jaki_to_bank/core/app/files.dart';
import 'package:jaki_to_bank/features/home/data/models/bank_model.dart';
import 'package:jaki_to_bank/features/home/domain/entities/bank.dart';

abstract class BanksDataSource {
  Future<Bank> getBanksList();
}

class BanksDataSourceImpl extends BanksDataSource {
  @override
  Future<Bank> getBanksList() async {
    final String source = Files.banks;

    final String banks = await rootBundle.loadString(source);
    final Map<String, dynamic> banksMap = jsonDecode(banks);

    return BankModel.fromJson(banksMap);
  }
}

堆栈跟踪

EN

回答 2

Stack Overflow用户

发布于 2021-08-23 07:07:55

您的JSON格式不正确。

代码语言:javascript
复制
{
  "Instytucja": [
    {      <-- missing this
      "TypInstytucji": "bank krajowy",
      "PodtypInstytucji": "bank centralny",
      ...
    }
  ]
}
票数 1
EN

Stack Overflow用户

发布于 2021-08-22 14:13:09

尝试将@JsonSerializable(explicitToJson: true)添加到您的InstitutionModel (以及任何有嵌套类的地方),然后运行:

代码语言:javascript
复制
flutter pub run build_runner build --delete-conflicting-outputs

有关更多信息,请查看flutter.dev:https://flutter.dev/docs/development/data-and-backend/json?fbclid=IwAR2sA4lF5zRGneFH4KAqtYLLQXKF6dJqJ8QzmuY-NuEe-hiRPDUx5eNfRa8#generating-code-for-nested-classes

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68880273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档