I have used this build.yaml config to allow nested objects to be parsed to json:
targets: $default: builders: json_serializable: options: explicit_to_json: true It definitely seems to have worked as the toJson with nested objects works fine. Then I'm trying to create a class instance from json with https://pub.dev/packages/json_serializable:
@override UserRegistrationEntity getUserRegistration() { final json = Map<String, dynamic>.from( localDataSource.get(keyToRead: UserRegistrationFieldNames.self) ?? <String, dynamic>{}); return UserRegistrationEntity.fromJson(json); <===== ERROR ON THIS LINE } I'm getting this exception:
Thrown exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>' in type cast
This is the value of json:
The red covered values are strings. When the user_credential_entity.password and user_credential_entity.emailAddress are null, there is no error.
I think it's because user_credential_entity is a nested JsonSerializable object. However toJson works, but fromJson doesn't.
the parent class:
part 'user_registration_entity.g.dart'; @JsonSerializable() class UserRegistrationEntity implements IEntity<UserRegistrationEntity> { UserRegistrationEntity( {this.nickName, this.emailAddress, this.confirmEmailAddress, this.password, this.confirmPassword, this.userCredentialEntity}); factory UserRegistrationEntity.fromJson(Map<String, dynamic> json) => _$UserRegistrationEntityFromJson(json); String nickName; String emailAddress; String confirmEmailAddress; String password; String confirmPassword; UserCredentialEntity userCredentialEntity; Map<String, dynamic> toJson() => _$UserRegistrationEntityToJson(this); the child class:
@JsonSerializable() class UserCredentialEntity implements IEntity<UserCredentialEntity> { UserCredentialEntity({this.password, this.emailAddress}); factory UserCredentialEntity.fromJson(Map<String, dynamic> json) => _$UserCredentialEntityFromJson(json); String password; String emailAddress; Map<String, dynamic> toJson() => _$UserCredentialEntityToJson(this); The actual line of code the error is on is here:
Is the value of json['userCredentialEntity'] not a Map<String, dynamic>? Kinda looks like one to me.


没有评论:
发表评论