我在Flutter中使用json_serializable将类存储在文件中并从中读回。为了简单起见,我没有在这里发布原始类,但原则是,在编写应用程序的中途,我决定将变量名“aStupidName”更改为“name”。我如何建议代码生成实用程序将JSON值与键“aStupidName”一起分配给变量“name”,如果它存在于JSON中,但如果键“name”存在,则将其分配给变量,即在新版本的文件中?
mfuanj7w1#
嘿,我认为你可以做的是在你的模型中为同一个字段提供多个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 参数,一个函数来完全控制如何反序列化该字段
nkkqxpd92#
你可以这样做:
factory Person.fromJson(Map<String, dynamic> json) { json['name'] ??= json['aStupidName']; return _$PersonFromJson(json); }
基本上,在json转换之前,我们将aStupidName的数据传输到name键。
aStupidName
name
hmmo2u0o3#
您可以修改文件并替换旧的对象名称。例如,您可以使用sed来执行此操作
sed -i 's/{OLD_TERM}/{NEW_TERM}/g' {file}
3条答案
按热度按时间mfuanj7w1#
嘿,我认为你可以做的是在你的模型中为同一个字段提供多个json键注解。
或者,您可以为json键注解提供一个显式的 fromJson 参数,一个函数来完全控制如何反序列化该字段
nkkqxpd92#
你可以这样做:
基本上,在json转换之前,我们将
aStupidName
的数据传输到name
键。hmmo2u0o3#
您可以修改文件并替换旧的对象名称。例如,您可以使用sed来执行此操作