anchor.diff:  }
   
   installJsonConverters() {
  -  Converter.converters.add(new ObjectToJson());
  -  Converter.converters.add(new JsonToObject());
  +  Converters.add(new ObjectToJson());
  +  Converters.add(new JsonToObject());
   }
   
  -class ObjectToJson extends Converter {
  +class ObjectToJson extends ConverterBase<Object, Json> {
     ObjectToJson() : super(new TypeReflection(Object), new TypeReflection(Json));
   
  -  convert(object, TypeReflection targetReflection) {
  +  Json convertTo(Object object, TypeReflection targetReflection) {
       var simplified = _convert(object);
       return new Json(JSON.encode(simplified));
     }
  
positive.code:   }
  }
  
  class JsonToObject extends Converter {
    JsonToObject() : super(new TypeReflection(Json), new TypeReflection(Object));
  
    convert(Json json, TypeReflection targetReflection) {
      var decoded = JSON.decode(json.toString());
      return _convert(decoded, targetReflection);
    }
  
negative.code:             (c) => c.source.sameOrSuper(source) && c.target.sameOrSuper(target),
          orElse: () => throw new ConverterException('No converter found from ' + source.toString() + ' to ' + target.toString() + '.'));
    }
  }
  
  class ConverterBase<S, T> extends Converter<S, T> {
    TypeReflection source;
    TypeReflection target;
    Transformation conversion;
  
    ConverterBase(this.source, this.target, [this.conversion]);
  
    T convert(S object) {
      return convertTo(object, target);
    }
  
    T convertTo(S object, TypeReflection targetReflection) {
      return conversion(object);
    }
  }
  