Estoy tratando de hacer una implementación personalizada de un MediaTypeFormatter
, pero el método bool CanReadType(Type type)
siempre se llama con el tipo IKeyValueModel
, en lugar de mi tipo MyProduct
.Custom MediaTypeFormatter, ¿por qué IKeyValueModel y no mi tipo de modelo?
En mi controlador de API que tengo:
[HttpPost]
public Task Save(MyProduct product)
he visto algunos ejemplos (example 1, example 2), y también he probado el código:
protected override bool CanReadType(Type type)
{
if (type == typeof(IKeyValueModel))
return false;
return true;
}
Pero cuando me siento un " MissingMethodException: no se definió ningún constructor sin parámetros para este objeto ", porque mi tipo de modelo no tiene constructor sin parámetros. Por lo tanto, parece que CanReadType
devuelve false en IKeyValueModel
, la infraestructura usa otro formateador de tipos de medios. En realidad, el método OnReadFromStreamAsync
nunca se golpea.
Quiero ser capaz de controlar cómo mis modelos se deserializan, quiero obtener el tipo real y no IKeyValueModel
.
Esto ya estaba funcionando muy bien en MVC con carpetas modelo.
Saludos.
ACTUALIZACIÓN 2012/05/29:
Si quito el formateador JSON por defecto funciona:
public static void RegisterApis(HttpConfiguration config)
{
config.Formatters.Clear();
Pero entonces yo le gustaría mantener tanto, ¿cómo podría indicar cuál me ¿quiere usar?
Atentamente.
¿Por qué necesita un 'MediaTypeFormatter' personalizado? – Aliostad
Pruebe el último código (compilación nocturna), no hay IKeyValueModel en la fuente actual. Ha sido eliminado/eliminado por el equipo. http://aspnetwebstack.codeplex.com/SourceControl/network/forks/BradWilson/AspNetWebStack/changeset/changes/5648aed69341 – user960567
@Aliostad Necesito un MediaTypeFormatter personalizado para controlar cómo mis objetos se serializan y se deserializan a JSON. – vtortola