Skip to content

Latest commit

 

History

History
39 lines (31 loc) · 1.72 KB

README.md

File metadata and controls

39 lines (31 loc) · 1.72 KB

PolyJson

Attribute based, polymorphic support for System.Text.Json (and optionally Newtonsoft.Json). It supports both serialization and deserialization and is reasonably fast.

Nuget Packages

Package name Description Badge
PolyJson Basic types and System.Text.Json support PolyJson
PolyJson.NewtonsoftJson Optional Newtonsoft.Json support PolyJson.NewtonsoftJson

Usage

Decorate the base class with the PolyJsonConverter attribute and register the subtypes:

[PolyJsonConverter("_t")]
//[Newtonsoft.Json.JsonConverter(typeof(PolyJsonNewtonsoftJsonConverter))] // Optional
[PolyJsonConverter.SubType(typeof(Dog), "dog")]
[PolyJsonConverter.SubType(typeof(Cat), "cat")]
public abstract class Animal
{
    [JsonPropertyName("_t")]
    //[Newtonsoft.Json.JsonProperty("_t")] // Optional
    public string Discriminator => DiscriminatorValue.Get(GetType());
    public int Id { get; set; }
}

The PolyJsonConverter specifies the discriminator field, in this case _t. And all possible sub types are registered with their discriminator value. The Newtonsoft.Json support is optional, but uses the same configured subtypes as that configured for System.Text.Json. A sub type does not have any attributes and can for example be:

public class Dog : Animal
{
    public bool CanBark { get; set; }
}