首页 > 其他分享 >Flutter(九)Json序列化与反序列化(转Model)

Flutter(九)Json序列化与反序列化(转Model)

时间:2022-10-26 15:58:54浏览次数:78  
标签:插件 name json dart Json Model 序列化 email

在日常开发中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,可以访问官网查看使用方法,这里不再介绍

标签:插件,name,json,dart,Json,Model,序列化,email
From: https://www.cnblogs.com/anywherego/p/16828676.html

相关文章

  • java反序列化漏洞cc_link_one
    CC-LINK-one前言这里也正式进入的java的反序列化漏洞了,简单介绍一下CC是什么借用一些官方的解释:ApacheCommons是Apache软件基金会的项目,曾经隶属于Jakarta项目。Commons......
  • vue源码分析-v-model的本质
    双向数据绑定这个概念或者大家并不陌生,视图影响数据,数据同样影响视图,两者间有双向依赖的关系。在响应式系统构建的上,中,下篇我已经对数据影响视图的原理详细阐述清楚了。而......
  • JSON Crack 数据可视化工具
    JSONCrack简介JSONCrack是一个很方便的JSON数据可视化工具。该项目不是简单的展示JSON数据,而是将其转化为类似思维导图的形式,支持放大/缩小、展开/收缩、搜索节......
  • Qt使用QJson进行Http请求时序列反序列对象
    1.创建工程使用CMake创建工程cmake_minimum_required(VERSION3.20FATAL_ERROR)project(httprequestLANGUAGESCXX)set(CMAKE_AUTOUICON)set(CMAKE_AUTOMOCO......
  • CesiumJS 技术博客:glTF 模型(Model)加载新架构
    目录1.加载一个glTF模型2.着色器优先的模型渲染设计3.模型渲染管线3.1.管线举例4.与3DTiles集成5.译者的话原文:https://cesium.com/blog/2022/10/05/tour-of-......
  • 剑指 Offer 37. 序列化二叉树 - 力扣(LeetCode)
    剑指Offer37.序列化二叉树-力扣(LeetCode)题目大意:将一棵二叉树序列化成字符串,然后通过该字符串可以重新构造出二叉树思路:看到将二叉树转化成字符串,首先想到的......
  • Jmeter - JsonObject&JsonArray的使用
    需求背景:重复请求一个接口,提取返回的产品型号,按序打印。当返回的数据有产品型号时才能用JSON提取器提取到结果,当返回的数据没有产品型号时想输出"-",因此采用BeanShell后......
  • Python-json库
    json库python原始类型与json类型的转化对照表:PythonJSONdictobjectlist(,tuple)arrayunicode(,str)stringint(,long)number(int)float......
  • python json和pickle
    json和pickle共用方法dumps把任意对象序列化成一个strloads把任意str反序列化成原来数据dump把对象序列化后写入到文件对象中load把文件对象中的内容反序列化jso......
  • 110-注解JSONField、DateTimeFormat、JsonFormat、JsonProperty
    JSONField注解在属性上,作用为:属性的名称与转为toString的名称不一样时,使用该注解。例如:@JSONField(name="user_id")privateStringuserId;当userId="a";使用:JSON.......