通过Kestrel MVC Server返回json文本

a2mppw5e  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(91)

考虑以下类:

class Fake
    {
        public int test { get; set; }
    }

现在我的GET

[HttpGet]
[Produces(MediaTypeNames.Application.Json)]
public async Task<IActionResult> Get()
{
    var fake = new Fake { test = 1 };
    return Ok(fake);
}

结果=完美:

{
   "test": 1
}

这是我预期的结果-以下是我所有的替代失败:
所以,我想做的是 * 不 * 使用类,而是使用它的底层JSON表示,所以我尝试:

[HttpGet]
[Produces(MediaTypeNames.Application.Json)]
public async Task<IActionResult> Get()
{
    var fake = "{ \"test\": 1 }";
    return Ok(fake);
}

这让我想到:

"{ \"test\": 1 }"

这显然不是我想要的。
所以我在Stack Overflow上找到了另一个“答案”,这导致我尝试:

[HttpGet]
[Produces(MediaTypeNames.Application.Json)]
public async Task<IActionResult> Get()
{
    var fake = "{ \"test\": 1 }";
    return Ok(JsonConvert.DeserializeObject(fake));
}

其然后产生:

{"test":[]}

我最后的尝试是

[HttpGet]
[Produces(MediaTypeNames.Application.Json)]
public async Task<IActionResult> Get()
{
    var fake = "{ \"test\": 1 }";
    return new JsonResult(fake);
}

这让我想到:

"{ \u0022test\u0022: 1 }"

我怎么才能让我的方法返回第一次调用时得到的JSON,但实际上我要返回的是JSON字符串?
为什么第二次尝试得到了奇怪的JSON结果?

ttisahbt

ttisahbt1#

发生这种情况是因为你的字符串对象将被序列化器编码,导致双重编码的字符串,使用Content

[HttpGet]
[Produces(MediaTypeNames.Application.Json)]
public async Task<IActionResult> Get()
{
    var fake = "{ \"test\": 1 }";
    return Content(fake);
}

附言
对于反序列化-序列化方法,您可以尝试使用System.Text.Json序列化器-自第3版以来,ASP.NET Core的默认值:

[HttpGet]
[Produces(MediaTypeNames.Application.Json)]
public async Task<IActionResult> Get()
{
    var fake = "{ \"test\": 1 }";
    return Ok(JsonSerializer.Deserialize<object>(fake));
}

相关问题