Don';我不理解如何将JSON.NET与ASP.NET核心WebAPI结合使用

Don';我不理解如何将JSON.NET与ASP.NET核心WebAPI结合使用,json,asp.net-web-api,asp.net-core,asp.net-core-webapi,Json,Asp.net Web Api,Asp.net Core,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.WriteStar

我已经完成了我的第一个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.NETCore在哪里将数组序列化为JSON…我假设它发生在幕后的某个地方。如果我要手动序列化(使用JSON.NET示例)某个大字节数组,我该如何处理结果字符串?只是“返回Ok(myJsonString);”吗?内置序列化程序(不知道它已经是序列化操作的结果)不会再次序列化它吗

由于Asp.Net内核非常灵活,有几种方法可以返回JSON。如果要从控制器返回Json,最直接的方法之一是:

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

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

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

 Response.WriteAsync(jsonText);
在引擎盖下,
Controller
上的
Json()

你也可以这样做:

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

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

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

 Response.WriteAsync(jsonText);

注意:要使用
Response.WriteAsync(jsonText)
您需要将
使用Microsoft.AspNetCore.Http
添加到您的文件中,并有一个对
Microsoft.AspNetCore.Http.Abstractions

的项目引用,您可以创建自己的
IActionResult
派生结果,然后返回序列化内容。谢谢。我想我最困惑的是:我如何先验地知道我能从控制器返回什么和不能返回什么。如果我返回一个JsonResult对象,我怎么知道客户机会理解它是什么?为什么不将返回类型设置为“IActionResult”,然后再设置为“returnok(anObjectOfTypeJsonResult);”?整个事情让我很困惑(我确信这是显而易见的),JsonResult实现了IActionResult,而Jaon控制器助手方法返回了JsonResult。您可以更改我发布的操作方法,以返回IActionResult,它也可以正常工作。在这种情况下,我更喜欢让action方法返回JsonResult,因为该方法将返回的是IActionResult。那有用吗?对不起,罗恩,我还是很困惑。假设我希望传输一个原始字节数组。没有对JSON、BSON或任何东西的序列化…只是一个字节数组。我可以这样做吗?:当然可以。如果愿意,您可以使用Response.WriteAsync通过它的另一个方法签名发送原始字节。抱歉,发布编辑器:[HttpGet(“/api/data”)]public Byte[]GetData(){return Ok(new Byte[10000]);},然后在客户端执行以下操作:HttpResponseMessage Response=httpClient.GetAsyn(“/api/data”)。结果;如果(response.issusccessstatuscode){Byte[]someData=response.Content.ReadAsAsync().Result;}上述操作是否涉及任何序列化/反序列化,或者我只是将字节数组[]发送出去?