有没有办法在每个 HTTP 请求的 JSON 响应中重置 $id ? JsonSerializerSettings = PreserveReferencesHandling.Objects

2024-05-06

XYZController.cs

[HttpPost]
public async Task<ActionResult> Post([FromBody] T inputContext)
{
       var outputContext = Process(inputContext);
       return StatusCode(200, outputContext );
}

启动.cs

public void ConfigureServices(IServiceCollection services)
{
     services.AddMvc().AddJsonOptions(options =>
            {
                UpdateJsonSettings.ConfigureJsonFormatter(options.SerializerSettings);
            });
}

UpdateJsonSettings.cs

internal static void ConfigureJsonFormatter(JsonSerializerSettings settings)
{
       settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
       settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
       settings.Converters.Add(new StringEnumConverter());
}

XYZ 控制器的 HttpResponse 尝试 1:

{ “$id”:“1”, “账单”: { “$id”:“2”, “类型”:“类型1”,

XYZ 控制器的 HttpResponse 尝试 2: -- 不以 $id 1 开头

{ “$id”:“28”, “账单”: {“$id”:“29”, “类型”:“类型1”,

XYZ 控制器的 HttpResponse 尝试 3: -- 不以 $id 1 开头

{ “$id”:“55”, “账单”: {“$id”:“56”, “类型”:“类型1”,

我正在使用 Newtonsoft.Json (11.0.2)


我经过惨痛的教训才学到这个!

问题出在 StatusCode 方法中,它返回 ObjectResult。将方法签名更改为 IActionResult 并返回 JsonResult 后,它工作正常。此外,API 性能也得到了提高。

[HttpPost]
public async Task<IActionResult> Post([FromBody] T inputContext)
{
       var outputContext = Process(inputContext);
       var jsonResult = new JsonResult(outputContext);
       jsonResult.StatusCode = 200;
       return jsonResult;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在每个 HTTP 请求的 JSON 响应中重置 $id ? JsonSerializerSettings = PreserveReferencesHandling.Objects 的相关文章

随机推荐