我已经完成了我的第一个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的项目引用.