Flutter中如何从枚举值获取对应的JsonKey名称?
如何从Flutter枚举中获取@JsonValue标注的字符串值
你可以通过两种方式获取Bear.blackBear对应的"black_bear"字符串:
方法一:手动扩展枚举
给Bear枚举添加扩展类,通过switch语句返回对应的值:
enum Bear { panda, @JsonValue("black_bear") blackBear, @JsonValue("brown_bear") brownBear, } extension BearJsonValue on Bear { String get jsonValue { switch (this) { case Bear.panda: return 'panda'; case Bear.blackBear: return 'black_bear'; case Bear.brownBear: return 'brown_bear'; } } }
使用方式:
String value = Bear.blackBear.jsonValue; // 得到"black_bear"
方法二:利用json_serializable自动生成代码
如果已经依赖json_annotation和json_serializable包,可通过自动生成代码简化操作:
- 修改枚举代码,添加注解并指定part文件:
import 'package:json_annotation/json_annotation.dart'; part 'bear.g.dart'; @JsonSerializable() enum Bear { panda, @JsonValue("black_bear") blackBear, @JsonValue("brown_bear") brownBear, }
- 运行build命令生成代码:
flutter pub run build_runner build
- 直接调用生成的
toJson()方法获取值:
String value = Bear.blackBear.toJson(); // 得到"black_bear"
两种方法各有优劣:手动扩展适合枚举成员较少的场景,无需额外配置;自动生成方式更适配复杂枚举,能避免手动编写switch时的遗漏或错误。
内容的提问来源于stack exchange,提问作者user3808307
相关产品推荐
相关产品推荐

