我已使用此build.yaml
配置允许将嵌套对象解析为 json:
targets:
$default:
builders:
json_serializable:
options:
explicit_to_json: true
它似乎确实有效,因为toJson
嵌套对象工作正常。然后我尝试使用https://pub.dev/packages/json_serializable从 json 创建一个类实例:
@override
UserRegistrationEntity getUserRegistration() {
final json = Map<String, dynamic>.from(
localDataSource.get(keyToRead: UserRegistrationFieldNames.self) ??
<String, dynamic>{});
return UserRegistrationEntity.fromJson(json); <===== ERROR ON THIS LINE
}
我得到了这个例外:
抛出异常:类型 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型转换中类型 'Map<String, dynamic>' 的子类型
这是 的值json
:
红色覆盖的值是字符串。当user_credential_entity.password
anduser_credential_entity.emailAddress
是null
时,没有错误。
我认为这是因为它user_credential_entity
是一个嵌套的 JsonSerializable 对象。但是toJson
有效,但fromJson
没有。
父类:
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);
子类:
@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);
错误所在的实际代码行在这里:
的值json['userCredentialEntity']
不是 aMap<String, dynamic>
吗?有点像我。