【发布时间】:2020-11-26 12:08:55
【问题描述】:
我正在构建 .Net Core 3.1 Web API。向 Web API 发送请求。我正在使用 System.Net.Http 库。我将 JSON 放入 POST 请求正文中。这是 Web API 端处理程序:
using Microsoft.AspNetCore.Mvc;
[ApiController]
public class MyController : ControllerBase
{
[HttpPost]
public int HandleRequest([FromBody] string jsonString)
{
return 1;
}
}
下面的代码将空的 ArrayList 发送到 Web API,但它总是返回“在解析值第 1 行,位置 1 时遇到意外字符。”。
var serializedData = new JavaScriptSerializer().Serialize(new ArrayList());
var content = new StringContent(serializedData, Encoding.UTF8, "application/json");
var response = client.PostAsync(url, content);
return response.Result.Content.ReadAsStringAsync();
我尝试使用 JsonConvert 并围绕对象进行序列化,但它总是返回相同的错误。但是后来我发现,如果我进行两次序列化,它就会开始工作。所以下面的代码可以正常工作 - 发送请求时没有任何错误,并且 Web API 端的数据是正确的。
var serializer = new JavaScriptSerializer();
var serializedData = serializer.Serialize(serializer.Serialize(new ArrayList()));
var content = new StringContent(serializedData, Encoding.UTF8, "application/json");
var response = client.PostAsync(url, content);
return response.Result.Content.ReadAsStringAsync();
为什么我需要进行双重序列化才能使其工作?
【问题讨论】:
-
JavaScriptSerializer和ArrayList不推荐使用 -
?这两个 sn-ps 之间的唯一区别似乎是您将序列化程序存储在第二个本地。正如您所建议的,您不会在这里序列化两次。
-
@500-InternalServerError 他正在序列化两次。首先调用序列化
ArrayList到string,然后调用string到string- 这就是端点工作的原因。 -
[FromBody] string jsonString替换为[FromBody] ArrayList arrayList或任何集合。 -
@Hostel:所以他是 - 我现在看到了。
标签: c# asp.net-core asp.net-core-webapi