ASP.NET MVC中的自定义JSON结果

安里

我创建了自定义ActionResult(简体):

public class FastJSONResult : ActionResult
{
    public string JsonData { get; private set; }

    public FastJSONResult(object data)
    {
        JsonData = JSON.Instance.ToJSON(data);
    }

    public override void ExecuteResult(ControllerContext context)
    {
        HttpResponseBase response = context.HttpContext.Response;
        response.ContentType = "application/json";
        response.Output.Write(JsonData);
    }
}

并从我的WebApi控制器中使用它:

public ActionResult GetReport()
{
   var report = new Report();
   return new FastJSONResult(report);
}

现在的问题是,尽管事实是在FastJSONResult构造函数中我的对象可以完美地序列化,但从ExecuteResult未被调用过,因此我最终得到像

{"JsonData":"{my json object as a string value}"}

我究竟做错了什么?

安里

使用自定义格式化程序解决了此问题(简化了发布更少的代码)

public class FastJsonFormatter : MediaTypeFormatter
{
  private static JSONParameters _parameters = new JSONParameters()
  {
    public FastJsonFormatter()
    {
      SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
      SupportedEncodings.Add(new UTF8Encoding(false, true));
    }

    public override bool CanReadType(Type type)
    {
      return true;
    }

    public override bool CanWriteType(Type type)
    {
      return true;
    }

    public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
    {
        var task = Task<object>.Factory.StartNew(() => JSON.Instance.ToObject(new StreamReader(readStream).ReadToEnd(), type));
        return task;
    }

    public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)
    {
      var task = Task.Factory.StartNew(() =>
      {
         var json = JSON.Instance.ToJSON(value, _parameters);
         using (var w = new StreamWriter(writeStream)) w.Write(json);  
      });
      return task;
    }
}

在WebApiConfig.Register方法中:

config.Formatters.Remove(config.Formatters.JsonFormatter);
config.Formatters.Add(new FastJsonFormatter());

现在我可以正确接收json对象: 样品

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将自定义字段添加到Json结果-ASP.NET MVC

来自分类Dev

在ASP.NET WebApi 2中自定义Bearer令牌JSON结果

来自分类Dev

ASP.NET MVC中的自定义错误页面

来自分类Dev

asp.net core mvc 中的自定义授权

来自分类Dev

如何传递自定义查询结果以在asp.net中查看

来自分类Dev

如何传递自定义查询结果以在asp.net中查看

来自分类Dev

C#asp.net MVC使用JSON进行自定义错误处理

来自分类Dev

Ninject在ASP.NET MVC中的自定义验证属性中不起作用

来自分类Dev

Ninject在ASP.NET MVC中的自定义验证属性中不起作用

来自分类Dev

在Asp.net MVC中,如何动态传递自定义属性中的参数

来自分类Dev

asp.net mvc自定义子路由

来自分类Dev

ASP.NET MVC自定义视图路由

来自分类Dev

ASP.NET MVC 5自定义错误页面

来自分类Dev

带线程的ASP.NET MVC自定义验证

来自分类Dev

自定义路由ASP.NET MVC

来自分类Dev

ASP.NET Core MVC自定义站点变量

来自分类Dev

ASP.Net MVC Kendo网格的自定义分页

来自分类Dev

ASP.NET MVC 4自定义句柄错误

来自分类Dev

asp.net mvc自定义子路由

来自分类Dev

自定义标头ASP.net MVC

来自分类Dev

ASP.NET MVC 4自定义URL

来自分类Dev

如何在Asp.Net MVC中创建自定义HTML帮助器

来自分类Dev

如何在ASP.NET MVC5中创建自定义支架模板?

来自分类Dev

Asp.net MVC4中URL的自定义名称

来自分类Dev

如何在ASP.Net MVC4中创建自定义web.config?

来自分类Dev

自定义验证属性中的客户端验证-ASP.NET MVC 4

来自分类Dev

如何在ASP.NET MVC中创建到自定义路由的ActionLink?

来自分类Dev

如何在ASP NET MVC中自定义不干扰验证的JQuery消息?

来自分类Dev

基于ASP.NET MVC中角色的自定义用户授权

Related 相关文章

热门标签

归档