如何在继承类上生成JSON_Serializable Dart(Flutter)?
您好,我有2个父母班 student 和 Room ,其中两个继承类模型 StudentModel 和 roommodel ,我我尝试使用模型类上的JSON_Serializable库生成JSON转换器,但是当我尝试使用build_runner生成这样的显示错误时:
我的代码
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'student.g.dart';
/// * Student & StudentModel
class Student extends Equatable {
final int id;
final String name;
final Room studentRoom;
const Student({this.id = 0, this.name = "", this.studentRoom = const Room()});
@override
List<Object?> get props => [id, name];
}
@JsonSerializable(explicitToJson: true)
class StudentModel extends Student {
const StudentModel({int id = 0, String name = "", RoomModel studentRoom = const RoomModel()});
factory StudentModel.fromJson(Map<String, dynamic> json) => _$StudentModelFromJson(json);
Map<String, dynamic> toJson() => _$StudentModelToJson(this);
}
/// * Room & RoomModel
class Room extends Equatable {
final int id;
final String roomName;
const Room({this.id = 0, this.roomName = ""});
@override
List<Object?> get props => [id, roomName];
}
@JsonSerializable()
class RoomModel extends Room {
const RoomModel({int id = 0, String roomName = ""}) : super(id: id, roomName: roomName);
factory RoomModel.fromJson(Map<String, dynamic> json) => _$RoomModelFromJson(json);
Map<String, dynamic> toJson() => _$RoomModelToJson(this);
}
响应构建器
Could not generate `toJson` code for `studentRoom`.
To support the type `Room` you can:
* Use `JsonConverter`
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonConverter-class.html
* Use `JsonKey` fields `fromJson` and `toJson`
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/fromJson.html
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/toJson.html
package:untitled1/model/student.dart:11:14
╷
11 │ final Room studentRoom;
│ ^^^^^^^^^^^
╵
这个问题是构建器是构建器是搜索房间Tojson和Fromjson不是RoomModel,我使用了JSONKEY,但这无济于事,如何解决该问题?谢谢。
Hello i have 2 parent class Student and Room, which two of them inheritance class model StudentModel and RoomModel, i am try to generate json converter using Json_Serializable Library on Model Class, but when i try to generate with build_runner its show error like this :
My Code
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'student.g.dart';
/// * Student & StudentModel
class Student extends Equatable {
final int id;
final String name;
final Room studentRoom;
const Student({this.id = 0, this.name = "", this.studentRoom = const Room()});
@override
List<Object?> get props => [id, name];
}
@JsonSerializable(explicitToJson: true)
class StudentModel extends Student {
const StudentModel({int id = 0, String name = "", RoomModel studentRoom = const RoomModel()});
factory StudentModel.fromJson(Map<String, dynamic> json) => _$StudentModelFromJson(json);
Map<String, dynamic> toJson() => _$StudentModelToJson(this);
}
/// * Room & RoomModel
class Room extends Equatable {
final int id;
final String roomName;
const Room({this.id = 0, this.roomName = ""});
@override
List<Object?> get props => [id, roomName];
}
@JsonSerializable()
class RoomModel extends Room {
const RoomModel({int id = 0, String roomName = ""}) : super(id: id, roomName: roomName);
factory RoomModel.fromJson(Map<String, dynamic> json) => _$RoomModelFromJson(json);
Map<String, dynamic> toJson() => _$RoomModelToJson(this);
}
Response Builder
Could not generate `toJson` code for `studentRoom`.
To support the type `Room` you can:
* Use `JsonConverter`
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonConverter-class.html
* Use `JsonKey` fields `fromJson` and `toJson`
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/fromJson.html
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/toJson.html
package:untitled1/model/student.dart:11:14
╷
11 │ final Room studentRoom;
│ ^^^^^^^^^^^
╵
The problem is builder is search for Room toJson and fromJson not RoomModel, i used jsonKey but it doesn't help, how to fix that problem? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用以下代码
use following code