JsonPolymorph 1.1.3
dotnet add package JsonPolymorph --version 1.1.3
NuGet\Install-Package JsonPolymorph -Version 1.1.3
<PackageReference Include="JsonPolymorph" Version="1.1.3" />
paket add JsonPolymorph --version 1.1.3
#r "nuget: JsonPolymorph, 1.1.3"
// Install JsonPolymorph as a Cake Addin
#addin nuget:?package=JsonPolymorph&version=1.1.3
// Install JsonPolymorph as a Cake Tool
#tool nuget:?package=JsonPolymorph&version=1.1.3
JsonPolymorph
JsonPolymorph is a .NET helper library to simplify generating polymorphic JSON models from C# record hierarchies. It is intended to be used with NSwag to generate OpenAPI v3 schemas and client-side code for ASP.NET Core web APIs that properly round-trips C# record hierarchies to and from JSON.
Usage
Installation is via the JsonPolymorph
NuGet package.
A simple example:
[JsonHierarchyBase]
public abstract partial record VehicleCommand();
public sealed record TurnLeft() : VehicleCommand;
public sealed record TurnRight() : VehicleCommand;
Applying the JsonHierarchyBaseAttribute
to a type will cause the following attributes to be added at compile time:
- An instance of
JsonConverterAttribute
with a hardcoded JSON discriminator property name, i.e.[Newtonsoft.Json.JsonConverter(typeof(NJsonSchema.Converters.JsonInheritanceConverter), "discriminator")]
- For every type
DerivedRecordType
in the assembly that is derived from the target, an instance ofKnownTypeAttribute
, i.e.[System.Runtime.Serialization.KnownType(typeof(DerivedRecordType))]
Applying this attribute is only supported at the base level of the hierarchy, i.e. a record
directly derived from object
.
Credits
Many thanks to Jonathan Allen (@Grauenwolf) for the fantastic InfoQ article and sample code that served as the inspiration for this project.
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. |
.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
- Newtonsoft.Json (>= 13.0.3)
- NJsonSchema (>= 11.0.0)
- NJsonSchema.NewtonsoftJson (>= 11.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
1.1.0 updated to work with the latest NJsonSchema.