json - Dart:从字符串中获取枚举?

标签 json parsing enums dart

您好,我在 Google Maps dart 库中有以下类,并希望将 Google Style JSON 解析为 Dart 面向对象格式。

在库中(不能更改!)我有以下枚举:

part of google_maps.src;

@jsEnum
class MapTypeStyleElementType extends JsEnum {
  static final values = <MapTypeStyleElementType>[
    ALL,
    GEOMETRY,
    GEOMETRY_FILL,
    GEOMETRY_STROKE,
    LABELS,
    LABELS_ICON,
    LABELS_TEXT,
    LABELS_TEXT_FILL,
    LABELS_TEXT_STROKE
  ];
  static final ALL = new MapTypeStyleElementType._('all');
  static final GEOMETRY = new MapTypeStyleElementType._('geometry');
  static final GEOMETRY_FILL = new MapTypeStyleElementType._('geometry.fill');
  static final GEOMETRY_STROKE =
      new MapTypeStyleElementType._('geometry.stroke');
  static final LABELS = new MapTypeStyleElementType._('labels');
  static final LABELS_ICON = new MapTypeStyleElementType._('labels.icon');
  static final LABELS_TEXT = new MapTypeStyleElementType._('labels.text');
  static final LABELS_TEXT_FILL =
      new MapTypeStyleElementType._('labels.text.fill');
  static final LABELS_TEXT_STROKE =
      new MapTypeStyleElementType._('labels.text.stroke');
  MapTypeStyleElementType._(o) : super.created(o);
}

这是 JSON 的示例 JSON:
  {
    "elementType": "geometry",
    "stylers": [
      {
        "color": "#f5f5f5"
      }
    ]
  }

这是我尝试过的(我的解析器的一部分):
m.elementType = MapTypeStyleElementType.values[value];

value is the String "geometry" and I want MapTypeStyleElementType.GEOMETRY back



这是错误堆栈跟踪:
EXCEPTION: Invalid argument(s): geometry(anonymous function) @ VM1449:1 VM1449:1 STACKTRACE:(anonymous function) @ VM1449:1 VM1449:1
#0      List.[] (dart:core-patch/growable_array.dart:153)
#1      Parser.getMapStyle.<anonymous closure> (package:xxx/map_component/mapstyle.dart:17:59)
#2      _HashVMBase&MapMixin&&_LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:348)
#3      Parser.getMapStyle (package:xxx/map_component/mapstyle.dart:15:13)

我尝试的是从给定的字符串 简单地创建足够的枚举。不为每个值创建 if/else 语句 (因为库有数百个值的枚举,这真的很重要!)。不幸的是,构造函数是私有(private)的,我怎么能做到这一点?

最佳答案

JsEnum扩展 JsRef它将字符串存储为私有(private)变量:_value .

然而_value通过函数暴露:asJs :

/// Returns the underlying js value corresponding to [o] if [o] is a [JsRef]
/// (usually [JsEnumBase] or [JsInterface]). Otherwise it returns [o].
asJs(o) => o is JsRef ? o._value : o;

关于json - Dart:从字符串中获取枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42724263/

相关文章:

json - 如何在 servicestack json 序列化程序中省略仅获取属性?

ios - 在 swift 2.0 中解析 JSON 时出错

parsing - 在 Idris 中使用类型谓词生成运行时证明

parsing - haskell 中的暂停点何时应该与额外的 "space"一起使用?

c++ - 如何在不收到编译器警告的情况下使用 C++ 枚举

json - PowerShell:包含特殊字符的ConvertTo-Json问题

json - 在 AS3 中,如何检查两个 JSON 对象是否相等?

scala - 我应该更喜欢 Scala 中的密封类还是枚举?

mysql - 在 phpmyadmin 中仅将几个值设置为要枚举的域

json - 使用CURL将JSON导入Elasticsearch 5.1