Don';我不理解如何将JSON.NET与ASP.NET核心WebAPI结合使用
我已经完成了我的第一个ASP.NET核心Web API,我想尝试通过JSON.NET库手动序列化/反序列化JSON。在JSON.NET文档中,他们给出了以下简单的手动序列化示例: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
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;}上述操作是否涉及任何序列化/反序列化,或者我只是将字节数组[]发送出去?