Json和序列化-Flutter

dart:convert手动序列化JSON | 使用代码生成库序列化JSON

dart:convert手动序列化JSON

  • 源代码
import 'dart:convert';
//创建一个模型类
class Student{
  String name;
  int age;
  Student(this.name,this.age);
  //用于从一个map构造出一个Student实例
  Student.fromJson(Map<String,dynamic> json):
      name = json['name'],
      age = json['age'];
  // 将Student实例转化为一个map.
  //jsonDecode(jsonStr) 方法中会调用实体类的这个方法。如果实体类中没有这个方法,会报错。
  Map<String,dynamic> toJson(){
    return
        {
          "name": name,
          "age" : age
        };
  }
}
void main() {
  // 创建Json字符串(Json必须用双引号)
  String jsonfile = '{"name":"MJT","age" :19}';
  //用jsonDecode将Json解码为Map
  Map<String, dynamic> map = jsonDecode(jsonfile);
  //从map中构造出Student实例并使用
  Student student = Student.fromJson(map);
  print(student.name);
  //将实例对象编码为Json
  String temp = jsonEncode(student);
  print(temp);
}

使用代码生成库序列化JSON

在项目中设置json_serializable

要包含json_serializable到我们的项目中。
pubspec.yaml

dependencies:
  json_annotation: ^3.0.0

dev_dependencies:
  build_runner: ^1.0.0
  json_serializable: ^3.2.0

在项目根文件夹中运行 flutter packages get (或者在编辑器中点击 “Packages Get”) 以在项目中使用这些新的依赖项.

查看所需依赖的最新版本:https://github.com/dart-lang/json_serializable/blob/master/example/pubspec.yaml

以json_serializable的方式创建model类

import 'package:json_annotation/json_annotation.dart';
// student.g.dart 将在我们运行生成命令后自动生成
import 'student.g.dart';
///这个标注是告诉生成器,这个类是需要生成Model类的
@JsonSerializable()

//下面的代码不变
class Student{
    ......
}
void main(){
    ......
}

一次性生成

在项目根目录下运行flutter packages pub run build_runner build,可以在需要时为model生成json序列化代码。 但是每次在model类中进行更改都要再手动运行一遍构建命令,太不方便。

持续生成

watcher_会监视项目中文件的变化,并在需要时自动构建必要的文件。
只需在根目录下运行flutter packages pub run build_runner watch来启动_watcher

只需启动一次观察器,然后并让它在后台运行。

使用json_serializable模型

使用的话不需要修改以前的代码,生成序列化代码后直接运行就好了。

参考文档:https://flutterchina.club/json/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章