Dodaję tę odpowiedź po prostu dlatego używam alternatywnego rozwiązania, które nie wymaga nadrzędnych klasę System.Web.Mvc.Controller. Dodaję następujące metody rozszerzenia do klasy System.Web.Mvc.Controller. Jedyną "zaletą" tego rozwiązania jest to, że nie wymaga to zmiany klasy bazowej generowanych przez kod klas Controller. W przeciwnym razie jest funkcjonalnie równoważny z zaakceptowaną odpowiedzią.
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);
}
W mojej aplikacji zastąpić domyślnego kontrolera i użyć serializatora Json.NET jeśli typ posiada atrybut DataContract. Ta funkcjonalność jest enkapsulowana w klasie DataContractJsonResult, która nie jest zawarta, ale jest wzorowana na klasie w zaakceptowanej odpowiedzi na to pytanie.
powiązane: http://stackoverflow.com/questions/7109967/using-json-net-as-default-json-serializer-in-asp-net-mvc-3-is-possible –
Zapytałem pytanie 2 tygodnie przed połączonym duplikatem ... To sprawia, że drugie pytanie jest duplikatem! – Tim