RSCG – JsonPolymorphicGenerator
| name | JsonPolymorphicGenerator |
| nuget | https://www.nuget.org/packages/GoLive.Generator.JsonPolymorphicGenerator/ |
| link | https://github.com/surgicalcoder/JsonPolymorphicGenerator |
| author | surgicalcoder |
Generating JsonDerivedType to be added to the base class
This is how you can use JsonPolymorphicGenerator .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GoLive.Generator.JsonPolymorphicGenerator" Version="1.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
</Project>
The code that you will use is
//https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/polymorphism?pivots=dotnet-7-0
using JsonPolymorphicGeneratorDemo;
using System.Text.Json;
Person[] persons = new Person[2];
persons[0] = new Student() { Name="Student Ignat"};
persons[1] = new Teacher() { Name = "Teacher Ignat" };
JsonSerializerOptions opt = new ()
{
WriteIndented = true
};
var ser = JsonSerializer.Serialize(persons,opt);
Console.WriteLine(ser);
var p = JsonSerializer.Deserialize<Person[]>(ser);
if(p != null)
foreach (var item in p)
{
Console.WriteLine(item.Data());
}
using System.Text.Json.Serialization;
namespace JsonPolymorphicGeneratorDemo;
[JsonPolymorphic]
public abstract partial class Person
{
public string? Name { get; set; }
public abstract string Data();
}
public class Teacher : Person
{
public override string Data()
{
return "Class Teacher:" + Name;
}
}
public class Student : Person
{
public override string Data()
{
return "Class Student:" + Name;
}
}
The code that is generated is
using System.Text.Json.Serialization;
namespace JsonPolymorphicGeneratorDemo
{
[JsonDerivedType(typeof(JsonPolymorphicGeneratorDemo.Teacher),"Teacher")]
[JsonDerivedType(typeof(JsonPolymorphicGeneratorDemo.Student),"Student")]
public partial class Person
{
}
}
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/JsonPolymorphicGenerator
Leave a Reply