anchor.diff:      cm.declarations.forEach((Symbol sym, dynamic dec) {
         if (dec is mirrors.VariableMirror) {
           if (_isSerializableVariable(dec)) {
  -          data[mirrors.MirrorSystem.getName(sym)] = _serialize(im.getField(dec.simpleName).reflectee);
  +          data[mirrors.MirrorSystem.getName(sym)] = _serializeObject(im.getField(dec.simpleName).reflectee);
           }
         } else if (dec is mirrors.MethodMirror) {
  -        if (_isSerializableGetter(dec)) {
  -          data[mirrors.MirrorSystem.getName(sym)] = _serialize(im.getField(dec.simpleName).reflectee);
  +        if (_hasGetter(cm, dec) && _isSerializableGetter(dec)) {
  +          data[mirrors.MirrorSystem.getName(sym)] = _serializeObject(im.getField(dec.simpleName).reflectee);
           }
         }
       });
  
positive.code:   if (obj is Map) {
      // what if key is not string?
      for (var k in obj.keys) {
        data[k] = _serialize(obj[k]);
      }
      return data;
    }
  
negative.code:   if (obj is List) {
      List<Object> list = new List<Object>();
      for (var e in obj) {
        list.add(_serializeObject(e));
      }
      return list;
    }
  