4

UserCityの 2 つのモデルがあるとします。

@JsonSerializable()
class User {
    int id;
    String name;
    City? city;
    List<Map<String, City>>? listMapCity;

}

@JsonSerializable()
class City {
   int id;
   String name;
}

ここで、API 呼び出し中にユーザー モデルを取得したとしますが、都市オブジェクト モデルではnameではなくidのみを取得します。このようなもの

{
    "id": 5,
    "name": "Matthew",
    "city": {
        "id": 12
    }
}

ただし、json_serializable と json_annotation のデフォルトの性質によります。この JSON は User モデルにマップされません。マッピング中に例外がスローされます。
Null 型は String 型のサブタイプではありません。(ここでは都市オブジェクトにnameキーがないため)

しかし、City がオプションであることを User オブジェクトで既に宣言したので、City と listMapCity が null である User JSON を解析する必要がありまし

どんな助けや解決策も本当に感謝しています、ありがとう

4

1 に答える 1

1

JsonSerializableUserクラスにデフォルトのコンストラクターが必要です。次に、namenullable にする必要がある場合は、nullable で宣言しますString? name;

更新された User クラスは次のとおりです。

import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart';

@JsonSerializable()
class User {
  int id;
  String name;
  City? city;
  List<Map<String, City>>? listMapCity;

  User({required this.id, required this.name, this.city, this.listMapCity});

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

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

@JsonSerializable()
class City {
  int id;
  String name;
  City({required this.id, required this.name});
}
于 2021-11-17T04:09:41.723 に答える