不了解如何将JSON.NET与ASP.NET Core WebAPI一起使用

我已经完成了我的第一个ASP.NET核心Web API,我想尝试通过
JSON.NET库手动序列化/反序列化JSON.在JSON.NET文档中,他们提供了以下简单的手动序列化示例:

public static string ToJson(this Person p)
{
    StringWriter sw = new StringWriter();
    JsonTextWriter writer = new JsonTextWriter(sw);

    writer.WriteStartObject();

    // "name" : "Jerry"
    writer.WritePropertyName("name");
    writer.WriteValue(p.Name);

    // "likes": ["Comedy", "Superman"]
    writer.WritePropertyName("likes");
    writer.WriteStartArray();
    foreach (string like in p.Likes)
    {
        writer.WriteValue(like);
    }
    writer.WriteEndArray();

    writer.WriteEndObject();

    return sw.ToString();

}

像我这样的初学者缺少的是如何使用这个字符串.例如,请考虑以下事项:

[HttpGet("/api/data")
[Produces("application/json")]
public IActionResult GetData()
{
    return Ok(new Byte[SomeBigInt]);
}

在上面的代码中,我真的不知道ASP.NET Core将数组序列化为JSON …我假设它发生在某个地方.如果我手动序列化(使用JSON.NET示例)一些大的Byte数组,我该如何处理结果字符串?它只是“返回Ok(myJsonString);”?内置的序列化程序 – 不知道它已经是序列化操作的结果 – 不会再次序列化吗?

最佳答案 由于Asp.Net Core非常灵活,因此有几种方法可以返回JSON.如果你想从控制器返回Json,最直接的方法之一就是这样:

 [HttpGet("/api/data")]
 public JsonResult GetData() {

     return Json(new {
        fieldOneString = "some value",
        fieldTwoInt= 2
     });

 }

使用JSON.NET在Controlleris上使用Json()辅助方法进行JSON序列化,然后将其作为响应主体发送.

你可以这样做:

 string jsonText = JsonConvert.SerializeObject(new {
        fieldOneString = "some value",
        fieldTwoInt= 2
     });

 Response.WriteAsync(jsonText);

注意:要使用Response.WriteAsync(jsonText),您需要使用Microsoft.AspNetCore.Http添加到您的文件,并具有对Microsoft.AspNetCore.Http.Abstractions的项目引用.

点赞