【问题标题】:How to properly serialize/deserialize a map in dart/flutter?如何在 dart/flutter 中正确序列化/反序列化地图?
【发布时间】:2020-08-24 18:26:02
【问题描述】:

您能否展示如何在 dart 中序列化/反序列化地图到/从 json?例如,这里有一个简单的数据类:

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,
  };
}

这是地图中使用的 SimpleData 类:

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() 时,会抛出以下错误:

将对象转换为可编码对象失败:_LinkedHashMap len:2

您知道toJson()/fromJson() 方法有什么问题吗? 谢谢。

【问题讨论】:

    标签: json flutter dart


    【解决方案1】:

    编码/解码是正确的,只是 JSON 只允许字符串作为键。 将_mapHell 更改为Map&lt;String, SimpleData&gt; 即可。

    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),
      };
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-05
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 2021-01-22
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      相关资源
      最近更新 更多