gpt4 book ai didi

c# - 从没有强类型 IEnumerable 的 WebAPI 返回数据的 json 表示

转载 作者:太空狗 更新时间:2023-10-30 00:18:13 25 4
gpt4 key购买 nike

阅读了大量不同的解决方案并尝试了不同的方法(hereherehereherehere)后,我从 API Controller 得到了不同的(和意外的)结果.

我需要通过网络 API Controller 返回一个以 JSON 表示的数据表:

[IdentityBasicAuthentication]
[Authorize]
[RequireHttps]
[Route("Reports/Report1")]
public HttpResponseMessage Get()
{
DataTable dt = MyDAL.GetDataTable();
if(someValidationFailed){
Request.CreateResponse(HttpStatusCode.BadRequest, "Friendly error here");
}
return Request.CreateResponse(HttpStatusCode.OK, Newtonsoft.Json.JsonConvert.SerializeObject(dt));
}

在 Fiddler 中,输出似乎被编码为转义字符串:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

"[{\"Site\":\"Headquarters\",\"Department\":\"HR\",\"FirstName\":\"Bob\",\"MiddleName\":null,\"Surname\":\"Fern\",\"EmployeeNumber\":\"444\"},
{\"Site\":\"Headquarters\",\"Department\":\"HR\",\"FirstName\":\"Alice\",\"MiddleName\":null,\"Surname\":\"Smith\",\"EmployeeNumber\":\"769\"}]"

但是,我们的目标是输出纯 Json(如果客户端请求,则输出 XML):

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

[{"Site":"Headquarters","Department":"HR","FirstName":"Bob","MiddleName":null,"Surname":"Fern","EmployeeNumber":"444"},
{"Site":"Headquarters","Department":"HR","FirstName":"Alice","MiddleName":null,"Surname":"Smith","EmployeeNumber":"769"}]

有没有办法在不创建 IEnumerable<Person> 的情况下做到这一点?目的?原因是这个类是特定于这一个方法的。我也不想使用 StringBuilder,因为 DataTable 可能非常大,而且我之前已经看到内存异常抛出。

我是 WebAPI 的新手,所以答案可能非常简单,但我可以提出更多问题的代码示例会非常有帮助。

最佳答案

Web API 为您处理序列化,因此您无需调用 JsonConvert.SerializeObject。这就是为什么你得到一个转义字符串作为你的输出值。只需将数据表直接传递给 CreateResponse。 Web API 会根据请求的 Accept header 中发送的内容,为您将其转换为 JSON 或 XML。 (它在幕后使用 Json.Net。)

return Request.CreateResponse(HttpStatusCode.OK, dt);

关于c# - 从没有强类型 IEnumerable 的 WebAPI 返回数据的 json 表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40913770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com