flutter JSON和序列化
官网地址https://flutterchina.club/json/
我遇到的问题
字段太多时json的序列化和反序列化过于麻烦(属性太多,容易眼花和错漏)
官网解决方案
- 使用 dart:convert手动序列化JSON
现在,序列化逻辑移到了模型本身内部。采用这种新方法,我们可以非常容易地反序列化user。
当下使用的就是这种方法。 - 使用代码生成库序列化JSON
使用json_serializable package包。 它是一个自动化的源代码生成器,可以为我们生成JSON序列化模板
3. 在项目中设置json_serializable,需要在pubspec.yaml引入json_serializable(注意版本),
4.以json_serializable的方式创建model类
//这是官网代码示例,项目根目录下运行***flutter packages pub run build_runner build***,我们可以在需要时为我们的model生成json序列化代码。 这触发了一次性构建,它通过我们的源文件,挑选相关的并为它们生成必要的序列化代码。
import ‘package:json_annotation/json_annotation.dart’;
// user.g.dart 将在我们运行生成命令后自动生成
part ‘user.g.dart’;
///这个标注是告诉生成器,这个类是需要生成Model类的
@JsonSerializable()
class User{
User(this.name, this.email);
String name;
String email;
//不同的类使用不同的mixin即可
factory User.fromJson(Map<String, dynamic> json) => _KaTeX parse error: Expected group after '_' at position 56: …c> toJson() => _̲UserToJson(this);
}
在这里插入图片描述](https://img-blog.csdnimg.cn/20210322143258749.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU2NDUzOA==,size_16,color_FFFFFF,t_70)
在运行命令后出现如下结果:解决方案是:
//清除之前生成的文件,如果直接运行下面的不行。可以先尝试运行这个
flutter packages pub run build_runner clean
//可以直接运行这个
flutter packages pub run build_runner build --delete-conflicting-outputs
然后就可以生成新的生成新的xxxx.g.dart