【问题标题】:From json method in subclasses来自子类中的 json 方法
【发布时间】:2021-09-29 21:20:54
【问题描述】:

我有一个类似的基类:

class TransportationVehicle {
   String name;
   
   TransportationVehicle(this.name);
   
   Map<String, dynamic> toJson() {
       final Map<String, dynamic> data = <String, dynamic>{};
       data['name'] = name;
       return data;
     }
 }

还有多个子类,如:

class Bike extends TransportationVehicle {
   int pedals;
   
   Bike(String name, this.pedals) : super(name);
   
   @override
   Map<String, dynamic> toJson() {
     final data = super.toJson();
     data['pedals'] = pedals;
     return data;
    }
}

这样,我可以将不同类型的列表转换为 json 字符串。但是如何使用fromJson 功能呢?

【问题讨论】:

    标签: json flutter dart base-class


    【解决方案1】:

    您可以通过使用基类来使用 toJson() 方法中的相同想法。

    import 'dart:convert';
    
    class TransportationVehicle {
      final String? name;
    
      TransportationVehicle({
        this.name,
      });
    
      factory TransportationVehicle.fromRawJson(String str) =>
          TransportationVehicle.fromJson(json.decode(str));
    
      String toRawJson() => json.encode(toJson());
    
      factory TransportationVehicle.fromJson(dynamic json) => TransportationVehicle(
            name: json['name'] == null ? null : json['name'] as String,
          );
    
      Map<String, dynamic> toJson() => {
            'name': name == null ? null : name,
          };
    }
    
    class Bike extends TransportationVehicle {
      final int? pedals;
    
      Bike({
        String? name,
        this.pedals,
      }) : super(name: name);
    
      factory Bike.fromRawJson(String str) => Bike.fromJson(json.decode(str));
    
      String toRawJson() => json.encode(toJson());
    
      factory Bike.fromJson(dynamic json) {
        TransportationVehicle vehicle = TransportationVehicle.fromJson(json);
        return Bike(
          name: vehicle.name == null ? null : vehicle.name,
          pedals: json['pedals'] == null ? null : json['pedals'] as int,
        );
      }
    
      Map<String, dynamic> toJson() {
        final data = super.toJson();
        data['pedals'] = pedals == null ? null : pedals;
        return data;
      }
    }
    

    【讨论】:

    • 如果我有一个包含不同类型TransportationVehicles 列表的json,并且我想直接构造它们各自的类类型,那是如何处理的?在这些类之外还是更好地为每种类型提供一个带有开关的静态方法并调用相应的构造函数(如Bike())?
    • 我刚刚看到静态方法不应该用于构造函数:dart-lang.github.io/linter/lints/… 但是,这可能是工厂的用例?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多