簡體   English   中英

如何在飛鏢/顫振中正確序列化/反序列化 map?

[英]How to properly serialize/deserialize a map in dart/flutter?

您能否展示如何在 dart 中序列化/反序列化與 json 之間的映射<>? 例如,這里有一個簡單的數據 Class:

class SimpleData {
  int _blah;
  String _str;

  SimpleData([this._blah, this._str]);

  SimpleData.fromJson(Map<String, dynamic> json) {
    _blah = json['b'];
    _str = json['s'];
  }

  Map<String, dynamic> toJson() => {
    'b' : _blah,
    's' : _str,
  };
}

這是 map 中使用的 SimpleData class:

class MapTest {
  Map<int, SimpleData> _mapHell = Map<int, SimpleData>();

  MapTest() {
    _mapHell[1] = SimpleData(42, "Astfgl");
    _mapHell[666] = SimpleData(1234, "Vassenego");
  }

  MapTest.fromJson(Map<String, dynamic> json) {
    _mapHell = jsonDecode(json['coworkers']);
  }

  Map<String, dynamic> toJson() => {
    'coworkers' : jsonEncode(_mapHell),
  };
}

現在,當調用MapTest.toJson()時,會拋出以下錯誤:

將 object 轉換為可編碼的 object 失敗:_LinkedHashMap len:2

您對toJson()/fromJson()方法有什么想法嗎? 謝謝你。

編碼/解碼是正確的,只是 JSON 只允許字符串作為鍵。 _mapHell更改為Map<String, SimpleData>可以正常工作。

class MapTest {
  final _mapHell = Map<String, SimpleData>(); // Change the Map type

  MapTest() {
    _mapHell['1'] = SimpleData(42, "Astfgl"); // Use int, ie: '1'
    _mapHell['666'] = SimpleData(1234, "Vassenego");
  }

  MapTest.fromJson(Map<String, dynamic> json) {
    _mapHell = jsonDecode(json['coworkers']);
  }

  Map<String, dynamic> toJson() => {
    'coworkers' : jsonEncode(_mapHell),
  };
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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