• Dart 和 Flutter 使用json_annotation和json_serializable来处理json数据教程


    在学习fultter的时候突然想到如何去处理从服务器获取的json或者将app中的对象数据转换成json上传给服务器

    于是研究一下dart对json数据的处理

    首先需要依赖下面的第三方库(这里要强调下,第三方库的版本很重要,市面上目前很多的教程文章用的都是老版本的库,所以

    很多旧方法都不支持了,本教程是用最新的库为案例写的)

    dependencies:
    json_annotation: ^2.4.0

    dev_dependencies:
    fluttertoast: ^2.0.3
    json_serializable: ^3.0.0
    build_runner: ^1.6.0
    首先我们需要创建用来解析或者转换成json的dart实体类

    import 'package:json_annotation/json_annotation.dart';
    part 'Author.g.dart';
    @JsonSerializable()
    class Author {
    String name;

    Author(this.name);

    @override
    String toString() {
    return 'Author{name: $name}';
    }
    factory Author.fromJson(Map<String, dynamic> json) => _$AuthorFromJson(json);

    Map<String,dynamic> toJson() => _$AuthorToJson(this);

    }
    这里有几点需要注意的

    1、当我们初次创建Author.dart的时候,需要加入    part 'Author.g.dart';  虽然系统会提示报错,但是不必紧张,这个我们一会生成Author.g.dart文件所必须的条件,我们暂时不要管它报不报错

    2、在需要转换的实体dart类前 加入@JsonSerializable()注解,表示需要json序列话处理

    3、fromJson()  方法和 toJson()方法的写法是固定模式的,大家按模板修改就行

    接下来我们就该见证奇迹的发生了

    我们cd到项目的根目录,然后使用  flutter packages pub run build_runner build  这条指令去生成Author.g.dart文件

    然后我们就会在Author.dart的下面发现一个Author.g.dart文件,到此结束,我们开始验证是否有效

    编写测试类

    import 'dart:convert';
    import 'Author.dart';

    void main(http://www.my516.com) async{

    //模仿从服务端返回端json数据格式
    var obj = {"name":"Jams"};

    //创建一个author类,复制名字为xueqi
    var b = new Author("xueqi");
    //打印字符串
    print(b.toString());
    //将author转成json字符串,打印出来
    String s = json.encode(b);
    print(s);
    //将obj的json数据转换成Author实体类,然后打印Author的属性name
    var c = Author.fromJson(obj);
    print("作者的名字是:"+c.name);
    }

    ---------------------

  • 相关阅读:
    攻防世界-web进阶-Web_php_include
    攻防世界-web进阶-php_rce
    Buuctf-misc-穿越时空的思念
    Buuctf-misc-[BJDCTF 2nd]EasyBaBa (kinovea)
    Buuctf-misc-菜刀666
    Buuctf-misc-[BJDCTF 2nd]圣火昭昭-y1ng(outguess)
    Access数据库简介
    VC与VB
    VB的使用
    工作总结2
  • 原文地址:https://www.cnblogs.com/ly570/p/11167537.html
Copyright © 2020-2023  润新知