我试图编写一个抽象的JsonSerializable
类,以便具有这样的功能:
abstract class JsonSerializable<T>{
T fromMap(Map<String,dynamic> map);
Map<String,dynamic> toMap();
T fromJsonString(String jsonString){
return fromMap(json.decode(jsonString));
}
String toJsonString(){
return json.encode(toMap());
}
}
我的第一个问题是fromMap
和fromJsonString
不能用作构造函数,因此我认为这样做可以做到这一点:
class Foo extends JsonSerializable<Foo>{
Foo();
factory Foo.fromMap(Map<String,dynamic> map){
return fromMap(map);
}
@override
Foo fromMap(Map<String, dynamic> map) {
// TODO: implement fromMap
return null;
}
@override
Map<String, dynamic> toMap() {
// TODO: implement toMap
return null;
}
}
现在,由于我试图从工厂构造函数访问实例方法,因此上面的代码使Dart分析器抱怨。
所以我以为我可以实现这些方法而无需继承和覆盖它们(我知道,这是一个肮脏的解决方案),但这仍然无法为我提供一些信息,只能告诉“嘿,此类具有此方法”
我是否完全忽略了这一点?
是否有一个不涉及代码生成插件的干净解决方案,该插件显然不支持泛型?
我的API响应具有以下所有结构:
{
"key1":"value1",
"otherStuffKey":["blah", "blah"],
"data": <the object I want to generalize>
}
我需要泛型,因为我想将序列化为data
值的对象解析为具有相同行为的不同类。
PS:如果我要解析响应,则toMap
和toJsonString
方法是无用的,但是它们对于完成圆圈并允许使用也使用此JsonSerializable
来序列化请求。