anchor.diff:    return mm.isGetter && !mm.isStatic && !mm.isPrivate;
   }
   
  +/**
  + * Checks if the following [mm] getter method has a corresponding setter method.
  + * Returns `true` if one is found, false otherwise.
  + */
  +bool _hasGetter(mirrors.ClassMirror cm, mirrors.MethodMirror mm) {
  +  var setterDec = cm.instanceMembers[new Symbol(mirrors.MirrorSystem.getName(mm.simpleName) + '=')]; 
  +  return setterDec != null && !setterDec.isPrivate && !setterDec.isStatic && setterDec.isSetter;
  +}
  
positive.code:  * a [ArgumentError] if the input is a scalar value, as it will not
   * produce valid JSON.
   */
  dynamic serialize(Object obj) {
    if (obj == null) {
      return null;
    }
    if (_isPrimitiveType(obj)) { // entry value can only be object, map, or list.
      throw new ArgumentError('Cannot serialize a scalar value into a JSON representation.');
    }
    return _serialize(obj);
  }
  
  /**
   * Recursively serializes the provided [obj].
   * For internal use only.
   */
  dynamic _serialize(Object obj) {
    if (obj == null) {
      return null;
    }
  
negative.code:   }
    
    return data;
  }
  
  /**
   * Deserializes a JSON [String] and maps it to the provided [type]. 
   * Returns the an Object of type passed to [type]
   */
  dynamic deserialize(String json, Type type) {
    if (json == null) {
      return null;
    }
    
    return _deserializeObject(convert.JSON.decode(json), type);
  }
  
  /**
   * Recursive function for mapping a [json] to the provided [type]
   */
  dynamic _deserializeObject(dynamic json, Type type) {
    if (json == null) {
      return null;
    }
    if (_isPrimitiveType(json)) {
      return json;
    }
    
    mirrors.ClassMirror cm = mirrors.reflectClass(type);
    mirrors.InstanceMirror instance = cm.newInstance(_EMPTY_SYMBOL, []);
    var ref = instance.reflectee;
    
    if (ref is List) {
      Type valType = mirrors.reflectType(type).typeArguments.single.reflectedType;
      for (var item in json) {
        ref.add(_deserializeObject(item, valType));
      }
    } else if (ref is Map) {
      Type valType = mirrors.reflectType(type).typeArguments.last.reflectedType;
      for (var key in json.keys) {
        ref[key] = _deserializeObject(json[key], valType);
      }
    } else {
      for (var key in json.keys) {
        Symbol sym = new Symbol(key);
        var dec = cm.instanceMembers[sym];
        if (dec != null) {
          if (dec is mirrors.VariableMirror && _isSerializableVariable(dec)) {
            instance.setField(sym, _deserializeObject(json[key], dec.type.reflectedType));
          } else if (dec is mirrors.MethodMirror) {
            if (_hasGetter(cm, dec) && _isSerializableGetter(dec)) {
              instance.setField(sym, _deserializeObject(json[key], dec.returnType.reflectedType));
            }
          }
        }
        
      }
    }
    return ref;
  }
  
  /**
  