【发布时间】:2014-08-29 21:58:47
【问题描述】:
我刚刚将 JSON.NET 添加到我的项目中,我想创建一个名为 JsonNet 的扩展方法,它的行为方式与 Json 方法相同,但改用 JSON.NET。
我这里有一个使用 JSON.NET 扩展 JsonResult 的类:
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。
如果有帮助,这两个类位于不同的命名空间中。
【问题讨论】:
-
显而易见的问题是您是否添加了正确的 using 语句。如果你写 Namespace.Class.JsonNet(this, data, JsonRequestBehavior.AllowGet) 会发生什么
标签: c# asp.net-mvc json json.net extension-methods