记一次json_serializable解析的踩坑经历

2019-03-13  本文已影响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~

上一篇下一篇

猜你喜欢

热点阅读