我无法将服务器响应转换为模型类。以下是我的代码。
void main() {
//JSON to parse
var strJson = """{
\"person\": [
{\"name\": \"Mahendra\", \"age\": 28},
{\"name\": \"Test\", \"age\": 25}
]
}""";
var data = json.decode(strJson);
print("json: $data");
var result = PersonResponse<Person>.fromJSON(data);
print("result: ${result.persons}");
}
模型类
class Person {
String name;
int age;
Person.fromJSON(Map json) {
this.name = json["name"];
this.age = json["age"];
}
}
class PersonResponse<T> {
List<T> persons;
PersonResponse.fromJSON(Map json) {
this.persons = json["person"];
}
}
运行此代码时,无法将服务器响应转换为模型类。出现以下错误...
未处理的异常:类型
List<dynamic>
不是类型List<Person>
的子类型
我的代码有什么问题。有什么建议吗?
答案 0 :(得分:1)
尝试
// To parse this JSON data, do
//
// final person = personFromJson(jsonString);
import 'dart:convert';
Person personFromJson(String str) => Person.fromJson(json.decode(str));
String personToJson(Person data) => json.encode(data.toJson());
class Person {
List<PersonElement> person;
Person({
this.person,
});
factory Person.fromJson(Map<String, dynamic> json) => Person(
person: List<PersonElement>.from(json["person"].map((x) => PersonElement.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"person": List<dynamic>.from(person.map((x) => x.toJson())),
};
}
class PersonElement {
String name;
int age;
PersonElement({
this.name,
this.age,
});
factory PersonElement.fromJson(Map<String, dynamic> json) => PersonElement(
name: json["name"],
age: json["age"],
);
Map<String, dynamic> toJson() => {
"name": name,
"age": age,
};
}
答案 1 :(得分:1)
我找到3个选择:
您可以放弃使用泛型,而可以将List<T> persons;
替换为List<dynamic> persons;
。实际上,您的代码仅适用于此更改。
您可以放弃使用泛型,而将List<T> persons;
替换为List<Person>
并将其映射到fromJson
中。
class PersonResponse {
List<Person> persons;
PersonResponse.fromJSON(Map json) {
List<dynamic> list = json["person"];
persons = list.map((element) => Person.fromJSON(element)).toList();
}
}
class PersonResponse<T extends JsonSerializable> {
List<T> persons;
PersonResponse.fromJSON(Map json) {
List<dynamic> list = json["person"];
persons = list.map((element) => T.fromJSON(element)).toList();
}
}
答案 2 :(得分:0)
不要手动将 JSON 转换为 dart 对象。因为有些时候 JSON 响应非常复杂,所以可能会发生你写不正确的数据类型。所以总是使用在线JSON to Dart Convertor。它可以免费使用。这将减少出错的机会。