為什么需要自定義注解?
json_serializable說到底只是一個自動化生成Model類序列號和反序列化代碼的插件黎茎。
默認(rèn)配置生成的代碼可能不符合我們的要求,比如我們會要求非空值;
比如我們會制定某個屬性的key值;
官方給出的自定義注解的三種方式
- Set properties on @JsonSerializable. 給@JsonSerializable設(shè)置屬性
- Add a @JsonKey annotation to a field and set properties there. 添加@JsonKey
- Add configuration to build.yaml 在yaml中統(tǒng)一配置
以要求value值不能為空為例
讓我們分別以以上三種方式完成自定義注解
- @JsonSerializable(nullable: false)
- @JsonKey(nullable: true)
- 在yaml文件中配置
targets:
$default:
builders:
json_serializable:
options:
# Options configure how source code is generated for every
# `@JsonSerializable`-annotated class in the package.
#
# The default value for each is listed.
nullable: true
第二個例子
指定key值
@JsonSerializable()
class User {
String login;
}
當(dāng)我們使用默認(rèn)配置時,生成的.g.dart文件是
User _$UserFromJson(Map<String, dynamic> json) {
return User()
..login = json['login'] as String
}
Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
'login': instance.login,
}
當(dāng)我們使用Jsonkey自定義時翻翩,生成的.g.dart文件則是
User _$UserFromJson(Map<String, dynamic> json) {
return User()
..login = json['isLogin'] as String
}
Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
'isLogin': instance.login,
}