【问题标题】:Flutter serialize from json depending on typeFlutter 根据类型从 json 序列化
【发布时间】:2021-06-14 05:10:27
【问题描述】:

我想根据类型将嵌套模型转换为正确的模型。我知道@JsonKey 可以用来专门处理某些属性。但是,如何访问 fromJson 上的其他属性? fromJson 方法必须是静态的,但是我无法访问其他属性。有谁知道如何解决这个问题?

@JsonSerializable(explicitToJson: true, nullable: true)
class Model {
  int type;
  @JsonKey(
    name: 'action',
    fromJson: _convertActionToModel,
  )
  dynamic action;

  Model({this.type, this.action});

  factory Model.fromJson(Map<String, dynamic> json) =>
      _$ModelFromJson(json);

  Map<String, dynamic> toJson() => _$ModelToJson(this);

  static dynamic _convertActionToModel(dynamic json) {
    switch (type) {  // How can i get this type?
      case 0:
        return OtherModel.fromJson(json as Map<String, dynamic>);
        break;
      ....
    }
  }

如何获取开关盒的类型?

【问题讨论】:

    标签: json flutter dart serialization


    【解决方案1】:

    您的 json 只是一个地图,您可以这样做:

    var type = json['typeKey'] as String (or int, bool);
    

    【讨论】:

    • 但是如果我对 fromJson 使用@JsonKey,我只能在 _convertActionToModel 方法中获得属性“action”,而不是整个 json 对象,或者我错了吗?
    • 你是对的,如果你的 json 是 { "action": "doSomething"} in 或 converAction 你只会得到字符串 "doSomething" - _convertActionToModel(String json)
    • 那么如果我使用序列化就没有办法获得模型的另一个属性?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2016-04-07
    • 2023-03-31
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    相关资源
    最近更新 更多