Flutter Json序列化

序列化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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容