Agregué esta respuesta simplemente porque estoy usando una solución alternativa que no requiere anular la clase System.Web.Mvc.Controller. Agrego los siguientes métodos de extensión a la clase System.Web.Mvc.Controller. El único "beneficio" de esta solución es que no requiere que cambie la clase base de las clases de controlador generadas por el código. De lo contrario, es funcionalmente equivalente a la respuesta aceptada.
public static JsonResult ToJsonResult(this Controller controller,
object target,
string contentType,
Encoding contentEncoding,
JsonRequestBehavior behavior)
{
if (target != null)
{
if (target.GetType().HasAttribute<DataContractAttribute>())
{
return new DataContractJsonResult() { ContentType = contentType, ContentEncoding = contentEncoding, JsonRequestBehavior = behavior, Data = target };
}
}
return new JsonResult() { ContentType = contentType, ContentEncoding = contentEncoding, JsonRequestBehavior = behavior, Data = target };
}
public static JsonResult ToJsonResult(this Controller controller, object target)
{
return controller.ToJsonResult(target, null, null, JsonRequestBehavior.DenyGet);
}
public static JsonResult ToJsonResult(this Controller controller, object target, string contentType)
{
return controller.ToJsonResult(target, contentType, null, JsonRequestBehavior.DenyGet);
}
public static JsonResult ToJsonResult(this Controller controller, object target, string contentType, Encoding contentEncoding)
{
return controller.ToJsonResult(target, contentType, contentEncoding, JsonRequestBehavior.DenyGet);
}
public static JsonResult ToJsonResult(this Controller controller, object target, string contentType, JsonRequestBehavior behavior)
{
return controller.ToJsonResult(target, contentType, null, behavior);
}
En mi solicitud, puedo reemplazar el controlador por defecto y utilizar el serializador JSON.NET si el tipo tiene el atributo DataContract. Esta funcionalidad está encapsulada en la clase DataContractJsonResult, que no está incluida, pero está modelada después de la clase en la respuesta aceptada a esta pregunta.
relacionado: http://stackoverflow.com/questions/7109967/using-json-net-as-default-json-serializer-in-asp-net-mvc-3-is-it-possible –
Pregunté esto pregunta 2 semanas antes del duplicado vinculado ... ¡Eso hace que la otra cuestione el duplicado! – Tim