我问一个问题前约飞镖编码/解码为JSON,但是,他们认为,图书馆是不完整的,我决定手动处理的.
目标是将这些对象转换为地图.
class Parent extends Object {
int id;
String name;
List<Child> listChild = new List<Child>();
Map toMap() => {"id":id, "name":name, "listChild":listChild};
}
class Child extends Object {
int id;
String childName;
Map toMap() => {"id":id, "childName":childName};
}
Run Code Online (Sandbox Code Playgroud)
做的时候
print(JSON.encode(parent.toMap()));
Run Code Online (Sandbox Code Playgroud)
我看到它在这里,任何建议如何使这项工作?
if (!stringifyJsonValue(object)) {
checkCycle(object);
try {
var customJson = _toEncodable(object);
if (!stringifyJsonValue(customJson)) {
throw new JsonUnsupportedObjectError(object);
}
_removeSeen(object);
} catch (e) {
throw new JsonUnsupportedObjectError(object, cause : e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Map toMap() => {"id":id, "name":name: "listChild": listChild.map((c) => c.toJson().toList())};
Run Code Online (Sandbox Code Playgroud)
对JSON有效。
import 'dart:convert' show JSON;
...
String json = JSON.encode(toMap());
Run Code Online (Sandbox Code Playgroud)
您还可以使用toEncodeable回调-请参见如何将DateTime对象转换为json
如果您的类结构不包含任何内部类,则遵循
class Data{
String name;
String type;
Map<String, dynamic> toJson() => {
'name': name,
'type': type
};
}
Run Code Online (Sandbox Code Playgroud)
如果你的类使用内部类结构
class QuestionTag {
String name;
List<SubTags> listSubTags;
Map<String, dynamic> toJson() => {
'name': name,
'listSubTags': listSubTags.map((tag) => tag.toJson()).toList()
};
}
class SubTags {
String tagName;
String tagDesc;
SubTags(this.tagName, this.tagDesc);
Map<String, dynamic> toJson() => {
'tagName': tagName,
'tagDesc': tagDesc,
};
}
Run Code Online (Sandbox Code Playgroud)
只需重命名Map toMap()为Map toJson()即可正常工作。=)
void encode() {
Parent p = new Parent();
Child c1 = new Child();
c1 ..id = 1 ..childName = "Alex";
Child c2 = new Child();
c2 ..id = 2 ..childName = "John";
Child c3 = new Child();
c3 ..id = 3 ..childName = "Jane";
p ..id = 1 ..name = "Lisa" ..listChild = [c1,c2,c3];
String json = JSON.encode(p);
print(json);
}
class Parent extends Object {
int id;
String name;
List<Child> listChild = new List<Child>();
Map toJson() => {"id":id, "name":name, "listChild":listChild};
}
class Child extends Object {
int id;
String childName;
Map toJson() => {"id":id, "childName":childName};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7270 次 |
| 最近记录: |