TransplantingJsonConverter 1.0.1
dotnet add package TransplantingJsonConverter --version 1.0.1
NuGet\Install-Package TransplantingJsonConverter -Version 1.0.1
<PackageReference Include="TransplantingJsonConverter" Version="1.0.1" />
paket add TransplantingJsonConverter --version 1.0.1
#r "nuget: TransplantingJsonConverter, 1.0.1"
// Install TransplantingJsonConverter as a Cake Addin #addin nuget:?package=TransplantingJsonConverter&version=1.0.1 // Install TransplantingJsonConverter as a Cake Tool #tool nuget:?package=TransplantingJsonConverter&version=1.0.1
Transplanting JSON Converter
A JSON converter (for use with Newtonsoft Json.NET), that transplants properties from an inner root object, to an outer container object. The serialized JSON looks like that of the inner root object, but augmented with other properties found on the outer container object. Deserialization is supported as well.
Example
Outermost container type
A Container type facilitates serialization and deserialization that centers around a particular inner root type, augmented with additional properties.
Container class must be decorated with JsonTransplantContainer attribute, and it is suggested that it also be decorated with a JsonConverter attribute dictating JsonTransplantConverter as shown.
The container class must have exactly one public property decorated with JsonTransplantRoot attribute. The JSON output object will center around "Rewt" and will not actually have a property called "Rewt". It will, however, have properties called "Other1" and "Other2".
[JsonTransplantContainer]
[JsonConverter(typeof(JsonTransplantConverter))]
public class Container
{
[JsonTransplantRoot]
public Rewt Rewt { get; set; }
public Other1 Other1 { get; set; }
public Other2 Other2 { get; set; }
}
Inner root type
The JSON output will center around this type. There's no attribute clutter here.
public class Rewt
{
public int RootA { get; set; }
public int RootB { get; set; }
public int A { get; set; }
public int B { get; set; }
}
Augmentation types
Optionally, standard Newtonsoft attributes may be used to control serialization.
public class Other1
{
public int A { get; set; }
}
public class Other2
{
public int B { get; set; }
[JsonIgnore]
public string DontSerialize { get; set; } = "a value";
}
JSON output
The output is centered around the "Rewt" type, which is considered the "inner root" in the C# type (as designated using JsonTransplantRoot attribute), but serves as (part of) the outer schema in the JSON output. The "Other1" and "Other2" properties have been serialized as if we weren't using any special converter. Note that properties belonging to the "Other" types (ex. Other1.A) are not grafted on to the root type.
The "A" and "B" properties on the "Other" types are completely unrelated to their namesakes on the "Rewt" type.
{
"RootA": 100,
"RootB": 200,
"A": 101,
"B": 201,
"Other1": {
"A": 1000
},
"Other2": {
"B": 2000
}
}
TODOS
Use better terminology here. ❝Inner root❞? Really⁇
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 (>= 11.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.