我的模型中有一个DateTime字段,其值为空。我正在使用json_serializable库来处理序列化/反序列化。序列化具有空值的dattime字段时失败。
@JsonSerializable(nullable: false, includeIfNull: false)
class Customer{
DateTime eventTime; //Field with null value
//others
factory Customer.fromJson(Map<String, dynamic> json) => _$CustomerFromJson(json);
Map<String, dynamic> toJson() => _$CustomerToJson(this);
}
例外:
9-10-27 11:28:47.724 31431-31463/E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: NoSuchMethodError: The method 'toIso8601String' was called on null.
Receiver: null
Tried calling: toIso8601String()
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1 _$CustomerToJson (/models/customer.g.dart:74:41)
答案 0 :(得分:1)
如果值可以为null,则需要使用可为null的属性
@JsonKey(nullable: false)
DateTime eventTime;
可空属性
如果为true,则在对JSON进行编码以及从JSON解码null和不存在的值时,可以很好地处理null字段。
设置为false可以消除为带注释的字段生成的代码中的空验证,从而减小了代码大小。如果遇到null值,则可能在运行时引发错误,但是如果原始类很关键,则原始类也应该实现null运行时验证。
默认值null,指示应从封闭类的JsonSerializable.nullable批注中获取行为。