Flutter 中的 JSON ObjectMapper

Posted

技术标签:

【中文标题】Flutter 中的 JSON ObjectMapper【英文标题】:JSON ObjectMapper in Flutter 【发布时间】:2017-04-14 03:24:50 【问题描述】:

我想在 Flutter 中从 JSON 序列化/反序列化 对象。我知道我可以使用来自json.dartJsonDecoder,它为我提供了基于字符串键的LinkedHashMap,但我对ObjectMapper 方法更感兴趣,以便能够键入 strong> 来自反序列化的响应。

我用 Flutter 尝试了 redstone mapper (link) 和 exportable library (link) - 我都无法正确编译。我相信这个问题与 Dart 的反射库有关。

如何使用 Flutter 实现有效的 Object-Json 映射器?

示例代码:

class A 

  @Field()
  String b;


import 'package:redstone_mapper/mapper.dart';
import 'package:redstone_mapper/mapper_factory.dart';

bootstrapMapper();
var desObj = decodeJson(jsonString, A);

错误:

Starting device daemon...
Running lib/main.dart on Nexus 5X...
Dart snapshot generator failed with exit code 254
Errors encountered while loading: 'dart:mirrors': error: line 1 pos 1: unexpected token 'Unhandled'

或者这个:

Error detected in application source code:
error: Failed to load main script:
'package:redstone_mapper/mapper_factory.dart': error: line 4 pos 1: import of dart:mirrors with --enable-mirrors=false
import 'dart:mirrors';

【问题讨论】:

【参考方案1】:

您尝试的库的问题是它们使用dart:mirrors,Flutter 不支持。

您应该尝试使用 codegen 的库,例如 built_value: https://github.com/google/built_value.dart

【讨论】:

使用这个库不仅仅是添加一个简单的'import' 语句。查找我的答案here【参考方案2】:

正如@HarryTerkelsen 建议的那样,Google 提供了 built_value 库。

序列化示例可以在here 找到。 缺点是 built_value 使用生成的 *.g.dart 类来创建序列化程序,所以这个库不是一个简单的“导入和运行”的东西。

有一个示例项目展示了集合序列化。 Collection 和 generated serializer。

简而言之 - 您需要运行 this 来生成您的序列化程序。

编辑:

最后我从头开始编写简单的序列化:

import 'dart:convert';

class ItemDescription 
  String tag;

  String name;

  static ItemDescription deserialize(String str) 
    JsonDecoder decoder = new JsonDecoder();
    var deserializedMap = decoder.convert(str);
    return deserialize(deserializedMap);
  

  static ItemDescription deserializeMap(Map map) 
      ItemDescription description = new ItemDescription();
      description.name = map["name"];
      description.tag = map["symbol"];
      return description;
  

【讨论】:

“deserialize”方法的最后一行是否应该调用“deserializeMap”,而不是它本身? 您能否添加一个如何使用它的示例。提前致谢

以上是关于Flutter 中的 JSON ObjectMapper的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 中的 JSON ObjectMapper

[Flutter] 08-Flutter中的Json转Model

Flutter:如何正确读取 JSON 中的字段?

Firebase Documentsnapshot 映射到 Flutter 中的 Json 对象

Flutter 中的 JSON 数据解析

使用 Flutter FutureBuilder 迭代 JSON 中的对象数组