序列化Model的生成和使用
生成序列化model:
1.在项目中设置json_serializable,在pubspec.yaml中添加依赖
dependencies:
json_annotation: ^2.0.0
dev_dependencies:
json_serializable: ^2.0.0
build_runner: ^1.1.1
2.创建model类,user_status.dart文件
其中 user_status.g.dart
为自动生成文件,在未编译时会报错,直接忽略即可
import 'package:json_annotation/json_annotation.dart';
//在运行生成命令后将自动生成
part 'user_status.g.dart';
@JsonSerializable()
class UserStatus{
int status;
UserStatus(this.status);
factory UserStatus.fromJson(Map<String, dynamic> json) =>
_$UserStatusFromJson(json);
Map<String, dynamic> toJson() => _$UserStatusToJson(this);
}
运行命令:
flutter packages pub run build_runner build
自动生成airport_subscribe.g.dart文件
如果生成失败,错误日志类似
[SEVERE] Conflicting outputs were detected and the build is unable to prompt for permission to remove them. These outputs must be removed manually or the build can be run with `--delete-conflicting-o utputs`. The outputs are: lib/data/http/rsp/user_status.g.dart
可能是user_status.g.dart因为缺少之前生成dart_tool/build目下的文件就会报错。
运行如下命令可以解决该问题
flutter packages pub run build_runner build --delete-conflicting-outputs
使用model类
反序列化
String jsonString = '{"status":1}';
var subscribe = S2cAirportSubscribe.fromJson(json.decode(jsonString));
其中json位于dart:convert包中,故需要
import 'dart:convert';
序列化
String encodeString = json.encode(subscribe);