最近遇到了需要将模型信息转换为json文件,并保存在本地,后续会根据json文件转换成对应的模型。在实践的过程中踩到了一些坑点下面一一和大家分享。

颜色色值不要使用16进制整型存储

  flutter中颜色色值的表示使用16进制的整型数字,但是将16进制的整型数字存储到json的时候会被自动转换成10进制的数字,在后续阶段json转模型会比较麻烦。这里和大家分享一个第三方库hexcolor ,直接使用16进制字符串来初始化颜色Color。因此我们在将颜色色值存储到json的时候,可以将16进制的字符串存储进去。

嵌套类型如何处理

  嵌套类型,刚开始接触的时候也是一脸懵,后来在fromJson,toJson这两个方法中,对应的调用一下fromJson,toJson就可以了。具体示例如下:

factory LedConfigModel.fromJson(Map<String,dynamic> json){return LedConfigModel()..text = json['text'] as String..isMirror = json['isMirror'] as bool..isBlod = json['isBlod'] as bool..isItalic = json['isItalic'] as bool..isLeftToRight = json['isLeftToRight'] as bool..textColor = json['textColor']..textColors = json['textColors']..bgColor = json['bgColor']..bgColors = json['bgColors']..bgImagePath = json['bgImagePath'] as String?..bgVideo = (json['bgVideo'] != null)?JKVideoModel.fromJson(json['bgVideo']):null // 这里是嵌套模型..fontSize = json['fontSize'] as double..fontFamily = json['fontFamily'] as String..speed = json['speed'] as double..fontEffect = JKFontEffect.values[json['fontEffect']]..scrollDirecton = Axis.values[json['scrollDirecton']]..borderEffect = JKBorderEffect.values[json['borderEffect']]..backgroundMode = JKBackgroundMode.values[json['backgroundMode']];}Map<String, dynamic> toJson(){LedConfigModel instance = this;return <String, dynamic>{'text': instance.text,'isMirror': instance.isMirror,'isBlod': instance.isBlod,'isItalic': instance.isItalic,'isLeftToRight': instance.isLeftToRight,'textColor': instance.textColor,'textColors': instance.textColors,'bgColor': instance.bgColor,'bgColors': instance.bgColors,'bgImagePath': instance.bgImagePath,'JKVideoModel': instance.bgVideo?.toJson(),//这里是嵌套模型'fontSize': instance.fontSize,'fontFamily': instance.fontFamily,'speed': instance.speed,'fontEffect': instance.fontEffect.index,'scrollDirecton': instance.scrollDirecton.index,'borderEffect': instance.borderEffect.index,'backgroundMode': instance.backgroundMode.index,};}

枚举类型如何处理

  将枚举值保存到json中,我这边是以数字的形式进行存储。json转模型的时候,将数字恢复成相应的枚举值。具体示例如下:

######
其中红色框标记出来的就是数字转枚举值,以及枚举值转数字。具体参考的博客如下:Dart 枚举原始值指定问题 及 原始值与枚举值转换问题

其他

  在使用模型与json相互转换的时候。给大家推荐一下个三方库,json_model。

Flutter模型与json的相互转换相关推荐

  1. Flutter开发之JSON及序列化(29)

    本文介绍了使用JSON的两个常规策略: 手动序列化和反序列化 通过代码生成自动序列化和反序列化 不同的项目具有不同的复杂度和场景.对于较小项目,使用代码生成器可能会过度.对于具有多个JSON mode ...

  2. 文档模型(JSON)使用介绍

    2019独角兽企业重金招聘Python工程师标准>>> 一.背景 E.F.Codd在1970年首次提出了数据库系统的关系模型,从此开创了数据库关系方法和关系数据理论的研究,为数据库技 ...

  3. 7. Jackson用树模型处理JSON是必备技能,不信你看

    每棵大树,都曾只是一粒种子.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BA ...

  4. JS对象和JSON的相互转换方法

    JS对象和JSON的相互转换方法 一个复杂的js对象 //json要求和js对象是一样的,只不过key必须是字符串//js对象在声明的时候是否加双引号是可以选择的var student = {last ...

  5. flutter解析本地json数组

    解析如下代码:如果不知道如何添加本地json的,可以看我另外一篇文章flutter 解析本地json rootBundle.loadString("images/list.json" ...

  6. 【Flutter】JSON 模型转换 ( JSON 序列化工具 | JSON 手动序列化 | 根据 JSON 编写 Dart 模型类 | 在线自动根据 JSON 转换 Dart 类 )

    文章目录 一.JSON 序列化工具 二.JSON 手动序列化 三.根据 JSON 编写 Dart 模型类 四.在线自动转换 五.相关资源 一.JSON 序列化工具 JSON 格式比较简单的话 , 使用 ...

  7. 技术图文:如何实现 DataTable 与模型类 List 的相互转换?

    通常情况下,我们在做工程项目的时候,需要把待处理的数据存储在数据库中. 通过 SQL 的 Select 语句很容易把查询的结果以 DataTable 的方式得到,但在对 DateTable 中的数据进 ...

  8. Flutter开发之JSON解析

    对于JSON格式的数据交互,想必大家不会陌生.JSON(全称JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,JSON因为具有易于人阅读和编写,同时 ...

  9. Flutter实战——Map Json Object对象转换

    最近在写Flutter代码,发现iOS侧使用的是字典类型(Map),而我们Android使用的是对象类型. 数据类型完全不同,这可咋整? 于是研究了一下Map相关的Json转换,希望能帮助到大家 本篇 ...

最新文章

  1. 公共基础——树,二叉树,软件结构图
  2. ansible的安装和ansible的模板
  3. 第三方控件radupload 使用方式以及报错处理
  4. C++ Primer ----- 关于初始化
  5. 两个excel文档查找相同选项后替换_看似普通的查找和替换功能,用好了,能让你的工作效率翻一番...
  6. 联想乐Pad_A1获取root权限
  7. PHP在线加密系统-陌屿云PLUS开源版V8.01
  8. “3D几何与视觉技术”全球在线研讨会第二期
  9. 浅谈算法(简单算法)
  10. jquery 图像滑块_jQuery CSS图像滑块–自行编写代码
  11. 一机三屏台式计算机,三屏系统重现江湖:背后一台完整主机
  12. 新型恶意软件—— Grizzly攻击Telegram
  13. smarty 模板不能正常加载css,js的问题
  14. 关于合格工程师素养的一些思考
  15. springmvc和activemq的整合使用
  16. c语言合法的用户字符,在C语言中下列合法的字符常量是
  17. 中国石油大学(北京)-《机器人设计》第一阶段在线作业
  18. 计算机网络之数据链路层原理
  19. 如何利用等比频宽公式将信号分解成部分重叠的子频段
  20. 医疗卫生信息化领域的一些术语和标准

热门文章

  1. raid5 合适 多少块硬盘_RAID5需要几块硬盘
  2. python 语句块标记_什么是python中的语言语句块标记
  3. 小乌龟(TortoiseGit) 安装以及使用
  4. cf服务器人连接延迟,怎么解决大部分人使用Win10系统玩穿越火线出现卡顿或延迟的情况?...
  5. Java基础:缓冲流
  6. 解决PDF文档复制到word中的段落不对齐的方法
  7. XL5300TOF 测距模块特点及其应用 全集成系统级封装模块
  8. 【武汉理工大学】软件工程八股文速记
  9. xlsx,xlsx-style file-saver ,vue3+vite4+Excel导出解决方案
  10. 水雨情自动监测系统-大坝安全监测-智慧水库