Flutter 中的 JSON ObjectMapper
Posted
技术标签:
【中文标题】Flutter 中的 JSON ObjectMapper【英文标题】:JSON ObjectMapper in Flutter 【发布时间】:2017-04-14 03:24:50 【问题描述】:我想在 Flutter 中从 JSON 序列化/反序列化 对象。我知道我可以使用来自json.dart
的JsonDecoder
,它为我提供了基于字符串键的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] 08-Flutter中的Json转Model