在日常开发中JSON的序列化与反序列化是一个常见的操作;而Dart语言不支持反射,运行时反射会影响Dart的tree shaking(摇树优化),tree shaking可以“抖掉”不需要使用的代码,显著优化 App 的体积,所以Flutter中没有类似Gson这样的Json库,处理方法相比Kotlin或者Swift更为复杂和繁琐。

方式一: dart:convert (不推荐)

  • Flutter 有一个内置的 dart:convert 的库,这个库包含了一个简单的 JSON 编码器和解码器。
  • 使用fromJsontoJson实现序列化和反序列化
  • 全手写代码,在多人协作的团队中不建议使用
  • 官方文档

示例代码:

class User {
final String name;
final String email; User(this.name, this.email); User.fromJson(Map<String, dynamic> json)
: name = json['name'],
email = json['email']; Map<String, dynamic> toJson() => {
'name': name,
'email': email,
};
}

方式二:json_serializable

  • Flutter官方提供了一个自动化源代码生成器json_serializable来生成 JSON 序列化数据模板
  • 依然需要大量的手写代码和编写映射逻辑,比方式一友好,但依然存在多人协作难以维护的问题。

使用代码生成库序列化 JSON 数据

方式三:Android Studio插件 (推荐)

  • 使用IDEA插件可以免去繁琐的配置和代码编写工作
  • 保证生成的代码的一致性,并降低维护难度
  • 适合多人协作

一、FlutterJsonBeanFactory(Only Null Safety)

使用方法

1、安装插件

搜索flutter,第二个插件就是。

2、在开发文件夹,右键选择JsonToDartBeanAction

3、根据页面提示填写信息

生成的代码:

import 'package:flutter_demo_library/generated/json/base/json_field.dart';
import 'package:flutter_demo_library/generated/json/user_model_entity.g.dart';
import 'dart:convert'; @JsonSerializable()
class UserModelEntity { int? id;
String? name; UserModelEntity(); factory UserModelEntity.fromJson(Map<String, dynamic> json) => $UserModelEntityFromJson(json); Map<String, dynamic> toJson() => $UserModelEntityToJson(this); @override
String toString() {
return jsonEncode(this);
}
}

还会自动生成相关文件

4、修改后缀名

如果不需要Entiry做为后缀名,可以在AS的设置中修改:

5、字段维护

如果修改了entiry中的字段,只需在entiry文件中使用快捷键alt + j或者option + j,插件会自动重新生成文件

二、JsonToDart

使用方法与FlutterJsonBeanFactory,可以访问官网查看使用方法,这里不再介绍

Flutter(九)Json序列化与反序列化(转Model)的更多相关文章

  1. Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解

    Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全   Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...

  2. Newtonsoft.Json 序列化和反序列化 时间格式

    From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...

  3. Newtonsoft.Json 序列化和反序列化 时间格式 [转]

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  4. windows phone8.1:Xml,Json序列化和反序列化

    原文:windows phone8.1:Xml,Json序列化和反序列化 小梦本例主要实现以下四点内容: 将Car对象序列化为xml 将Car对象序列化为Json 将xml反序列化为Car对象 将js ...

  5. [转]Newtonsoft.Json 序列化和反序列化 时间格式

    本文转自:http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeObj ...

  6. Newtonsoft.Json 序列化和反序列化 以及时间格式

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  7. 几种常用的json序列化和反序列化工具介绍

    一.前言 Json序列化和反序列化工作中会时常用到,也是目前数据交互的常用格式,Rest风格的接口加上json格式的数据交互,真的是天作之合. 目前Json字符与Json对象的相互转换方式有很多,接下 ...

  8. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

  9. Json序列化与反序列化(对象与Json字符串的转换)--C#

    public class JsonHelper { #region Json序列化与反序列化 /// <summary> /// 将json转化为对象 /// (需要提前构造好结构一致的M ...

  10. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

随机推荐

  1. JDK 19新特性 & JDK 多版本安装切换配置

    新的JDK 19包含如下7个新的特性: 转自:JDK19中比较重要的新特性-电子发烧友网 JEP 405: Record Patterns(Record模式) JEP 422: Linux/RISC- ...

  2. jenkins 持续集成和交付——安装与账户安全还有凭证(二)

    前言 jenkins 整理完毕,共二十四章,逐步放出,互相交流学习.学会jenkins 只是第一步,真正的还是多写脚本,然后遇到构建过程的坑,然后解决. 正文 安装jenkins 首先是如何安装jen ...

  3. c# vs 中如何修改类模板

    背景 在一些应用中,我们需要去修改我们的类模板,作为标记. 步骤 在这个目录下就是我们的模板: C:\Program Files\Microsoft Visual Studio 10.0\Common ...

  4. 力扣569(MySQL)-员工薪水中位数(困难)

    题目: 写一个SQL查询,找出每个公司的工资中位数,以任意顺序返回结果表.查询结果个数如下所示. 输出结果如下:  解题思路: 中位数:位于集合正中间的元素.当数据总书为奇数时,最中间的数就是中位数, ...

  5. 力扣178(MySQL)-分数排名(中等)

    题目: 表: Scores 编写 SQL 查询对分数进行排序.排名按以下规则计算: 分数应按从高到低排列.如果两个分数相等,那么两个分数的排名应该相同.在排名相同的分数后,排名数应该是下一个连续的整数 ...

  6. 深入理解C++中的RVO

    前言 考虑存在这样一个类如HeavyObject,其拷贝赋值操作比较耗时,通常你在使用函数返回这个类的一个对象时会习惯使用哪一种方式?或者会根据具体场景选择某一种方式? // style 1 Heav ...

  7. 如何用 Serverless 低成本打造个人专属网盘?

    ​简介:想要做个网盘不知如何开始,不妨花3分钟读读这篇,看看如何借助 Serverless ,低成本的做一个"不限制网速.无限扩展.同时支持数百种文件格式在线预览.编辑.协作"的专 ...

  8. 代码安全无忧—云效Codeup代码加密技术发展之路

    简介: 从代码服务及代码安全角度出发,看看云效代码加密技术如何解决这一问题 代码数据存在云端,如何保障它的安全? 部分企业管理者对于云端代码托管存在一丝担心:我的代码存在云端服务器,会不会被泄露? 接 ...

  9. Quill富文本编辑器的实践 - DevUI

    DevUI 是一款面向企业中后台产品的开源前端解决方案,它倡导沉浸.灵活.至简的设计价值观,提倡设计者为真实的需求服务,为多数人的设计,拒绝哗众取宠.取悦眼球的设计.如果你正在开发 ToB 的工具类产 ...

  10. 简说Python之函数

    目录 Python的函数 函数的简单调用 函数传参 返回值 计算圆形面积 变量作用域 局部变量 全局变量 就像平时玩的积木,函数就是一个个成块的积木,可以组合你想要的任何形状. Python的函数 函 ...