Closed kikaragyozov closed 4 years ago
If I just include the Newtonsoft json serializer into the service collection, it all works,
currently JSON patch requires NewtonsoftJson
@Rick-Anderson docs say you can still leverage System.Text.Json
by doing the above snippet of code? But that's not the case at all!
Where does it say that? What exactly. It says:
The preceding code requires the Microsoft.AspNetCore.Mvc.NewtonsoftJson
cc @serpent5
Direct quote from documentation:
AddNewtonsoftJson
replaces theSystem.Text.Json
-based input and output formatters used for formatting all JSON content. To add support for JSON Patch usingNewtonsoft.Json
, while leaving the other formatters unchanged, update the project'sStartup.ConfigureServices
method as follows:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews(options =>
{
options.InputFormatters.Insert(0, GetJsonPatchInputFormatter());
});
}
private static NewtonsoftJsonPatchInputFormatter GetJsonPatchInputFormatter()
{
var builder = new ServiceCollection()
.AddLogging()
.AddMvc()
.AddNewtonsoftJson()
.Services.BuildServiceProvider();
return builder
.GetRequiredService<IOptions<MvcOptions>>()
.Value
.InputFormatters
.OfType<NewtonsoftJsonPatchInputFormatter>()
.First();
}
The text in bold is where I believe it says that. The code snippet included is part of the documentation and what the quote was referring to as the solution - using it as provided does nothing - the JSON parser fails to parse incoming JSON to JsonPatchDocument
.
The approach in the topic works. What are you sending as the Content-Type
and what's the error?
I am having the same issue and the same configuration mentioned above. this is the error message I am getting. { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "One or more validation errors occurred.", "status": 400, "traceId": "|f5ba494d-422d1595d82115d9.", "errors": { "$": [ "The JSON value could not be converted to Microsoft.AspNetCore.JsonPatch.JsonPatchDocument`1[Portal.Web.DataModels.TestModel]. Path: $ | LineNumber: 0 | BytePositionInLine: 1." ] } }
Minimal reproducible repository/solution: https://github.com/SpiritBob/BrokenJsonPatch
Could we finally get back to opening this issue?
Minimal reproducible repository/solution: https://github.com/SpiritBob/BrokenJsonPatch
This also works when I try it. You must use application/json-patch+json
as the Content-Type
for the request being sent to that controller. If you use application/json
, you'll see the error message shown in @sarahbe's comment.
I've done as instructed by writing the following snippet of code
But it doesn't seem to work at all. I get the same PatchDocument error as per usual.
An example of my Endpoint (deriving from
ControllerBase
)If I just include the Newtonsoft json serializer into the service collection, it all works, but I lose the benefits of Microsoft's System.Text.Json package, as the serializer is now Newton's.
Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.