flutter - 如何在dart的built_value序列化中将Date ISO String反序列化为DateTime对象?

标签 flutter dart built-value

我想序列化一个 json 对象,包括 ISOString使用内置值将日期转换为 dart 对象。

这是一个示例 json:

{
  "title": "test",
  "description": "test description",
  "date": "2020-06-05T11:42:38.585Z",
  "creator": {
    "email": "test@test.com"
  }
}

这是模型:
abstract class Post implements Built<Post, PostBuilder> {
  @nullable
  @BuiltValueField(wireName: '_id')
  String get id;

  String get title;

  String get description;

  DateTime get date;

  @nullable
  User get creator;

  Post._();

  static Serializer<Post> get serializer => _$postSerializer;

  factory Post([updates(PostBuilder b)]) = _$Post;

  factory Post.fromJson(Map<String, dynamic> map) =>
      serializers.deserializeWith(Post.serializer, map);

  Map<String, dynamic> toJson() =>
      serializers.serializeWith(Post.serializer, this);
}

这是错误:
Deserializing '[title, test1, description, test1 description, date, 2020-06-05T...' to  
'Post' failed due to: Deserializing '2020-06-05T11:42:38.585Z' to 'DateTime' failed due  
to: type 'String' is not a subtype of type 'int' in type cast

我该如何解决?

最佳答案

您需要添加自定义 DateTime您可以在此处找到序列化程序:Iso8601DateTimeSerializer

  • 创建一个新的 dart 文件(我将其命名为 iso8601_date_time_serializer.dart)
  • 粘贴来自 1 的代码
  • 将导入添加到您的 serializers.dart 文件(导入 'iso8601_date_time_serializer.dart';)
  • 编辑您的序列化程序。 .dart 文件
  • Serializers _$serializers = (new Serializers().toBuilder()
    
      ..add(Iso8601DateTimeSerializer())
    
      ..add(Post.serializer) // I assume you have this in yours
    
      ..addPlugin(StandardJsonPlugin()))
    
    .build();
    
    请注意,如果您使用 build_runner 重新生成代码,此修改可能会被删除。 .
    如果你想深入挖掘,我从 built_value GitHub issue 454 得到了答案。

    关于flutter - 如何在dart的built_value序列化中将Date ISO String反序列化为DateTime对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62392804/

    相关文章:

    flutter - 是否可以将flutter源映射或源代码上传到 Sentry 以进行更好的调试?

    java - 名为 'Flutter' 的文件已存在于此位置

    variables - 如何在Dart/Flutter上覆盖变量

    Flutter 渡轮自定义标量序列化器 "has non-dynamic type"

    json - 有什么合理的方法可以在项目中混合使用 json_serializable 和 built_value 模型吗?

    firebase - flutter/Dart 错误 : The argument type 'Future<File>' can't be assigned to the parameter type 'File'

    dart - 如何在 Flutter 中订购 ListView

    ios - 从字典访问 FlutterStandardTypedData 时出现 "[__NSArrayI data]: unrecognized selector"

    flutter - Flutter:如何使用setAll(0,list)将列表插入另一个列表

    dart - 如何在内置值枚举类中定义字段?