我在Flutter中使用json_serializable将类存储在文件中并从中读取。为了简单起见,我不会在这里发布原始类,但原则是在编写应用程序的一半时,我决定更改变量名"a StupidName";至";名称";。我如何建议代码生成实用程序用键"分配JSON值;"StupidName";,如果它存在于JSON中;name";,但是如果键";name";是否存在将其分配给变量,即在文件的较新版本中?
嘿,我认为您可以为模型中的同一字段提供多个json键注释。
@JsonSerializable()
class Person {
@JsonKey(name: 'name')
@JsonKey(name:'first_name')
final String firstName, lastName;
final DateTime? dateOfBirth;
Person({required this.firstName, required this.lastName, this.dateOfBirth});
factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
Map<String, dynamic> toJson() => _$PersonToJson(this);
}
或者,您可以给json键注释一个显式的fromJson参数一个函数来完全控制该字段如何反序列化
以下是您可以做的:
factory Person.fromJson(Map<String, dynamic> json) {
json['name'] ??= json['aStupidName'];
return _$PersonFromJson(json);
}
基本上,在json转换之前,我们将aStupidName
的数据传输到name
密钥。