SilentOrbit.JsonDiff
0.1.5
Prefix Reserved
dotnet add package SilentOrbit.JsonDiff --version 0.1.5
NuGet\Install-Package SilentOrbit.JsonDiff -Version 0.1.5
<PackageReference Include="SilentOrbit.JsonDiff" Version="0.1.5" />
<PackageVersion Include="SilentOrbit.JsonDiff" Version="0.1.5" />
<PackageReference Include="SilentOrbit.JsonDiff" />
paket add SilentOrbit.JsonDiff --version 0.1.5
#r "nuget: SilentOrbit.JsonDiff, 0.1.5"
#:package SilentOrbit.JsonDiff@0.1.5
#addin nuget:?package=SilentOrbit.JsonDiff&version=0.1.5
#tool nuget:?package=SilentOrbit.JsonDiff&version=0.1.5
JsonDiff
Calculate difference between objects of the same type.
The difference is presented in a generated MyClass.Diff class that can be serialized with System.Text.Json.
JSON format
The goal is to have a compact and readable format.
The serialized format is similar to JSON Merge Patch but with some significant differences.
- JsonDiff is not working with generic JSON documents, its strongly typed to the classes marked up.
- JsonDiff differentiates between full and partial object replace. This is seen in the JSON format where partial replacements are prefixed with "^".
Example: A is completly replaced by the new values.
{
"A": { "B": 3, "C": 4 }
}
Example: A is partially modified, C is replaced by 4 and B is not modified.
{
"^A": { "C": 4 }
}
Further on other symbol prefixes may be used for other operations not yet supported. For example list or substring manipulation.
Code Example
See examples in Demo
Features
Assign attributes to control the source generation.
Class Attribute
Assign this to every class that will be compared on a per property level. Classes missing this will be treated as "immutable", any change will be indicated by a complete copy.
Property Attributes
- [JsonDiffAlways]
- [JsonDiffFullCloneAttribute]
- [JsonDiffIgnoreAttribute]
- [JsonDiffImmutableAttribute]
Installing
Two options: NuGet package or from source.
NuGet
Install NuGet package: SilentOrbit.JsonDiff
Sample: Demo.NuGet on GitHub
Source
Clone JsonDiff on GitHub
Sample: Demo.Source on GitHub (Same Repo)
Configurations
Demo.csproj has 3 extra configurations. The purpose of these are to enable one time source generation.
Debug and Release behaves as normal, using the source generator.
GenerateSource Generates the source and saves it inside the project, allowing you to save the source code in git.
The saved source code is only used in DebugGenerated and ReleaseGenerated.
You may choose to copy the configuration from these into your project, allowing one time code generation.
| Configuration | Source Generation | Save to "Generated" | Build |
|---|---|---|---|
| Debug | Yes | No | Newly generated |
| Release | Yes | No | Newly generated |
| GenerateSource (Debug) | Yes | Yes | Newly generated |
| DebugGenerated | No | No | Previously generated |
| ReleaseGenerated | No | No | Previously generated |
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- SilentOrbit.JsonDiff.Abstractions (>= 0.1.5)
- SilentOrbit.JsonDiff.Generator (>= 0.1.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.