返回未完全填写的响应 JObject 值 JSON

Response JObject values not completely filled in returned JSON

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 是正确的,并且具有所有 属性 值,但不知何故它没有正确呈现。

有什么想法吗?

public class ObjectResult : ActionResult, IStatusCodeActionResult, IActionResult

感谢 dbc 提示,我们可以使用遗留服务,只需将其 return 值与之前的 Newtonsoft.Json 库序列化,然后使用新的 System.Text.Json.

进行反序列化

此方法可以解决问题,并且可以在整个应用程序中使用,可能对于非常大的 JSON 值不是最优的,但对于我们的要求来说是干净和精简的。

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Text.Json;

...

  public static JsonDocument JToken2JsonDocument(JToken input)
  {
    var jsonString = JsonConvert.SerializeObject(input);
    var json = JsonDocument.Parse(jsonString);
    return json;
  }

可以使用 returned 对象调用 ObjectResult 构造函数并正确呈现。