美文网首页
记一次json_serializable解析的踩坑经历

记一次json_serializable解析的踩坑经历

作者: 幸福的程序媛 | 来源:发表于2019-03-13 17:58 被阅读0次

    怎么使用json_serializable的文章网上已经很多了,大家可以自行google.这里推荐一篇
    https://juejin.im/post/5b5f00e7e51d45190571172f

    这里说的重点是我在使用json_serializable时碰到的一个问题。

    感谢干货集中营里面的免费接口。现在我们来解析接口http://gank.io/api/xiandu/categories的返回数据。

    大家打开可以看到返回数据有一个字段_id.问题就出在这里。

    import 'package:json_annotation/json_annotation.dart';
    
    part 'smallnew.g.dart';
    
    @JsonSerializable()
    class smallnew{
    
      @JsonKey(name:"_id")//注意这个地方,服务端返回的字段是_id,但如果直接用String _id,而不加以处理的话,是生成不了smallnew.g.dart的,只能如此处处理。
      String id;
      String en_name;
      String name;
      int rank;
      factory smallnew.fromJson(Map<String, dynamic> json) => _$smallnewFromJson(json);
      Map<String, dynamic> toJson() => _$smallnewToJson(this);
    
      smallnew(this.id, this.en_name, this.name, this.rank);
    
      @override
      String toString() {
        return 'smallnew{_id: $id, en_name: $en_name, name: $name, rank: $rank}';
      }
    
    
    }
    

    外面一层的模型是

    import 'package:json_annotation/json_annotation.dart';
    import 'package:flutter_app1/model/smallnew.dart';
    
    part 'big.g.dart';
    
    @JsonSerializable()
    class big{
    
    
      bool error;
      List<smallnew> results;
      factory big.fromJson(Map<String, dynamic> json) => _$bigFromJson(json);
      Map<String, dynamic> toJson() => _$bigToJson(this);
    
      big(this.error, this.results);
    
      @override
      String toString() {
        return 'big{error: $error, results: $results}';
      }
    
    
    }
    

    注意smallnew类里面,服务端返回的字段是_id,但如果直接用String _id,而不加以处理的话,是生成不了smallnew.g.dart的,需要添加@JsonKey(name:"_id")。括号里面的是服务端返回的真实字段

    That'all ! 3Q~

    相关文章

      网友评论

          本文标题:记一次json_serializable解析的踩坑经历

          本文链接:https://www.haomeiwen.com/subject/jlbtmqtx.html