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

Asp.net core webapi 有没有办法在JSON响应中为每个HTTP请求重置$id?JsonSerializerSettings=PreserveReferencesHandling.Objects,asp.net-core-webapi,asp.net-core-2.1,Asp.net Core Webapi,Asp.net Core 2.1,XYZController.cs [HttpPost] public async Task<ActionResult> Post([FromBody] T inputContext) { var outputContext = Process(inputContext); return StatusCode(200, outputContext ); } UpdateJsonSettings.cs internal static void Configu

XYZController.cs

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

internal static void ConfigureJsonFormatter(JsonSerializerSettings settings)
{
       settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
       settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
       settings.Converters.Add(new StringEnumConverter());
}
XYZ控制器的HttpResponse Try 1:

{ “$id”:“1”, “法案”:{ “$id”:“2”, “类型”:“类型1”

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

{ “$id”:“28” “法案”:{ “$id”:“29”, “类型”:“类型1”

XYZ控制器Try 3的HttpResponse:--不以$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;
}
[HttpPost]
公共异步任务Post([FromBody]T inputContext)
{
var outputContext=进程(inputContext);
var jsonResult=新的jsonResult(outputContext);
jsonResult.StatusCode=200;
返回jsonResult;
}
我开了一个讨论会

基本上,
StatusCode
缓存
$id
值的问题在于

出于性能原因,
NewtonsoftJsonOutputFormatter
选择缓存用于序列化对象的
JsonSerializer
。这还将缓存及其内部计数器


正如我在Github一期中所说的,有一种方法可以通过自定义解决每个请求的问题。但是,由于解析器也缓存在单例/静态上下文中,因此解决每个请求的问题还有很长的路要走。

您能说明如何获得响应(要复制的web api代码)?我添加了控制器信息。这无法使用提供的示例代码/json设置生成。
$id
在每个
JsonConvert.Serialize
调用上为我重置。您需要提供更多信息,例如输入和输出模型是什么样子的?
过程
方法大致做什么?我有另一个c仅返回运行状况检查的控制器。[HttpGet]公共异步任务GetHealth(){dynamic healthStatus=true;返回Ok(healthStatus);}}},该控制器还返回上次调用中引用的$id。[Route(“api/[controller]”]][ApiController]公共类HealthController:ControllerBase{}控制器注册签名
[HttpPost]
public async Task<IActionResult> Post([FromBody] T inputContext)
{
       var outputContext = Process(inputContext);
       var jsonResult = new JsonResult(outputContext);
       jsonResult.StatusCode = 200;
       return jsonResult;
}