Flutter json序列化小结

265 阅读1分钟


官方荐用json_serializable插件

官方文档

项目使用了built_value

built_value

  • 优点:

    1. 不可变值类型
    2. EnumClass, 操作类似enum
    3. json序列化
  • 参考链接:

    1. built_value官方文档
    2. flutter - built_value自动生成模型
    3. Dart 处理json,built_value库
  • 自己在android studio中新建了一个live template, 输入built_value即可快速生成model class模版:

    // 模版内容
    // 配置在 perference -> Editor -> Live Templates -> flutter 新建命名为 built_value
    // Template Text 填入以下代码
    // edit variables -> CLASS_NAME_CAMELCASE对应expression为 camelCase(CLASS_NAME)
    abstract class $CLASS_NAME$ implements Built<$CLASS_NAME$, $CLASS_NAME$Builder> {
    static Serializer<$CLASS_NAME$> get serializer => _$$$CLASS_NAME_CAMELCASS$Serializer;
    
    String toJson() {
        return json.encode(serializers.serializeWith($CLASS_NAME$.serializer, this));
    }
    
    factory $CLASS_NAME$.fromJson(String jsonString) {
        return serializers.deserializeWith(
        $CLASS_NAME$.serializer,
        json.decode(jsonString),
        );
    }
    
    Map<String, dynamic> toMap() {
        return serializers.serializeWith($CLASS_NAME$.serializer, this);
    }
    
    factory $CLASS_NAME$.fromMap(Map<String, dynamic> map) {
        return serializers.deserializeWith(
        $CLASS_NAME$.serializer,
        map,
        );
    }
    
    $CLASS_NAME$._();
    factory $CLASS_NAME$([void Function($CLASS_NAME$Builder) updates]) = _$$$CLASS_NAME$;
    }
    
  • 备注:

    @nullable // 表示该字段可空
    @BuiltValueField(wireName: 'updated_at') // 解析的json中字段对应蛇形格式,映射为驼峰
    String get updatedAt;
    
  • model写完后生成*.g.dart的命令:

    flutter packages pub run build_runner build   // 执行一次build命令
    
    flutter packages pub run build_runner watch  // 文件更改自动build
    
    flutter packages pub run build_runner watch --delete-conflicting-outputs  // 删除旧文件在build