vs code作為編輯器
1. 首先,json對象與字符串的轉換是使用json.encode和json.decode的,需要導入import 'dart:convert';
這里主要的自然不是這個,而是json對象和實體對象的轉換
當然,實際上json對象算是一個Map對象,直接通過鍵訪問就可以得到值,即通過實體對象的屬性名就可以得到值。
這里只是把這一步通過命令生成而已
2. 導入對應的flutter包
即在pubspec.yaml中添加
dependencies:
json_annotation: ^3.0.0
dev_dependencies:
build_runner: ^1.0.0
json_serializable: ^3.2.0
保存將自動加載,或者終端輸入flutter packages get,亦或者vs code中點擊“查看-命令面板”再輸入Flutterget就會出現
3. 創建實體的dart文件,下面以news為例 —— 可以用
https://caijinglong.github.io/json2dart/index_ch.html生成
import '
package:json_annotation/json_annotation.dart';
//注意必須導入,不然無法使用@JsonSerializable()
part "
news.g.dart";
//嚴格區分大小寫,且必須是文件名中間加上g.
,否則無法成功。另外也是必須的,因為要生成一個轉換部分文件
@JsonSerializable()//注意加上,后面命令識別用
class News extends Object {
final String author;
final String title;
final String description;
final String url;
final String urlToImage;
final String publishedAt;
final Source source;
News(this.author,
this.title,
this.description,
this.url,
this.urlToImage,
this.publishedAt,
this.source);
}
4. 終端輸入命令
flutter packages pub run build_runner build
等到成功,每個json序列化都將會有一個輸出

這樣就生成好了一個轉換類news.g.dart,此時轉換文件中有_$NewsFromJson方法
你會發現竟然是報錯的??那是因為你主類中缺少了命名式構造函數,加上即可
factory News.fromJson(Map<String, dynamic> json) => _$NewsFromJson(json);
5. 這樣,你就可以通過命名構造函數從json對象轉換為實體對象了
6. 當然還要說說缺陷和坑:
1)泛型無法成功
2)最好確定文件名后再執行命令,不然重命名可能會發生很難解決的事情