如何創(chuàng)建 json_serializable相關聯(lián)的Flutter model模型對象

前言

在開發(fā)過程中,我們會從服務器請求數(shù)據(jù),然后解析服務器返回的json。在Android開發(fā)中,我們會使用GsonFormat用來生成json對應的model,那么在Flutter中該如何生成對應的model呢?

使用

一、 添加依賴

pubspec.yaml中添加json_annotation、build_runner、json_serializable相關插件依賴,如下:

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.2
  dio: ^2.1.0-stable-version
  json_annotation: ^1.2.0 #json_serializable助手

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^1.0.0  #創(chuàng)建.g.dart
  json_serializable: ^1.5.1  #序列化json

然后點擊右上角的packages get

二、 創(chuàng)建model

創(chuàng)建model有兩種方式:

  1. 網(wǎng)頁工具生成 https://caijinglong.github.io/json2dart/index_ch.html
  2. 插件生成 https://github.com/liujingtech/IntelliJ-Json2json_serializable

注意:
一般生成的json不會有什么問題,但是如果json中的key為數(shù)字情況則需要手動修改。
json如下:

{
  "keys": {
    "1": "A",
    "2": "B"
  }
}

直接生成的model文件:

import 'package:json_annotation/json_annotation.dart'; 
 
part 'entity.g.dart';

@JsonSerializable()
  class Entity extends Object {

  @JsonKey(name: 'keys')
  Keys keys;

  Entity(this.keys,);

  factory Entity.fromJson(Map<String, dynamic> srcJson) => _$EntityFromJson(srcJson);

  Map<String, dynamic> toJson() => _$EntityToJson(this);
}

@JsonSerializable()
  class Keys extends Object {

  @JsonKey(name: '1')
  String 1;

  @JsonKey(name: '2')
  String 2;

  Keys(this.1,this.2,);

  factory Keys.fromJson(Map<String, dynamic> srcJson) => _$KeysFromJson(srcJson);

  Map<String, dynamic> toJson() => _$KeysToJson(this);
}

由于dart中變量名不能為數(shù)字,所有類Keys中的兩個變量都是非法的,所以我們需要手動修改為如下:

import 'package:json_annotation/json_annotation.dart'; 
  
part 'entity.g.dart';

@JsonSerializable()
  class Entity extends Object {

  @JsonKey(name: 'keys')
  Keys keys;

  Entity(this.keys,);

  factory Entity.fromJson(Map<String, dynamic> srcJson) => _$EntityFromJson(srcJson);

  Map<String, dynamic> toJson() => _$EntityToJson(this);
}

@JsonSerializable()
  class Keys extends Object {

  @JsonKey(name: '1')
  String $1;

  @JsonKey(name: '2')
  String $2;

  Keys(this.$1,this.$2,);

  factory Keys.fromJson(Map<String, dynamic> srcJson) => _$KeysFromJson(srcJson);

  Map<String, dynamic> toJson() => _$KeysToJson(this);
}

把變量String 1String 2改為String $1String $2,構造函數(shù)Keys(this.1,this.2,);改為Keys(this.$1,this.$2,);,具體叫取什么名字只要符合dart的命名規(guī)范即可。同時別忘了修改構造函數(shù)。

三、創(chuàng)建.g.dart

在項目根目錄下執(zhí)行命令flutter packages pub run build_runner build,執(zhí)行完畢后會在model的同級目錄下創(chuàng)建<model name>.g.dart的文件。

四、使用model

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容