迁移到 .Net Core 3 后 JsonPatchDocument 为空

Jos*_*hit 2 json.net json-patch .net-core asp.net-core .net-core-3.0

我有一个带有多个补丁操作的 AspNetCore-WebApi-Project,它在 Core 2.2 中运行良好。迁移到 Core 3 后[FromBody] JsonPatchDocument<T>为空。我的获取/发布方法仍然按预期运行。

这是我的 Startup 的一部分:

    services.AddDbContext<MyContext>(options => options
                    .UseLazyLoadingProxies()
                    .UseNpgsql(Configuration.GetConnectionString("MyConnectionString"), 
                        opt => opt.UseNodaTime()));

    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "My-API", Version = "v1" });
    });
    services.AddControllers()
        .AddNewtonsoftJson();
Run Code Online (Sandbox Code Playgroud)

这是我的行动:

[HttpPatch("{id}")]
public async Task<IActionResult> Patch(Guid id, 
                            [FromBody] JsonPatchDocument<MyViewModel> patchDocument)
{
    await this.service.HandlePatchAsync(id, patchDocument);
    return NoContent();
}
Run Code Online (Sandbox Code Playgroud)

这是正文内容:

[   
    {
        "op": "replace",
        "path": "/name",
        "value": "New Name" 
    },
    {
        "op": "replace",
        "path": "/country",
        "value": "Germany" 
    }
]
Run Code Online (Sandbox Code Playgroud)

有谁知道这里出了什么问题?

Pet*_*hin 8

我在一个类似的问题上挣扎。我打算完全摆脱Newtonsoft,但在那种情况下,补丁JsonPatchDocument不起作用。

根据https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio#jsonnet-support你应该:

  1. 添加包引用 Microsoft.AspNetCore.Mvc.NewtonsoftJson

  2. 更改启动中的代码,将 MVC 添加到 services.AddMvc().AddNewtonsoftJson();

你做了第二步,但第一步呢?这对我有帮助。

不幸的是,我不知道如何在没有的情况下使 JsonPatchDocument 工作 .AddNewtonsoftJson()