在 ASP.NET API 响应中包含格式良好(无类型)json 的最佳方法

问题描述 投票:0回答:1

在 ASP.NET Core 中构建 Web API。
我有一个控制器操作,它接收请求(带有

byte[]
的对象),并且在响应中它应该返回动态生成的 JSON 值(这是一个解析操作)。因此,我无法在响应中强类型化对象,因为它取决于请求。

我的响应类如下所示:

public class ConversionResponse
{
    public string Json { get; set; }
}

操作实现如下(精简版):

[HttpGet()]
public async Task<IActionResult> ConvertFile(ConversionRequest request)
{
    // This just gets a json string (in my case an array, but could be any json string)
    var json = await GetJsonAsync(request);
    return Ok(new ConversionResponse{Json = json });
}

我得到的结果如下(其中json值被序列化为字符串)

{
    "json": "[{\"Column1\":\"Value1\",\"Column2\":\"Value2\"},{\"Column1\":\"Value4\",\"Column2\":\"Value5\"}]"
}

我希望的结果如下

{
    "json": [{"Column1":"Value1","Column2":"Value2"},{"Column1":"Value4","Column2":"Value5"}]
}

我尝试将

json
字符串解析为
JObject
JToken
并将其包含在响应对象中,而不是
string
,但这似乎也不起作用。

非常感谢任何解决此问题的帮助!

json asp.net-core asp.net-web-api
1个回答
0
投票

首先,在您的示例中,您在

public string Json { get; set; }
类中定义
ConversionResponse
,这应该会返回
{"json":"string content here"}

那么你要返回的是

{"json" : [ ]}
,那么参数
json
的值就是一个数组。但现在我们拥有的是一个数组字符串。因此,获取所需返回数据的最简单方法应该是将
array string
转换为
json object
。我使用如下代码:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

string arrayString = "[{\"Column1\":\"Value1\",\"Column2\":\"Value2\"},{\"Column1\":\"Value4\",\"Column2\":\"Value5\"}]";
string formatString = string.Concat("{\"json\":", arrayString, "}");
JObject jsonObj1 = JObject.Parse(formatString);
JObject jsonObj2 = JsonConvert.DeserializeObject<JObject>(formatString);
var val1 = jsonObj1["json"][0]["Column1"];
var val2 = jsonObj2["json"][1]["Column1"];

就像你看到的,我先将数组字符串转换为json字符串,然后将json字符串转换为json对象。而如果我们只想返回整个json对象,我们可以直接

return Ok(formatString);
。就像在前端一样,我们可以将响应定义为 json,然后 json 字符串将自动转换为 json 对象。我们还可以在控制器操作前面添加
[Produces("application/json")]
,将json字符串转换为json对象。

© www.soinside.com 2019 - 2024. All rights reserved.