从ASP.NET MVC端点返回JavaScript对象文字,而不是JSON字符串

雅各布部落

由于各种原因,我已经从ASP.NET MVC的内置JSON序列化器(返回一个System.Web.Mvc.JsonResult对象 (请参见下面的编辑))切换到Newtonsoft。直到开始测试后,我才意识到前者返回JavaScript对象文字,而Newtonsoft返回JSON格式的string

我喜欢不必在客户端解析JSON字符串-将其作为对象文字存储是非常方便的-但出于其他技术原因,我想坚持使用Newtonsoft。

例如,与其在我的客户端上看到此结果,不如...

"{"Errors":["Please enter a valid email address."],"HasErrors":true}"

...我希望看到这个结果:

{"Errors":["Please enter a valid email address."],"HasErrors":true} // no quotes

有没有办法让Newtonsoft返回JS对象文字而不是字符串?

编辑

我提出问题的方式并不是最好的。JsonResult类型没有错实际上,该解决方案仍在使用它。唯一的问题是默认Controller.Json方法,可以重写以使用Newtonsoft(Json.NET)而不是内置的序列化程序。

Strelok

只需编写一个使用Newtonsoft序列化程序的自定义JsonResult即可:

大致情况:

public abstract class BaseController : Controller
{
    protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding)
    {
        return new JsonNetResult
        {
            ContentType = contentType,
            ContentEncoding = contentEncoding,
            Data = data
        };
    }

    protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
    {
        return new JsonNetResult
                    {
                        ContentType = contentType,
                        ContentEncoding = contentEncoding,
                        Data = data,
                        JsonRequestBehavior = behavior
                    };
    }
}

JsonNetResult.cs:

using System;
using System.Web;
using System.Web.Mvc;
using Newtonsoft.Json;

public class JsonNetResult : JsonResult
{   
    public JsonSerializerSettings SerializerSettings { get; set; }
    public Formatting Formatting { get; set; }

    public JsonNetResult()
    {
        Formatting = Formatting.None;
        SerializerSettings = new JsonSerializerSettings();
        JsonRequestBehavior = JsonRequestBehavior.DenyGet;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
            throw new ArgumentNullException("context");

        if (JsonRequestBehavior == JsonRequestBehavior.DenyGet
            && String.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
        {
            throw new InvalidOperationException("This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to AllowGet.");
        }

        HttpResponseBase response = context.HttpContext.Response;

        response.ContentType = !string.IsNullOrEmpty(ContentType)
                                    ? ContentType
                                    : "application/json";

        if (ContentEncoding != null)
            response.ContentEncoding = ContentEncoding;

        if (Data != null)
        {
            var writer = new JsonTextWriter(response.Output) { Formatting = Formatting };

            var serializer = JsonSerializer.Create(SerializerSettings);
            serializer.Serialize(writer, Data);

            writer.Flush();
        }
    }
}

信用:https//gist.github.com/jpoehls/1424538

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

调用ASP.Net WebAPI端点时,JavaScript提取调用返回空字符串

来自分类Dev

ASP.NET如何返回字符串而不是返回页面?

来自分类Dev

ASP.NET MVC路由-Url.Action发送查询字符串而不是路由值

来自分类Dev

在 asp.net mvc 应用程序中传递 null 而不是字符串的动作

来自分类Dev

在ASP.NET WebApi中,为什么RouteData的值类型是“对象”而不是“字符串”

来自分类Dev

ASP.net Core MVC测试/使控制器返回字符串?

来自分类Dev

ASP.NET MVC 基础 - 控制器方法不返回字符串

来自分类Dev

基于 ASP.NET MVC 中部分查询字符串返回 410 错误

来自分类Dev

空输入字符串的ASP.Net MVC模型绑定创建空模型对象

来自分类Dev

验证ASP.NET MVC中的字符串数组

来自分类Dev

保护Asp.net MVC中的连接字符串

来自分类Dev

ASP.NET MVC加密查询字符串

来自分类Dev

连接字符串的ASP.NET MVC部署问题

来自分类常见问题

从Asp.net WEBAPI显式返回JSON字符串?

来自分类Dev

在ASP.NET MVC 3中的cookie中设置JSON字符串

来自分类Dev

在ASP.NET MVC 3中的cookie中设置JSON字符串

来自分类Dev

将json字符串绑定到asp.net MVC中的模型

来自分类Dev

将 JSON 字符串发送到 ASP.NET Core MVC 控制器

来自分类Dev

将URL查询字符串值从JavaScript编码为ASP.NET MVC

来自分类Dev

ASP.NET的连接字符串

来自分类Dev

与ASP.Net的连接字符串

来自分类Dev

列出字符串而不是Model.Tags.Count.ToString()中的Count ASP.NET MVC

来自分类Dev

ASP.NET, Javascript

来自分类Dev

在ASP.NET MVC单元测试中使用Moq模拟函数时无法返回非空字符串

来自分类Dev

查询字符串参数不正确时如何在ASP .NET MVC中返回404页

来自分类Dev

在ASP.NET MVC单元测试中使用Moq模拟函数时无法返回非空字符串

来自分类Dev

ASP.NET MVC模型将单独的日,月,年字符串字段绑定到单个DateTime对象

来自分类Dev

ASP.NET MVC模型将单独的日,月,年字符串字段绑定到单个DateTime对象

来自分类Dev

ASP.NET MVC 使用引号转义问题将字符串传递给 JSON.parse

Related 相关文章

