[英]How to deserialize an Object from Map (DART)
如何從對象的序列化/反序列化映射重新創建對象?
import 'dart:convert';
class InternalTx {
int a;
bool b;
InternalTx(this.a, this.b);
factory InternalTx.fromJson(Map<String, dynamic> json) =>
InternalTxFromJson(json);
Map<String, dynamic> toJson() => InternalTxToJson(this);
}
InternalTx InternalTxFromJson(Map<String, dynamic> json) => InternalTx(
json['a'] as int,
json['b'] as bool,
);
Map<String, dynamic> InternalTxToJson(InternalTx instance) => <String, dynamic>{
'a': instance.a,
'b': instance.b,
};
main() {
Map<String, InternalTx> m = {};
for (int i=0; i<10; i++)
{
InternalTx itx = InternalTx(i, false);
m["Hello: $i"] = itx;
}
String serM = jsonEncode(m);
print(serM);
////SERILIZED OKAY
Map<String, dynamic> n = jsonDecode(serM);
InternalTx newItx = n["Hello: 0"]; <-- Problem here.
print(newItx);
}
輸出:
{"Hello: 0":{"a":0,"b":false},"Hello: 1":{"a":1,"b":false},"Hello: 2":{"a":2,"b":false},"Hello: 3":{"a":3,"b":false},"Hello: 4":{"a":4,"b":false},"Hello: 5":{"a":5,"b":false},"Hello: 6":{"a":6,"b":false},"Hello: 7":{"a":7,"b":false},"Hello: 8":{"a":8,"b":false},"Hello: 9":{"a":9,"b":false}}
Uncaught Error: TypeError: Instance of '_JsonMap': type '_JsonMap' is not a subtype of type 'InternalTx'
這里缺少什么來正確反序列化對象映射? 謝謝!
您需要實際調用InternalTx.fromJson
構造函數,因為這不是自動完成的。 所以你的最后一段代碼應該是:
////SERILIZED OKAY
Map<String, dynamic> n = jsonDecode(serM);
InternalTx newItx = InternalTx.fromJson(n["Hello: 0"]);
print(newItx); // Instance of 'InternalTx'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.