【问题标题】:Can variable name be different than the json ones?变量名可以与 json 不同吗?
【发布时间】:2019-05-17 04:17:03
【问题描述】:

使用 json_seraliazable (https://pub.dartlang.org/packages/json_serializable) 时,变量名称似乎需要与 json 变量名称相同。我错了吗?

@JsonSerializable(nullable: false)
class Person {
  final String firstName;
  final String lastName;
  final DateTime dateOfBirth;
  Person({this.firstName, this.lastName, this.dateOfBirth});
  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
  Map<String, dynamic> toJson() => _$PersonToJson(this);
}

并且 json 还将具有 'firstName'、'lastName' 和 'dateOfBirth' 参数。

比方说,我更喜欢使用“final String first”而不是“firstName”,但仍然希望从 json 读取的“firstName”映射到“first”。有可能吗?

我知道有手动方式,但如果我仍然可以使用那种方式,我想知道如何?

谢谢!

【问题讨论】:

    标签: json flutter


    【解决方案1】:

    您可以添加注释来自定义

    @JsonKey(name: 'firstName')
    final String first;
    

    另见https://github.com/dart-lang/json_serializable/blob/master/json_annotation/lib/src/json_key.dart,它支持序列化和反序列化的各种设置。

    json_annotation 包还有几个注解。

    【讨论】:

    • 你们知道是否有办法添加替代名称吗?我对 2 个不同的 API 使用相同的类,并且程序员没有将相同的变量命名为相同的名称。所以我认为必须有一种方法可以添加替代名称。类似的东西:@JsonKey(名称:“package_nr”,替代:“package_number”)。或名称中的数组:["package_nr", "package_number]
    • 你可以试试继承@JsonKey(name: "package_number") class PackageNumber extends PackageNr {}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多