【发布时间】:2021-06-06 04:25:58
【问题描述】:
来自 JObject 内容的响应输出在应用程序中格式不正确。
将问题缩小到可能的最小规模,应该缺少一些导致此行为的细节(极不可能是其他原因)。
以下代码显示了一个 JSON 有效负载作为来自 API 端点的响应:
[HttpPost]
public async Task<ObjectResult> Post()
{
var json = JsonConvert.DeserializeObject<JObject>(
@"{""parameter-1"":""J234546ZrVl"",""value-2"":""3E9CY3gertertmdALWMmHkvP"",""test-3"":""verify please""}");
var result = new ObjectResult(json);
return result;
}
收到的响应如下:
{"parameter-1":[],"value-2":[],"test-3":[]}
应该是:
{"parameter-1":"J234546ZrVl","value-2":"3E9CY3gertertmdALWMmHkvP","test-3":"verify please"}
调试时变量json 是正确的,并且具有所有属性值,但不知何故它没有正确呈现。
有什么想法吗?
- 这是使用:ASP Net Core 5.0
- ObjectResult 定义在:
namespace Microsoft.AspNetCore.Mvc - 它的构造函数是:
public ObjectResult(object value); - 并具有接口:
public class ObjectResult : ActionResult, IStatusCodeActionResult, IActionResult
【问题讨论】:
-
请提供更多背景信息 - 您正在使用哪些精确的服务器技术(包括版本)?你是如何配置序列化的? minimal reproducible example 是理想的选择。
-
很可能,
ObjectResult不理解JObject中的动态处理。 -
您很可能正在使用 asp.net-core 3.0 或更高版本,并且默认使用 System.Text.Json 而不是 Json.NET。您的症状与How can I serialize a Newtonsoft JToken to JSON using System.Text.Json? 的症状相似。要切换回 Json.NET,请参阅 Where did IMvcBuilder AddJsonOptions go in .Net Core 3.0?。如果这不是问题,请提供有关如何重现问题的更多详细信息,包括您正在使用的框架和库版本。
-
ObjectResult 的内容是什么?你为什么需要它?您可以将“json”或 DeserializeObject 直接返回给“ObjectResult”。请在问题中添加“ObjectResult”类。
-
如果您使用的是 asp.net-core-5,最简单的方法是将
JObject替换为JsonElement,即var json = System.Text.Json.JsonSerializer.Deserialize<JsonElement>(jsonString);。请参阅:Equivalent of JObject in System.Text.Json。
标签: c# http json.net asp.net-core-5.0