首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中像Gson这样的扑克飞镖中有什么可用的平等图书馆

在Java中像Gson这样的扑克飞镖中有什么可用的平等图书馆
EN

Stack Overflow用户
提问于 2019-06-11 05:27:57
回答 2查看 0关注 0票数 0

是否有可用于保存对象并恢复它的库。 在android java中我们使用Gson来做这个但是在颤动中没有Gson

EN

回答 2

Stack Overflow用户

发布于 2019-06-11 13:57:47

你有这个build_value包。

有了它,您可以序列化和反序列化对象。

首先,您需要声明对象:

代码语言:javascript
复制
part 'foo.g.dart'; 

abstract class Foo
    implements Built<Foo, FooBuilder>{
  static Serializer<Foo> get serializer => _$fooSerializer;

  String get fooValue;

  @nullable int get creationDate;

  Foo._();

  factory Foo([updates(FooBuilder b)]) = _$Foo;
}

所有对象都必须遵循这个框架模型: - 作为一个抽象类implmenting Built - 声明一个static Serializergetter值 - 声明_() - 声明a factory - .part在顶部声明一个,以便我们可以生成一个模型文件

我建议您复制该类并仅更改名称和模型。

然后,如果要序列化它,则必须创建一个Serializer

代码语言:javascript
复制
import 'package:built_collection/built_collection.dart';
import 'package:built_value/serializer.dart';
import 'package:built_value/standard_json_plugin.dart';

part 'serializers.g.dart';

@SerializersFor(const [
  Foo // declare here all the classes to be serialized
])

Serializers serializers = _$serializers;

Serializers standardSerializers =
(serializers.toBuilder()
  ..add(CustomDateTimeSerializer()) // delcare here custom plugins
  ..addPlugin(StandardJsonPlugin())
  ).build();

}

作为奖励,我将在这里发布一个自定义序列化器的时间值:

代码语言:javascript
复制
/// Serializer for [DateTime] using Milliseconds instead of MicroSeconds
///
/// An exception will be thrown on attempt to serialize local DateTime
/// instances; you must use UTC.
class CustomDateTimeSerializer implements PrimitiveSerializer<DateTime> {
  final bool structured = false;
  @override
  final Iterable<Type> types = new BuiltList<Type>([DateTime]);
  @override
  final String wireName = 'DateTime';

  @override
  Object serialize(Serializers serializers, DateTime dateTime,
      {FullType specifiedType = FullType.unspecified}) {
    if (!dateTime.isUtc) {
      throw new ArgumentError.value(
          dateTime, 'dateTime', 'Must be in utc for serialization.');
    }

    return dateTime.microsecondsSinceEpoch / 1000;
  }

  @override
  DateTime deserialize(Serializers serializers, Object serialized,
      {FullType specifiedType = FullType.unspecified}) {
    final microsecondsSinceEpoch = serialized as int;
    return new DateTime.fromMicrosecondsSinceEpoch(microsecondsSinceEpoch * 1000 * 1000,
        isUtc: true);
  }
}

在此之后,请确保在项目文件夹的根目录中的终端中运行以下命令:

代码语言:javascript
复制
flutter packages pub run build_runner watch

The log will help you find errors that you have in your code.

Then, you will have the .g files for each model.

You can now serialize the object with:

代码语言:javascript
复制
import 'dart:convert' as json;

//...
var jsonEncoded = json.jsonEncode(standardSerializers.serializeWith(Foo.serializer, foo));

Bonus tip: this can also be used to have a builder for your object:

代码语言:javascript
复制
var foo = Foo((b) => b
   ..fooValue = "foo"
   ..creationDate = DateTime.now()
);
票数 0
EN

Stack Overflow用户

发布于 2019-06-11 15:04:33

因为Flutter不支持代码反射所以在Flutter中不可能使用像GSON这样的库。反射干扰树摇动,颤振需要清理未使用的代码并提供一个紧凑的应用程序。

更多关于主题和替代方案

您可以使用此站点将JSON转换为类,并自动从json方法准备toJson。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100009090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档