自从Flutter干掉了Dart之后:的SDK镜像,所以不再可能使用像dartson for JSON这样的库来进行对象序列化/反序列化。但是我读到过build_value是另一种实现类似目的的方法。我找不到任何关于如何实现它的好例子,因为它包含了大量的样板代码。有人能给予我一个例子吗?例如,这是我试图序列化为对象的JSON:
{
"name":"John",
"age":30,
"cars": [
{ "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
{ "name":"BMW", "models":[ "320", "X3", "X5" ] },
{ "name":"Fiat", "models":[ "500", "Panda" ] }
]
}
6条答案
按热度按时间63lcw9qa1#
我希望从提供的答案中获得更多细节。尽管它们是很好的建议,但它们太笼统了,我无法理解。因此,在做了自己的研究之后,我将分享我对上面JSON示例的实现,希望它能节省其他人的时间。因此,以下是我遵循的步骤:
依赖性:
构建值:^1.0.1
构建集合:^1.0.0
设备依赖项:
生成运行程序:^0.3.0
内部值生成器:^1.0.1
build.dart
watch.dart
serializers.dart
person.dart
main.dart
我的样例项目也可以在Github Built value sample project上找到
f5emj3cl2#
∮ ∮ ∮
Dart Team的This package在一个单独的文件中生成
fromJson
构造函数和toJson
方法所需的所有内容。依赖项
添加以下依赖项:
型号类别
调整您的模型类,使其包含以下部分:
生成代码
从终端生成 * person. g. dart * 文件:
∮用它∮
然后像这样使用它:
注解
pub run build_runner build
。9cbw7uwe3#
从Dart网站:
convert库提供了一个JsonCodec类,你可以使用它自动地将简单类型(map、list、int、num、string)从和转换为JSON字符串。
解码示例:
编码示例:
如果您希望将JSON扩展到定制的Dart类中,而不是原始对象树中,Hadrien的答案应该会为您指明正确的方向,但我只是想在这里讨论一下,以防其他人尝试使用基本的JSON序列化/反序列化。
jv4diomz4#
您可以使用Jaguar Serializer,它很容易启动,并完美地为Flutter或服务器和Web开发工作。
https://github.com/Jaguar-dart/jaguar_serializer
kg7wmglp5#
您应该为Built_value准备一个配置文件,该文件将解析您的dart源代码并生成. g.dart。一旦准备就绪,json序列化将自动进行。您可以一次性生成这些文件,也可以使用监视命令。
这些文件将添加到与源和dart命令相同的级别
被视为同一个阶级。
下面是我在Flutter项目中使用的配置:
你可能会发现阅读大卫·摩根的所有帖子来了解它的好处是很有用的。这需要一些时间来改变你的想法,但这是一个非常好的模式。
https://medium.com/dartlang/darts-built-value-for-immutable-object-models-83e2497922d4
https://medium.com/dartlang/darts-built-value-for-serialization-f5db9d0f4159
诀窍在于理解sourcegen如何解析类,然后通过添加大量行为(如构建器和序列化器)来丰富类。
noj0wjuj6#