Я просто добавил JSON.NET в свой проект, и мне бы хотелось создать метод расширения JsonNet, который ведет себя так же, как метод Json, но использует JSON. NET вместо этого.ASP.NET MVC - метод расширения JSON.NET для контроллера
У меня есть класс, который расширяет здесь JsonResult используя Json.NET:
public class JsonNetResult : JsonResult {
public override void ExecuteResult(ControllerContext context) {
if (context == null)
throw new ArgumentNullException("context");
var response = context.HttpContext.Response;
response.ContentType = !String.IsNullOrEmpty(ContentType)
? ContentType
: "application/json";
if (ContentEncoding != null)
response.ContentEncoding = ContentEncoding;
var serializedObject = JsonConvert.SerializeObject(Data, Formatting.Indented);
response.Write(serializedObject);
}
}
Под методом ExecuteResult, я пытался добавить эти:
public static JsonNetResult JsonNet(this Controller controller, object data) {
var result = new JsonNetResult();
result.Data = data;
return result;
}
public static JsonNetResult JsonNet(this Controller controller, object data, JsonRequestBehavior behavior) {
var result = new JsonNetResult();
result.Data = data;
result.JsonRequestBehavior = behavior;
return result;
}
И тогда у меня контроллер:
public class SomethingController : Controller {
public ActionResult SomeAction() {
object data = SomeClass.GetData();
return JsonNet(data, JsonRequestBehavior.AllowGet);
}
}
И компилятор не может найти метод JsonNet. Даже если вы попробуйте это:
return ((Controller)this).JsonNet(data, JsonRequestBehavior.AllowGet);
все еще не работает.
Если я скопирую код в JsonNet в SomeAction, он отлично работает, поэтому я знаю, что SomethingController может видеть JsonNetResult.
Если это помогает, два класса находятся в отдельных пространствах имен.
Очевидный вопрос: вы добавили правильную инструкцию использования. Что произойдет, если вы напишете Namespace.Class.JsonNet (это, данные, JsonRequestBehavior.AllowGet) – Stilgar