美文网首页Android 开发工具
Flutter Json自动反序列化

Flutter Json自动反序列化

作者: galafan | 来源:发表于2019-06-12 14:42 被阅读0次

(一)添加依赖

dependencies:
  json_annotation: ^2.4.0

dev_dependencies:
  build_runner: ^1.5.2
  json_serializable: ^3.0.0

(二)创建类

import 'package:json_annotation/json_annotation.dart';
part 'cacheItem.g.dart'; // 这个是重点,必须手打上去

@JsonSerializable()  //  注释必须要加
class CacheItem{
  String  name;
  String path;
  String size;
  bool isSelect;
  
  CacheItem(this.name, this.path, this.size, this.isSelect);
}

(三)在 Tearminal 窗口执行

flutter packages pub run build_runner build

(四)执行万第三步,会生成'cacheItem.g.dart 文件 如下:

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'cacheItem.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

CacheItem _$CacheItemFromJson(Map<String, dynamic> json) {
  return CacheItem(json['name'] as String, json['path'] as String,
      json['size'] as String, json['isSelect'] as bool);
}

Map<String, dynamic> _$CacheItemToJson(CacheItem instance) => <String, dynamic>{
      'name': instance.name,
      'path': instance.path,
      'size': instance.size,
      'isSelect': instance.isSelect
    };

目录结构

(五) 添加 序列化,反序列化

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

@JsonSerializable()
class CacheItem{
  String  name;
  String path;
  String size;
  bool isSelect;

  CacheItem(this.name, this.path, this.size, this.isSelect);

  // 序列化,自己写的(是不是有自动生成的?)
  factory CacheItem.fromJson(Map<String ,dynamic> json)=>_$CacheItemFromJson(json);

  // 反序列化,自己写的
  Map<String,dynamic> toJson() => _$CacheItemToJson(this);

}

相关文章

网友评论

    本文标题:Flutter Json自动反序列化

    本文链接:https://www.haomeiwen.com/subject/sbhlfctx.html