Flutter json_serializable what if key可以有不同的名称

amrnrhlw  于 2023-06-24  发布在  Flutter
关注(0)|答案(3)|浏览(131)

我在Flutter中使用json_serializable将类存储在文件中并从中读回。为了简单起见,我没有在这里发布原始类,但原则是,在编写应用程序的中途,我决定将变量名“aStupidName”更改为“name”。我如何建议代码生成实用程序将JSON值与键“aStupidName”一起分配给变量“name”,如果它存在于JSON中,但如果键“name”存在,则将其分配给变量,即在新版本的文件中?

mfuanj7w

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 参数,一个函数来完全控制如何反序列化该字段

nkkqxpd9

nkkqxpd92#

你可以这样做:

factory Person.fromJson(Map<String, dynamic> json) {
  json['name'] ??= json['aStupidName'];
  
  return _$PersonFromJson(json);
}

基本上,在json转换之前,我们将aStupidName的数据传输到name键。

hmmo2u0o

hmmo2u0o3#

您可以修改文件并替换旧的对象名称。例如,您可以使用sed来执行此操作

sed -i 's/{OLD_TERM}/{NEW_TERM}/g' {file}

相关问题