dart 中的 json_serializable 枚举值

Posted

技术标签:

【中文标题】dart 中的 json_serializable 枚举值【英文标题】:json_serializable enum values in dart 【发布时间】:2019-08-23 06:11:57 【问题描述】:

我是飞镖开发的新手...

我不知道如何将 Json_serializable 包与枚举类型一起使用。我的数据库将枚举值作为整数,但看起来 JSON_Serializable 希望该值是枚举名称的字符串表示形式。IE:

枚举分类无,打开,非活动,关闭,默认,删除,ZeroRecord

数据库的分类是一个整数值(4:这是默认值)

从 JSON 加载时出现异常

例外:无效参数:4 不是支持的值之一:无、打开、非活动、关闭、默认、删除、ZeroRecord

如何强制 JSON_Serializable 将 4 视为“默认”?

【问题讨论】:

【参考方案1】:

基本上你有两个选择。 (AFAIK)

在您的枚举文件中,您可以为每个值添加@JsonValue(VALUE) 注释,json_serializable 将使用该值而不是名称,它实际上可以是任何值。

你可以让你的枚举如下:

enum Classification 
  @JsonValue(0)
  None,

  @JsonValue(1)
  Open,

  @JsonValue(2)
  Inactive,

  @JsonValue(3)
  Closed,

  @JsonValue(4)
  Default,

  @JsonValue(5)
  Delete,

  @JsonValue(6)
  ZeroRecord,

如果你真的想要一个默认值,你可以做的另一件事是使用@JsonKey 注释并将unknownEnumValue 属性设置为所需的默认值

class MyModel 
  @JsonKey(unknownEnumValue: Classification.Default)
  Classification classification;

【讨论】:

以上是关于dart 中的 json_serializable 枚举值的主要内容,如果未能解决你的问题,请参考以下文章

Dart null 安全性和使用 json_serializable 将 JSON 解析为模型

具有枚举值的映射的 Dart json_serializable defaultValue

Dart(*)JSON序列化

使用 json_serializable (flutter packages pub run build_runner build) 问题

Flutter 生成.g.dart文件

在项目中是否有任何合理的方法将json_serializable模型和build_value模型进行混合?