【问题标题】:'_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>' in type cast'_InternalLinkedHashMap<String, dynamic>' 不是类型转换中的 'Iterable<dynamic>' 类型的子类型
【发布时间】:2019-03-14 03:57:22
【问题描述】:

我正在尝试同时使用 built_value 和 json_serializable 来解析来自服务器的 json 响应到模型类。

以下是依赖项:

  built_collection: ^4.0.0
  built_value: ^6.1.4
dev_dependencies:
  build_runner: ^1.0.0
  built_value_generator: ^6.1.4
  json_serializable: ^1.4.0

以下是我写的代码

abstract class UserData implements Built<UserData, UserDataBuilder>{

  String get user_first_name;
  String get user_last_name;
  String get user_mobile;
  String get email;
  String get user_type;
  Company get company;
  UserType get type;

  UserData._();
  factory UserData([updates(UserDataBuilder b)]) = _$UserData;
  static Serializer<UserData> get serializer => _$userDataSerializer;

}

abstract class Company implements Built<Company, CompanyBuilder>{

  String get id;

  Company._();
  factory Company([updates(CompanyBuilder b)]) = _$Company;
  static Serializer<Company> get serializer => _$companySerializer;


}


abstract class UserType implements Built<UserType, UserTypeBuilder>{

  String get id;
  UserType._();
  factory UserType([updates(UserTypeBuilder b)]) = _$UserType;
  static Serializer<UserType> get serializer => _$userTypeSerializer;


}

序列化器类代码:

@SerializersFor(const [
  UserData
])

Serializers serializers = _$serializers;

Serializers standardSerializers =
(serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();

以下是我从服务器得到的响应。

{
  "user": {
    "id": "505d27b0-acaa-11e8-b916-21359608417b",
    "email": "example@gmail.com",
    "user_first_name": "Pankaj",
    "user_last_name": "P",
    "user_dob": null,
    "active_status": 1,
    "user_region_id": null,
    "user_base_currency": "USD",
    "user_address": null,
    "is_god_user": 0,
    "is_super_user": 0,
    "profile": null,
    "advanced_search": 0,
    "region": null,
    "company": {
      "id": "24e311f0-acaa-11e8-8750-8de299c7797b",
      "company_name": "SHPR A",
      "company_address": null,
      "company_logo": "",
      "company_constitution": "pvt_ltd",
      "company_email": "shpra@mail.com",
      "state": null,
      "country": null,
      "postal_code": null,
      "date_of_establishment": null,
      "number_of_employees": null,
      "company_turnover": null,
      "vendor_id": null
    },
    "type": {
      "id": "5eeebe55-fdf4-11e7-81f1-ac7ba173bed6",
      "user_type_code": "11",
      "user_type_name": "ADMIN",
      "user_category": "SHIPPER"
    }
  }
}

最后我尝试使用以下代码行解析

serializers.deserializeWith(UserData.serializer, json.decode(response.body))

但是我收到以下错误

failed due to: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>' in type cast

请了解可能导致此问题的原因。

【问题讨论】:

    标签: json dart flutter json-serialization


    【解决方案1】:

    我也遇到了同样的问题,更换

    serializers.deserializeWith(UserData.serializer, json.decode(response.body))
    

    standardSerializers.deserializeWith(UserData.serializer, json.decode(response.body))
    

    【讨论】:

      【解决方案2】:

      堆栈跟踪可以告诉你错误在哪里,所以如果你有一个,它可能会很有用。

      在某些时候,您将Map&lt;String, dynamic&gt; 值分配给类型为Iterable&lt;dynamic&gt; 的变量。这听起来像是 JSON 解码出错了,假设一个列表并获取一个地图。

      所提供的代码中没有任何内容假定 Iterable&lt;dynamic&gt;,因此很可能在 json_serializable 包中出现问题。

      那么,您确定您拥有的 JSON 输入文本是 json_serializable 解码器的正确格式吗? (我不熟悉那个包,所以我只能猜测)。

      【讨论】:

        猜你喜欢
        • 2021-06-19
        • 2020-11-25
        • 2019-01-03
        • 2021-04-03
        • 2019-08-28
        • 2020-03-03
        • 1970-01-01
        • 2021-10-23
        • 2018-12-14
        相关资源
        最近更新 更多