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/

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