Модели сопоставления в формате json со списком вложенных моделей внутри

#json #flutter #dart #jsonconvert

#json #flutter #dart #jsonconvert

Вопрос:

Я новичок в разработке flutter и пытаюсь преобразовать модель в строку json для передачи в вызов api.

когда я пытаюсь использовать RegistrationRequest.Функция toJSON Я получаю эту ошибку

 type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'
 

Я предполагаю, что он не может правильно преобразовать список пользовательских изображений и не совсем уверен, как это сделать. Любая помощь будет высоко оценена

здесь я вызываю функцию

 var serialisedBodycom = RegistrationRequest.toJson();
      var serialisedBody = jsonEncode(serialisedBodycom);
 

у меня есть модель под названием
Запрос на регистрацию

     import 'UserGender.dart';
import 'UserImage.dart';

class RegistrationRequest {
  String email;
  String password;
  String msisdn;
  UserGender gender;
  UserGender matchGender;
  List<UserImage> userImages;

  RegistrationRequest(
      {this.email,
      this.password,
      this.msisdn,
      this.gender,
      this.matchGender,
      this.userImages});
  RegistrationRequest.Empty();

  RegistrationRequest.fromJson(Map<String, dynamic> json)
      : email = json['email'],
        password = json['password'],
        msisdn = json['msisdn'],
        gender = json['gender'],
        matchGender = json['matchGender'],
        userImages = json['userImages'];

  Map<String, dynamic> toJson() {
    return {
      'email': email ?? '',
      'password': password ?? '',
      'MSISDN': msisdn ?? '',
      'Gender': gender ?? UserGender.Unknown,
      'MatchGender': matchGender ?? UserGender.Unknown,
      'UserImages': userImages ?? new List<UserImage>()
    };
  }
}
 

который содержит список пользовательских изображений

     class UserImage {
  String base64;
  String fileName;
  bool isMainProfilePicture;
  String contentType;

  UserImage(
      this.base64, this.fileName, this.isMainProfilePicture, this.contentType);
  UserImage.Empty();
  UserImage.fromJson(Map<dynamic, dynamic> json)
      : base64 = json['base64'],
        fileName = json['fileName'],
        isMainProfilePicture = json['isMainProfilePicture'],
        contentType = json['contentType'];

  Map<dynamic, dynamic> toJson() => {
        'base64': base64,
        'fileName': fileName,
        'isMainProfilePicture': isMainProfilePicture,
        'contentType': contentType
      };
}
 

Ответ №1:

окончательный ответ, который я придумал, заключается в следующем

 RegistrationRequest.fromJson(Map<String, dynamic> json) => RegistrationRequest(
        email: json["email"],
        password: json["password"],
        msisdn: json["msisdn"],
        gender: json["gender"],
        matchGender: json["matchGender"],
        userImages: List<UserImage>.from(json["userImages"].map((x) => UserImage.fromJson(x))),
    );

    Map<String, dynamic> toJson() => {
        "email": email,
        "password": password,
        "msisdn": msisdn,
        "gender": gender,
        "matchGender": matchGender,
        "userImages": List<dynamic>.from(userImages.map((x) => x.toJson())),