簡體   English   中英

如何從地圖反序列化對象(DART)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM