FlutterJsonBeanFactory
FlutterJsonBeanFactory copied to clipboard
生成文件格式化;添加yaml可配置是否兼容json_serializable;支持泛型解析;
- 生成文件原本空格和tab混用统一改为空格,样式小调整更接近
dart format格式化结果。 - 在 #114 基础上添加
pubspec.yaml兼容配置json_serializable_compat为true才启用json_serializable兼容模式,没配置默认不启用。
json_serializable兼容模式的Json支持泛型解析 生成格式为
json_serializable兼容格式加入了Json泛型支持。
可以生成带泛型的Json对象
例如:
import 'dart:convert';
import 'package:json_annotation/json_annotation.dart';
import 'package:erp/generated/json/base/json_convert_content.dart';
part 'base_result_entity.g.dart';
@JsonSerializable()
class BaseResultEntity<T> {
int code = 0;
bool success = false;
String? message;
late T result;
BaseResultEntity();
factory BaseResultEntity.fromJson(Map<String, dynamic> json) =>
_$BaseResultEntityFromJson(json, JsonConvert.fromJsonFactory);
Map<String, dynamic> toJson() => _$BaseResultEntityToJson(this, (value) => value);
@override
String toString() {
return jsonEncode(this);
}
}
对应生成结果为:
part of 'base_result_entity.dart';
BaseResultEntity<T> _$BaseResultEntityFromJson<T>(Map<String, dynamic> json, T Function(Object? json) fromJsonT) {
final BaseResultEntity<T> baseResultEntity = BaseResultEntity<T>();
final int? code = jsonConvert.convert<int>(json['code']);
if (code != null) {
baseResultEntity.code = code;
}
final bool? success = jsonConvert.convert<bool>(json['success']);
if (success != null) {
baseResultEntity.success = success;
}
final String? message = jsonConvert.convert<String>(json['message']);
if (message != null) {
baseResultEntity.message = message;
}
final T? result = jsonConvert.convert<T>(json['result']);
if (result != null) {
baseResultEntity.result = result;
}
return baseResultEntity;
}
Map<String, dynamic> _$BaseResultEntityToJson<T>(BaseResultEntity<T> entity, Object? Function(T value) toJsonT) {
final Map<String, dynamic> data = <String, dynamic>{};
data['code'] = entity.code;
data['success'] = entity.success;
data['message'] = entity.message;
data['result'] = toJsonT(entity.result);
return data;
}
emmm 其实我认真想了下 不准备兼容json_serializable 一个项目里 感觉出现一个就够了 要不就完全迁移到其中一个去 对于保留2个的 我感觉很扯啊 ... 不过对于泛型的支持和缩进 我准备会合进去的
这个兼容是一方面是开发有时候用VSCode,改了内容没法生成可以用json_serializable替代下。 另一方面是注解改成了json_annotation,为了隐藏生成的函数名import 改成了part ,要写升级逻辑太麻烦了。