如何在 dart Parse Json 中使用类作为数据类型

Posted

技术标签:

【中文标题】如何在 dart Parse Json 中使用类作为数据类型【英文标题】:how to Use class as datatype in dart Parse Json 【发布时间】:2019-06-07 22:03:09 【问题描述】:

我有一个名为 FullTrip 的 Main 类,这个类具有称为 itineraries 的属性,其他包含两条数据 所以我创建了另一个名为 Hc 的类,现在我需要使用这种组合来解析来自服务器的 json 响应

class FullTrip extends Trip

  final List<String> including;
  final List<String> excluding;
  final List<Hc> itineraries;
  final List<Hc> policies;

  FullTrip(this.including,this.excluding,this.itineraries,this.policies,int id,String title,double price,String overview,String hero_image): 
  super(id:id,title:title,price:price,overview:overview,hero_image:hero_image);


    factory FullTrip.fromJson(Map<String, dynamic> json) => 
        _$FullTripFromJson(json);


  class Hc 
    final String head;
    final String content;
    Hc(this.head,this.content);
  

当我使用这样的代码并运行序列化命令时

flutter packages pub run build_runner build --delete-conflicting-outputs

终端出错

[严重] lib/models/fulltrip.dart 上的 json_serializable:运行时出错 JsonSerializableGenerator 无法生成fromJson 代码 itineraries 因为类型 Hc。没有提供TypeHelper 实例支持定义的类型。 package:Tourism/models/fulltrip.dart:21:18 最终名单 行程; ^^^^^^^^^^^ [警告] lib/models/fulltrip.dart 上的 json_serializable:缺少“part 'fulltrip.g.dart';”。 [信息] 运行构建完成,耗时 3.0s

[INFO] 缓存最终确定的依赖图... [INFO] 缓存最终确定 依赖图完成,耗时 68ms

【问题讨论】:

【参考方案1】:

问题似乎是您必须将两个类拆分为单独的 dart 文件。以下是两个 dart 文件的内容:

FullTrip.dart

import 'package:json_annotation/json_annotation.dart';

part 'fulltrip.g.dart';

@JsonSerializable()
class FullTrip extends Trip

  final List<String> including;
  final List<String> excluding;
  final List<Hc> itineraries;
  final List<Hc> policies;

  FullTrip(this.including,this.excluding,this.itineraries,this.policies,int id,String title,double price,String overview,String hero_image): 
  super(id:id,title:title,price:price,overview:overview,hero_image:hero_image);


  factory FullTrip.fromJson(Map<String, dynamic> json) => 
        _$FullTripFromJson(json);

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

Hc.dart

import 'package:json_annotation/json_annotation.dart';

part 'hc.g.dart';

@JsonSerializable()
class Hc 
  final String head;
  final String content;
  Hc(this.head,this.content);

  factory Hc.fromJson(Map<String, dynamic> json) => _$HcFromJson(json);

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

您还应该查看警告:[WARNING] json_serializable on lib/models/fulltrip.dart: Missing "part 'fulltrip.g.dart';"

你总是必须在类的顶部添加“part”文件。

查看官方文档以了解其外观:https://flutter.io/docs/development/data-and-backend/json#creating-model-classes-the-json_serializable-way

【讨论】:

以上是关于如何在 dart Parse Json 中使用类作为数据类型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 dart/flutter 中提取 JSON 子数据

如何在 nunjucks 中使用 JSON.parse

如何在Dart / flutter中映射和显示嵌套的JSON?

Flutter/dart:Parse Server sdk:ParseUser.currentUser() 函数在重置时返回 null

如何编写解析此 JSON 的 Dart 模型类?

如何在 dart 中解析动态 JSON 键