在Flutter中,如果你想要将更多的JSON数据添加到现有的模型类中,通常涉及到的是对Dart语言中的类进行扩展,以便能够处理更复杂的JSON结构。以下是一些基础概念和相关步骤:
假设你有一个现有的模型类User
,现在需要添加更多的字段:
class User {
final String name;
final int age;
User({required this.name, required this.age});
factory User.fromJson(Map<String, dynamic> json) {
return User(
name: json['name'],
age: json['age'],
);
}
Map<String, dynamic> toJson() {
return {
'name': name,
'age': age,
};
}
}
现在,假设API返回了新的字段email
和address
,你可以这样扩展模型类:
class User {
final String name;
final int age;
final String? email; // 使用?表示该字段可以为空
final Address? address; // 假设有一个Address类
User({
required this.name,
required this.age,
this.email,
this.address,
});
factory User.fromJson(Map<String, dynamic> json) {
return User(
name: json['name'],
age: json['age'],
email: json['email'],
address: json['address'] != null ? Address.fromJson(json['address']) : null,
);
}
Map<String, dynamic> toJson() {
var json = {
'name': name,
'age': age,
};
if (email != null) {
json['email'] = email;
}
if (address != null) {
json['address'] = address!.toJson();
}
return json;
}
}
class Address {
final String street;
final String city;
Address({required this.street, required this.city});
factory Address.fromJson(Map<String, dynamic> json) {
return Address(
street: json['street'],
city: json['city'],
);
}
Map<String, dynamic> toJson() {
return {
'street': street,
'city': city,
};
}
}
问题:如果在反序列化时遇到未知字段,Dart会抛出异常。
解决方法:可以使用json_serializable
包来自动生成序列化和反序列化的代码,并处理未知字段。
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
final String name;
final int age;
@JsonKey(ignore: true) // 忽略未知字段
final Map<String, dynamic>? additionalProperties;
User({
required this.name,
required this.age,
this.additionalProperties = const {},
});
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
通过这种方式,你可以轻松地扩展模型类以包含更多的JSON数据,同时保持代码的整洁和可维护性。
领取专属 10元无门槛券
手把手带您无忧上云