json - 从 json 解析枚举
问题描述
我有一个enum
enum Mode { standard, relative, fixed }
extension ModeMap on Mode {
static const valueMap = {
Mode.standard: "standard",
Mode.relative: "relative",
Mode.fixed: "fixed",
};
String? get value => valueMap[this];
}
以及使用此枚举和方法的模型fromJson
:
class Settings {
Mode mode;
String name;
Settings({
required this.mode,
required this.name,
});
Settings.fromJson(Map<String, dynamic> json)
: mode = Mode[json['Mode'].toString()] as Mode,
name = json['Name'],
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['Mode'] = mode.value;
data['Name'] = name;
return data;
}
}
但是,似乎我无法以这种方式将值从 json 转换为我的枚举。这样做的正确方法是什么?
解决方案
你可以做你对value
吸气剂所做的相反的事情。以下代码fromString
通过反转您Mode
的. 然后,您可以在工厂构造函数中使用它。String
valueMap
ModeMap.fromString(json['Mode'])
enum Mode { standard, relative, fixed }
extension ModeMap on Mode {
static const valueMap = {
Mode.standard: "standard",
Mode.relative: "relative",
Mode.fixed: "fixed",
};
String? get value => valueMap[this];
static Mode fromString(String input) {
final reverseValueMap = valueMap.map<String, Mode>((key, value) => MapEntry(value, key));
Mode? output = reverseValueMap[input];
if(output == null) {
throw 'Invalid String Input';
}
return output;
}
}
class Settings {
Mode mode;
String name;
Settings({
required this.mode,
required this.name,
});
Settings.fromJson(Map<String, dynamic> json)
: mode = ModeMap.fromString(json['Mode']),
name = json['Name'];
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['Mode'] = mode.value;
data['Name'] = name;
return data;
}
}
推荐阅读
- php - nginx+PHP 冻结对同一台机器的调用
- java - org.apache.ibatis.executor.ExecutorException:无法提交,事务已关闭 - 批量插入时
- mongodb - 对 Dockerfile 中的 CMD/ENTRYPOINT 感到困惑
- visual-studio-code - 在 Visual Studio Code 中调试之前如何自动运行构建任务?
- ubuntu-16.04 - 如何为 minikube 启用 Tab 补全?
- c++ - gRPC trace.cc 的方法 TraceFlagList::Add(TraceFlag* flag) 使其链表循环到自身
- excel - 写相同公式的不同方式给出不同的结果?
- swift - 我无法在 Swift 5 的 UIButton 中放置图像
- c# - 使用实体框架获取查询公共 api 的用户列表
- matlab - 绘制存储为 3D 矩阵的多个 2D 图形