ASP.NET Web API响应在浏览器和Postman中显示转义字符

hjzp0vay  于 2023-11-20  发布在  .NET
关注(0)|答案(2)|浏览(134)

我正在学习如何用ASP.NET创建Web API,但是我在让我的JSON响应在浏览器中看起来漂亮方面遇到了问题。
当将JSON字符串打印到调试控制台时,它看起来很好:

{
  "a": 2,
  "b": "hello"
}

字符串
但当在浏览器或通过Postman(即使在“Pretty view”中)查看它时,我得到了这个:

"{\r\n  \"a\": 2,\r\n  \"b\": \"hello\"\r\n}"


我能让浏览器很好地显示结果吗?
下面是我的测试模型:

namespace Test.REST.Models
{
    public class Test
    {
        public int a;
        public string b;

        public Test(int a, string b)
        {
            this.a = a;
            this.b = b;
        }
    }
}


这是我的测试控制器:

namespace Test.REST.Controllers
{
    public class TestController : ApiController
    {
        public string Get()
        {
            Test.REST.Models.Test test = new Test.REST.Models.Test(2, "hello");
            string json = JsonConvert.SerializeObject(test, Formatting.Indented);
            System.Diagnostics.Debug.WriteLine(json);
            return json;
        }
    }
}

ivqmmu1c

ivqmmu1c1#

你有一个bug,修复类

public class Test
{
    public int a { get; set; }
    public string b { get; set; }

    public Test(int a, string b)
    {
        this.a = a;
        this.b = b;
    }
}

字符串
修复后,我使用VS 2019和Postman测试了你的代码。一切看起来都很正常。
如果我用

string json = JsonConvert.SerializeObject(test, Newtonsoft.Json.Formatting.Indented);


输出

{
  "a": 2,
  "b": "hello"
}


如果我使用Chrome浏览器,
删除Newtonsoft.Json..Indented后

string json = JsonConvert.SerializeObject(test);


输出

{"a":2,"b":"hello"}

vkc1a9a2

vkc1a9a22#

使用StringContent类

public async Task<IHttpActionResult> Test()
{
    string json = JsonConvert.SerializeObject(yourObject);
    var Response = Request.CreateResponse(System.Net.HttpStatusCode.OK);
    Response.Content = new StringContent(json , Encoding.UTF8, "application/json");
    return ResponseMessage(Response);
}

字符串
或者更简单

return Json(yourObject); //don't serialize your object

相关问题