With the recent v1 release of Marvin.JsonPatch & Marvin.JsonPatch.Dynamic, I figured this would be a good time for a write-up of which flavour to use for which use case.
Marvin.JsonPatch is a PCL, targeting Xamarin, WinPhone, .NET 4.
Marvin.JsonPatch.Dynamic targets the full .NET framework. It references Marvin.JsonPatch and adds support for dynamically typed objects (for example: with the add operation you can effectively add previously non-existent properties to the object you’re applying the patch to if it’s an ExpandoObject).
Microsoft.AspNetCore.JsonPatch is a port of both, in one assembly, targeting .NET Core (.NET Standard).
When working with JsonPatch there’s two things of importance: what happens on the client (creating the JsonPatchDocument & serializing it) and what happens on the server (deserializing the JSON into a JsonPatchDocument & applying it). Depending on the app you’re building, you’ll use one or the other, or both.
My recommendation is: use the flavour that best fits the target framework you’re working with. If you’re building a Xamarin app that talks to an API built with ASP.NET Web API, use Marvin.JsonPatch on the client and Marvin.JsonPatch.Dynamic on the server. If your client application is an ASP.NET MVC application and your API is built with ASP.NET Core, use Marvin.JsonPatch.Dynamic on the client and Microsoft.AspNetCore.JsonPatch on the server, and so on.
Due to the fact that the three flavours implement the same standard, they work together seamlessly.