  1. 1

    调用ASP.Net WebAPI端点时,JavaScript提取调用返回空字符串

  2. 2

    ASP.NET如何返回字符串而不是返回页面?

  3. 3

    ASP.NET MVC路由-Url.Action发送查询字符串而不是路由值

  4. 4

    在 asp.net mvc 应用程序中传递 null 而不是字符串的动作

  5. 5

    在ASP.NET WebApi中,为什么RouteData的值类型是“对象”而不是“字符串”

  6. 6

    ASP.net Core MVC测试/使控制器返回字符串?

  7. 7

    ASP.NET MVC 基础 - 控制器方法不返回字符串

  8. 8

    基于 ASP.NET MVC 中部分查询字符串返回 410 错误

  9. 9

    空输入字符串的ASP.Net MVC模型绑定创建空模型对象

  10. 10

    验证ASP.NET MVC中的字符串数组

  11. 11

    保护Asp.net MVC中的连接字符串

  12. 12

    ASP.NET MVC加密查询字符串

  13. 13

    连接字符串的ASP.NET MVC部署问题

  14. 14

    从Asp.net WEBAPI显式返回JSON字符串?

  15. 15

    在ASP.NET MVC 3中的cookie中设置JSON字符串

  16. 16

    在ASP.NET MVC 3中的cookie中设置JSON字符串

  17. 17

    将json字符串绑定到asp.net MVC中的模型

  18. 18

    将 JSON 字符串发送到 ASP.NET Core MVC 控制器

  19. 19

    将URL查询字符串值从JavaScript编码为ASP.NET MVC

  20. 20

    ASP.NET的连接字符串

  21. 21

    与ASP.Net的连接字符串

  22. 22

    列出字符串而不是Model.Tags.Count.ToString()中的Count ASP.NET MVC

  23. 23

    ASP.NET, Javascript

  24. 24

    在ASP.NET MVC单元测试中使用Moq模拟函数时无法返回非空字符串

  25. 25

    查询字符串参数不正确时如何在ASP .NET MVC中返回404页

  26. 26

    在ASP.NET MVC单元测试中使用Moq模拟函数时无法返回非空字符串

  27. 27

    ASP.NET MVC模型将单独的日,月,年字符串字段绑定到单个DateTime对象

  28. 28

    ASP.NET MVC模型将单独的日,月,年字符串字段绑定到单个DateTime对象

  29. 29

    ASP.NET MVC 使用引号转义问题将字符串传递给 JSON.parse

热门标签

归档