Flutter模型与json的相互转换

Posted JackLee18

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter模型与json的相互转换相关的知识,希望对你有一定的参考价值。

  最近遇到了需要将模型信息转换为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的相互转换的主要内容,如果未能解决你的问题,请参考以下文章

Flutter模型与json的相互转换

Flutter JSON解析与复杂模型转换技巧

Flutter:使用 json_serializable 将 json 转换为模型时出现问题

Flutter:将 50 多个模型类转换为支持 json_serializable 的快速方法

flutter 复杂数据模型 转换

如何实现相互转换:ONNX和JSON之间