diff --git a/head/csharp-SystemTextJson/test/inputs/json/priority/combinations1.json/use-records-true--3cdbe9dae4f8/QuickType.cs b/head/csharp-SystemTextJson/test/inputs/json/priority/combinations1.json/use-records-true--3cdbe9dae4f8/QuickType.cs
new file mode 100644
index 0000000..4d35714
--- /dev/null
+++ b/head/csharp-SystemTextJson/test/inputs/json/priority/combinations1.json/use-records-true--3cdbe9dae4f8/QuickType.cs
@@ -0,0 +1,2993 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'System.Text.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Text.Json;
+    using System.Text.Json.Serialization;
+    using System.Globalization;
+
+    public partial record TopLevel
+    {
+        [JsonRequired]
+        [JsonPropertyName("centrodesmose")]
+        public string Centrodesmose { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cerograph")]
+        public CerographElement[] Cerograph { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("chemotherapeutics")]
+        public ChemotherapeuticElement[] Chemotherapeutics { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cimelia")]
+        public CimeliaElement[] Cimelia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("citrated")]
+        public long Citrated { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("clinodome")]
+        public Clinodome[] Clinodome { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("coadjust")]
+        public CoadjustElement[] Coadjust { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("consilience")]
+        public Consilience[] Consilience { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("constructor")]
+        public Constructor[] Constructor { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("continuative")]
+        public Continuative[] Continuative { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("credulity")]
+        public CredulityElement[] Credulity { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("creviced")]
+        public Creviced[] Creviced { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cubiculum")]
+        public long?[][] Cubiculum { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("deruralize")]
+        public DeruralizeElement[] Deruralize { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("diaereses")]
+        public DiaereseElement[] Diaereses { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("dissolution")]
+        public object[]?[] Dissolution { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("downstroke")]
+        public Downstroke[] Downstroke { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("electrotautomerism")]
+        public double?[] Electrotautomerism { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("eleutheromania")]
+        public Eleutheromania[] Eleutheromania { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("encrust")]
+        public Encrust Encrust { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("entomoid")]
+        public Entomoid[] Entomoid { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("epipaleolithic")]
+        public Epipaleolithic[] Epipaleolithic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("expropriable")]
+        public Expropriable[] Expropriable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("faggingly")]
+        public FagginglyElement[] Faggingly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("fenks")]
+        public FenkElement[] Fenks { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("flagmaking")]
+        public FlagmakingElement[] Flagmaking { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("fluorometer")]
+        public Fluorometer[] Fluorometer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("fulsome")]
+        public long?[] Fulsome { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("fuzzy")]
+        public Fuzzy[] Fuzzy { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("gardenwards")]
+        public Gardenward[] Gardenwards { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("generalissimo")]
+        public Generalissimo[] Generalissimo { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("habeas")]
+        public Dictionary<string, long>?[] Habeas { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hemicrystalline")]
+        public Hemicrystalline[] Hemicrystalline { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hemocoele")]
+        public HemocoeleElement[] Hemocoele { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hoister")]
+        public Hoister[] Hoister { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hyperpiesis")]
+        public Hyperpiesi[] Hyperpiesis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hyppish")]
+        public Hyppish[] Hyppish { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("idealizer")]
+        public Idealizer[] Idealizer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("incrustator")]
+        public Incrustator[] Incrustator { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("intentiveness")]
+        public Intentiveness[] Intentiveness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("interacinar")]
+        public Interacinar Interacinar { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("intercorrelation")]
+        public long[]?[] Intercorrelation { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("jacutinga")]
+        public Jacutinga[] Jacutinga { get; set; }
+    }
+
+    public partial record CerographClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("apotropaion")]
+        public object Apotropaion { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("casuary")]
+        public object Casuary { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("creaker")]
+        public object Creaker { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("disqualification")]
+        public object Disqualification { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("imperatorious")]
+        public object Imperatorious { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("impermeabilize")]
+        public object Impermeabilize { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("metastoma")]
+        public object Metastoma { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("noctidiurnal")]
+        public object Noctidiurnal { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nonreserve")]
+        public object Nonreserve { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ophthalmotonometry")]
+        public object Ophthalmotonometry { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pailful")]
+        public object Pailful { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pigfish")]
+        public object Pigfish { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pongee")]
+        public object Pongee { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("prosodical")]
+        public object Prosodical { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("scrofuloderm")]
+        public object Scrofuloderm { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("storekeeping")]
+        public object Storekeeping { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("therologist")]
+        public object Therologist { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Tolowa")]
+        public object Tolowa { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tradeful")]
+        public object Tradeful { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unriveting")]
+        public object Unriveting { get; set; }
+    }
+
+    public partial record ChemotherapeuticClass
+    {
+        [JsonPropertyName("angioneurotic")]
+        public object? Angioneurotic { get; set; }
+
+        [JsonPropertyName("availment")]
+        public object? Availment { get; set; }
+
+        [JsonPropertyName("bladelet")]
+        public object? Bladelet { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonPropertyName("caulis")]
+        public object? Caulis { get; set; }
+
+        [JsonPropertyName("chalcus")]
+        public object? Chalcus { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonPropertyName("enteradenological")]
+        public object? Enteradenological { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonPropertyName("imporosity")]
+        public object? Imporosity { get; set; }
+
+        [JsonPropertyName("insistently")]
+        public object? Insistently { get; set; }
+
+        [JsonPropertyName("intraparietal")]
+        public object? Intraparietal { get; set; }
+
+        [JsonPropertyName("ivied")]
+        public object? Ivied { get; set; }
+
+        [JsonPropertyName("Maureen")]
+        public object? Maureen { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonPropertyName("nostochine")]
+        public object? Nostochine { get; set; }
+
+        [JsonPropertyName("nutcracker")]
+        public object? Nutcracker { get; set; }
+
+        [JsonPropertyName("ofttimes")]
+        public object? Ofttimes { get; set; }
+
+        [JsonPropertyName("phenocryst")]
+        public object? Phenocryst { get; set; }
+
+        [JsonPropertyName("precoincident")]
+        public object? Precoincident { get; set; }
+
+        [JsonPropertyName("ramiferous")]
+        public object? Ramiferous { get; set; }
+
+        [JsonPropertyName("stagmometer")]
+        public object? Stagmometer { get; set; }
+
+        [JsonPropertyName("tetherball")]
+        public object? Tetherball { get; set; }
+
+        [JsonPropertyName("unshy")]
+        public object? Unshy { get; set; }
+    }
+
+    public partial record CimeliaClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("catharticalness")]
+        public double Catharticalness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Chirotherium")]
+        public long Chirotherium { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("disdiapason")]
+        public string Disdiapason { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("homocerc")]
+        public bool Homocerc { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nonbookish")]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record CoadjustClass
+    {
+        [JsonPropertyName("amidosulphonal")]
+        public object? Amidosulphonal { get; set; }
+
+        [JsonPropertyName("Benny")]
+        public object? Benny { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonPropertyName("ensnare")]
+        public object? Ensnare { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonPropertyName("hybridizer")]
+        public object? Hybridizer { get; set; }
+
+        [JsonPropertyName("leastwise")]
+        public object? Leastwise { get; set; }
+
+        [JsonPropertyName("lof")]
+        public object? Lof { get; set; }
+
+        [JsonPropertyName("monkhood")]
+        public object? Monkhood { get; set; }
+
+        [JsonPropertyName("Netherlandish")]
+        public object? Netherlandish { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonPropertyName("peonism")]
+        public object? Peonism { get; set; }
+
+        [JsonPropertyName("Phonelescope")]
+        public object? Phonelescope { get; set; }
+
+        [JsonPropertyName("porphyrogeniture")]
+        public object? Porphyrogeniture { get; set; }
+
+        [JsonPropertyName("preindemnify")]
+        public object? Preindemnify { get; set; }
+
+        [JsonPropertyName("rosal")]
+        public object? Rosal { get; set; }
+
+        [JsonPropertyName("scalenous")]
+        public object? Scalenous { get; set; }
+
+        [JsonPropertyName("scopine")]
+        public object? Scopine { get; set; }
+
+        [JsonPropertyName("Sedaceae")]
+        public object? Sedaceae { get; set; }
+
+        [JsonPropertyName("suberinize")]
+        public object? Suberinize { get; set; }
+
+        [JsonPropertyName("symbiot")]
+        public object? Symbiot { get; set; }
+
+        [JsonPropertyName("tablefellow")]
+        public object? Tablefellow { get; set; }
+
+        [JsonPropertyName("unchargeable")]
+        public object? Unchargeable { get; set; }
+    }
+
+    public partial record CredulityClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("ammonolytic")]
+        public object Ammonolytic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("bushmaster")]
+        public object Bushmaster { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("considering")]
+        public object Considering { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("consuetudinary")]
+        public object Consuetudinary { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("embarras")]
+        public object Embarras { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("fineness")]
+        public object Fineness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("flaithship")]
+        public object Flaithship { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Flavia")]
+        public object Flavia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("gruffly")]
+        public object Gruffly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Hedychium")]
+        public object Hedychium { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("leadwort")]
+        public object Leadwort { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("overseriously")]
+        public object Overseriously { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("parabola")]
+        public object Parabola { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pectinatodenticulate")]
+        public object Pectinatodenticulate { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Popean")]
+        public object Popean { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pornocrat")]
+        public object Pornocrat { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("quadrisect")]
+        public object Quadrisect { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("seriality")]
+        public object Seriality { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("vamphorn")]
+        public object Vamphorn { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("wharp")]
+        public object Wharp { get; set; }
+    }
+
+    public partial record DeruralizeClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("bockerel")]
+        public object Bockerel { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("boulder")]
+        public object Boulder { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("churrus")]
+        public object Churrus { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("counterdigged")]
+        public object Counterdigged { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("dialogite")]
+        public object Dialogite { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("digenic")]
+        public object Digenic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("dunbird")]
+        public object Dunbird { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ergatogyne")]
+        public object Ergatogyne { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("fiendful")]
+        public object Fiendful { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("jackrod")]
+        public object Jackrod { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Jehovistic")]
+        public object Jehovistic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Paninean")]
+        public object Paninean { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("panther")]
+        public object Panther { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("placentigerous")]
+        public object Placentigerous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Romney")]
+        public object Romney { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("sparm")]
+        public object Sparm { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tocsin")]
+        public object Tocsin { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unnicked")]
+        public object Unnicked { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unstavable")]
+        public object Unstavable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("windfirm")]
+        public object Windfirm { get; set; }
+    }
+
+    public partial record DiaereseClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("Amoreuxia")]
+        public object Amoreuxia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ani")]
+        public object Ani { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("bernicle")]
+        public object Bernicle { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("blackwasher")]
+        public object Blackwasher { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("blowhard")]
+        public object Blowhard { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("broma")]
+        public object Broma { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("closecross")]
+        public object Closecross { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("congregationalism")]
+        public object Congregationalism { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("grayly")]
+        public object Grayly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("historically")]
+        public object Historically { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hoast")]
+        public object Hoast { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("irretentive")]
+        public object Irretentive { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("parcener")]
+        public object Parcener { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pedder")]
+        public object Pedder { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pseudoanatomic")]
+        public object Pseudoanatomic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("rhizocarpian")]
+        public object Rhizocarpian { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("samel")]
+        public object Samel { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("silker")]
+        public object Silker { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("subdentated")]
+        public object Subdentated { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("subobscure")]
+        public object Subobscure { get; set; }
+    }
+
+    public partial record Encrust
+    {
+        [JsonRequired]
+        [JsonPropertyName("comradely")]
+        public object Comradely { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("diacanthous")]
+        public object Diacanthous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("feminineness")]
+        public object Feminineness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("gossamered")]
+        public object Gossamered { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Hibernia")]
+        public object Hibernia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Hibiscus")]
+        public object Hibiscus { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Lepidosauria")]
+        public object Lepidosauria { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("lollingly")]
+        public object Lollingly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("manager")]
+        public object Manager { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("mechanic")]
+        public object Mechanic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("overminuteness")]
+        public object Overminuteness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("papelonne")]
+        public object Papelonne { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("plebification")]
+        public object Plebification { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pugmiller")]
+        public object Pugmiller { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("recoveror")]
+        public object Recoveror { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("spermatoblastic")]
+        public object Spermatoblastic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Syllidae")]
+        public object Syllidae { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ungyved")]
+        public object Ungyved { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("whirlabout")]
+        public object Whirlabout { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("woodenware")]
+        public object Woodenware { get; set; }
+    }
+
+    public partial record FagginglyClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("abranchian")]
+        public object Abranchian { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("aculeiform")]
+        public object Aculeiform { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("adiaphoristic")]
+        public object Adiaphoristic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("adoptionism")]
+        public object Adoptionism { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Anglic")]
+        public object Anglic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("antrotomy")]
+        public object Antrotomy { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("coerciveness")]
+        public object Coerciveness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("decorist")]
+        public object Decorist { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("duckhood")]
+        public object Duckhood { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Heteromeri")]
+        public object Heteromeri { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hypochnose")]
+        public object Hypochnose { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("lochage")]
+        public object Lochage { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("melee")]
+        public object Melee { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nonconformitant")]
+        public object Nonconformitant { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Poinsettia")]
+        public object Poinsettia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("putatively")]
+        public object Putatively { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("semivolatile")]
+        public object Semivolatile { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("soleas")]
+        public object Soleas { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unfastenable")]
+        public object Unfastenable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unmillinered")]
+        public object Unmillinered { get; set; }
+    }
+
+    public partial record FenkClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("apoise")]
+        public object Apoise { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("astronomize")]
+        public object Astronomize { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cockhorse")]
+        public object Cockhorse { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("copular")]
+        public object Copular { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Dagomba")]
+        public object Dagomba { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("draffy")]
+        public object Draffy { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("foreigner")]
+        public object Foreigner { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Guyandot")]
+        public object Guyandot { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("neurogliosis")]
+        public object Neurogliosis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("osmious")]
+        public object Osmious { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("palpitate")]
+        public object Palpitate { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("rebukeable")]
+        public object Rebukeable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Reinwardtia")]
+        public object Reinwardtia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("reservatory")]
+        public object Reservatory { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("scalt")]
+        public object Scalt { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("scripturalize")]
+        public object Scripturalize { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tintometer")]
+        public object Tintometer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Tritoness")]
+        public object Tritoness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("undergrade")]
+        public object Undergrade { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("undermountain")]
+        public object Undermountain { get; set; }
+    }
+
+    public partial record FlagmakingClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("albarco")]
+        public object Albarco { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Bunodonta")]
+        public object Bunodonta { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hornify")]
+        public object Hornify { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Hydrocorisae")]
+        public object Hydrocorisae { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hypoglossus")]
+        public object Hypoglossus { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("inexpiably")]
+        public object Inexpiably { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ingratitude")]
+        public object Ingratitude { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ladyfly")]
+        public object Ladyfly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("medicament")]
+        public object Medicament { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("monogrammatic")]
+        public object Monogrammatic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nobbut")]
+        public object Nobbut { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Notacanthidae")]
+        public object Notacanthidae { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("polyplacophore")]
+        public object Polyplacophore { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("proexercise")]
+        public object Proexercise { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("protoplast")]
+        public object Protoplast { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("puzzling")]
+        public object Puzzling { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("splanchnoskeleton")]
+        public object Splanchnoskeleton { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unloveliness")]
+        public object Unloveliness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unquarantined")]
+        public object Unquarantined { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unrenounceable")]
+        public object Unrenounceable { get; set; }
+    }
+
+    public partial record HemocoeleClass
+    {
+        [JsonPropertyName("acrogamy")]
+        public object? Acrogamy { get; set; }
+
+        [JsonPropertyName("amelification")]
+        public object? Amelification { get; set; }
+
+        [JsonPropertyName("autobiographic")]
+        public object? Autobiographic { get; set; }
+
+        [JsonPropertyName("berat")]
+        public object? Berat { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonPropertyName("disproportionably")]
+        public object? Disproportionably { get; set; }
+
+        [JsonPropertyName("erythrite")]
+        public object? Erythrite { get; set; }
+
+        [JsonPropertyName("graphic")]
+        public object? Graphic { get; set; }
+
+        [JsonPropertyName("hepatological")]
+        public object? Hepatological { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonPropertyName("incommensurably")]
+        public object? Incommensurably { get; set; }
+
+        [JsonPropertyName("misaffirm")]
+        public object? Misaffirm { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonPropertyName("pocketbook")]
+        public object? Pocketbook { get; set; }
+
+        [JsonPropertyName("sclerometric")]
+        public object? Sclerometric { get; set; }
+
+        [JsonPropertyName("stambouline")]
+        public object? Stambouline { get; set; }
+
+        [JsonPropertyName("stickpin")]
+        public object? Stickpin { get; set; }
+
+        [JsonPropertyName("tubulure")]
+        public object? Tubulure { get; set; }
+
+        [JsonPropertyName("undelated")]
+        public object? Undelated { get; set; }
+
+        [JsonPropertyName("unsalt")]
+        public object? Unsalt { get; set; }
+
+        [JsonPropertyName("untutelar")]
+        public object? Untutelar { get; set; }
+
+        [JsonPropertyName("vagrant")]
+        public object? Vagrant { get; set; }
+
+        [JsonPropertyName("Walt")]
+        public object? Walt { get; set; }
+    }
+
+    public partial record Interacinar
+    {
+        [JsonRequired]
+        [JsonPropertyName("assapan")]
+        public double Assapan { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("benefactorship")]
+        public bool Benefactorship { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("triseriatim")]
+        public string Triseriatim { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tubbing")]
+        public long Tubbing { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("untrimmed")]
+        public object Untrimmed { get; set; }
+    }
+
+    public partial struct CerographElement
+    {
+        public CerographClass? CerographClass;
+        public string? String;
+
+        public static implicit operator CerographElement(CerographClass CerographClass) => new CerographElement { CerographClass = CerographClass };
+        public static implicit operator CerographElement(string String) => new CerographElement { String = String };
+        public bool IsNull => CerographClass == null && String == null;
+    }
+
+    public partial struct ChemotherapeuticElement
+    {
+        public ChemotherapeuticClass? ChemotherapeuticClass;
+        public long? Integer;
+
+        public static implicit operator ChemotherapeuticElement(ChemotherapeuticClass ChemotherapeuticClass) => new ChemotherapeuticElement { ChemotherapeuticClass = ChemotherapeuticClass };
+        public static implicit operator ChemotherapeuticElement(long Integer) => new ChemotherapeuticElement { Integer = Integer };
+    }
+
+    public partial struct CimeliaElement
+    {
+        public CimeliaClass? CimeliaClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator CimeliaElement(CimeliaClass CimeliaClass) => new CimeliaElement { CimeliaClass = CimeliaClass };
+        public static implicit operator CimeliaElement(long[] IntegerArray) => new CimeliaElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Clinodome
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Clinodome(double Double) => new Clinodome { Double = Double };
+        public static implicit operator Clinodome(string String) => new Clinodome { String = String };
+    }
+
+    public partial struct CoadjustElement
+    {
+        public CoadjustClass? CoadjustClass;
+        public double? Double;
+
+        public static implicit operator CoadjustElement(CoadjustClass CoadjustClass) => new CoadjustElement { CoadjustClass = CoadjustClass };
+        public static implicit operator CoadjustElement(double Double) => new CoadjustElement { Double = Double };
+    }
+
+    public partial struct Consilience
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Consilience(double Double) => new Consilience { Double = Double };
+        public static implicit operator Consilience(Dictionary<string, long> IntegerMap) => new Consilience { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Constructor
+    {
+        public bool? Bool;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Constructor(bool Bool) => new Constructor { Bool = Bool };
+        public static implicit operator Constructor(Dictionary<string, long?> UnionMap) => new Constructor { UnionMap = UnionMap };
+    }
+
+    public partial struct Continuative
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Continuative(Dictionary<string, long> IntegerMap) => new Continuative { IntegerMap = IntegerMap };
+        public static implicit operator Continuative(string String) => new Continuative { String = String };
+    }
+
+    public partial struct CredulityElement
+    {
+        public CredulityClass? CredulityClass;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator CredulityElement(CredulityClass CredulityClass) => new CredulityElement { CredulityClass = CredulityClass };
+        public static implicit operator CredulityElement(long Integer) => new CredulityElement { Integer = Integer };
+        public static implicit operator CredulityElement(string String) => new CredulityElement { String = String };
+    }
+
+    public partial struct Creviced
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Creviced(bool Bool) => new Creviced { Bool = Bool };
+        public static implicit operator Creviced(Dictionary<string, long> IntegerMap) => new Creviced { IntegerMap = IntegerMap };
+        public static implicit operator Creviced(string String) => new Creviced { String = String };
+    }
+
+    public partial struct DeruralizeElement
+    {
+        public bool? Bool;
+        public DeruralizeClass? DeruralizeClass;
+        public object[]? NullArray;
+
+        public static implicit operator DeruralizeElement(bool Bool) => new DeruralizeElement { Bool = Bool };
+        public static implicit operator DeruralizeElement(DeruralizeClass DeruralizeClass) => new DeruralizeElement { DeruralizeClass = DeruralizeClass };
+        public static implicit operator DeruralizeElement(object[] NullArray) => new DeruralizeElement { NullArray = NullArray };
+    }
+
+    public partial struct DiaereseElement
+    {
+        public bool? Bool;
+        public DiaereseClass? DiaereseClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator DiaereseElement(bool Bool) => new DiaereseElement { Bool = Bool };
+        public static implicit operator DiaereseElement(DiaereseClass DiaereseClass) => new DiaereseElement { DiaereseClass = DiaereseClass };
+        public static implicit operator DiaereseElement(long[] IntegerArray) => new DiaereseElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Downstroke
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Downstroke(bool Bool) => new Downstroke { Bool = Bool };
+        public static implicit operator Downstroke(object[] NullArray) => new Downstroke { NullArray = NullArray };
+        public static implicit operator Downstroke(string String) => new Downstroke { String = String };
+    }
+
+    public partial struct Eleutheromania
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Eleutheromania(double Double) => new Eleutheromania { Double = Double };
+        public static implicit operator Eleutheromania(Dictionary<string, long> IntegerMap) => new Eleutheromania { IntegerMap = IntegerMap };
+        public static implicit operator Eleutheromania(string String) => new Eleutheromania { String = String };
+    }
+
+    public partial struct Entomoid
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+
+        public static implicit operator Entomoid(CimeliaClass CimeliaClass) => new Entomoid { CimeliaClass = CimeliaClass };
+        public static implicit operator Entomoid(long Integer) => new Entomoid { Integer = Integer };
+    }
+
+    public partial struct Epipaleolithic
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Epipaleolithic(double Double) => new Epipaleolithic { Double = Double };
+        public static implicit operator Epipaleolithic(long[] IntegerArray) => new Epipaleolithic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Expropriable
+    {
+        public CimeliaClass? CimeliaClass;
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Expropriable(CimeliaClass CimeliaClass) => new Expropriable { CimeliaClass = CimeliaClass };
+        public static implicit operator Expropriable(double Double) => new Expropriable { Double = Double };
+        public static implicit operator Expropriable(object[] NullArray) => new Expropriable { NullArray = NullArray };
+    }
+
+    public partial struct FagginglyElement
+    {
+        public double? Double;
+        public FagginglyClass? FagginglyClass;
+
+        public static implicit operator FagginglyElement(double Double) => new FagginglyElement { Double = Double };
+        public static implicit operator FagginglyElement(FagginglyClass FagginglyClass) => new FagginglyElement { FagginglyClass = FagginglyClass };
+    }
+
+    public partial struct FenkElement
+    {
+        public FenkClass? FenkClass;
+        public string? String;
+
+        public static implicit operator FenkElement(FenkClass FenkClass) => new FenkElement { FenkClass = FenkClass };
+        public static implicit operator FenkElement(string String) => new FenkElement { String = String };
+    }
+
+    public partial struct FlagmakingElement
+    {
+        public bool? Bool;
+        public double? Double;
+        public FlagmakingClass? FlagmakingClass;
+
+        public static implicit operator FlagmakingElement(bool Bool) => new FlagmakingElement { Bool = Bool };
+        public static implicit operator FlagmakingElement(double Double) => new FlagmakingElement { Double = Double };
+        public static implicit operator FlagmakingElement(FlagmakingClass FlagmakingClass) => new FlagmakingElement { FlagmakingClass = FlagmakingClass };
+    }
+
+    public partial struct Fluorometer
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Fluorometer(long Integer) => new Fluorometer { Integer = Integer };
+        public static implicit operator Fluorometer(string String) => new Fluorometer { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial struct Fuzzy
+    {
+        public long? Integer;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Fuzzy(long Integer) => new Fuzzy { Integer = Integer };
+        public static implicit operator Fuzzy(Dictionary<string, long?> UnionMap) => new Fuzzy { UnionMap = UnionMap };
+    }
+
+    public partial struct Gardenward
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Gardenward(bool Bool) => new Gardenward { Bool = Bool };
+        public static implicit operator Gardenward(long[] IntegerArray) => new Gardenward { IntegerArray = IntegerArray };
+        public static implicit operator Gardenward(string String) => new Gardenward { String = String };
+    }
+
+    public partial struct Generalissimo
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Generalissimo(bool Bool) => new Generalissimo { Bool = Bool };
+        public static implicit operator Generalissimo(Dictionary<string, long> IntegerMap) => new Generalissimo { IntegerMap = IntegerMap };
+        public bool IsNull => Bool == null && IntegerMap == null;
+    }
+
+    public partial struct Hemicrystalline
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hemicrystalline(CimeliaClass CimeliaClass) => new Hemicrystalline { CimeliaClass = CimeliaClass };
+        public static implicit operator Hemicrystalline(string String) => new Hemicrystalline { String = String };
+    }
+
+    public partial struct HemocoeleElement
+    {
+        public HemocoeleClass? HemocoeleClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator HemocoeleElement(HemocoeleClass HemocoeleClass) => new HemocoeleElement { HemocoeleClass = HemocoeleClass };
+        public static implicit operator HemocoeleElement(long[] IntegerArray) => new HemocoeleElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Hoister
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hoister(CimeliaClass CimeliaClass) => new Hoister { CimeliaClass = CimeliaClass };
+        public static implicit operator Hoister(string String) => new Hoister { String = String };
+        public bool IsNull => CimeliaClass == null && String == null;
+    }
+
+    public partial struct Hyperpiesi
+    {
+        public CimeliaClass? CimeliaClass;
+        public object[]? NullArray;
+
+        public static implicit operator Hyperpiesi(CimeliaClass CimeliaClass) => new Hyperpiesi { CimeliaClass = CimeliaClass };
+        public static implicit operator Hyperpiesi(object[] NullArray) => new Hyperpiesi { NullArray = NullArray };
+        public bool IsNull => NullArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Hyppish
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Hyppish(bool Bool) => new Hyppish { Bool = Bool };
+        public static implicit operator Hyppish(string String) => new Hyppish { String = String };
+        public bool IsNull => Bool == null && String == null;
+    }
+
+    public partial struct Idealizer
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Idealizer(CimeliaClass CimeliaClass) => new Idealizer { CimeliaClass = CimeliaClass };
+        public static implicit operator Idealizer(long Integer) => new Idealizer { Integer = Integer };
+        public static implicit operator Idealizer(object[] NullArray) => new Idealizer { NullArray = NullArray };
+    }
+
+    public partial struct Incrustator
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Incrustator(long Integer) => new Incrustator { Integer = Integer };
+        public static implicit operator Incrustator(long[] IntegerArray) => new Incrustator { IntegerArray = IntegerArray };
+        public static implicit operator Incrustator(string String) => new Incrustator { String = String };
+    }
+
+    public partial struct Intentiveness
+    {
+        public CimeliaClass? CimeliaClass;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Intentiveness(CimeliaClass CimeliaClass) => new Intentiveness { CimeliaClass = CimeliaClass };
+        public static implicit operator Intentiveness(double Double) => new Intentiveness { Double = Double };
+        public static implicit operator Intentiveness(string String) => new Intentiveness { String = String };
+    }
+
+    public partial struct Jacutinga
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Jacutinga(long[] IntegerArray) => new Jacutinga { IntegerArray = IntegerArray };
+        public static implicit operator Jacutinga(Dictionary<string, long?> UnionMap) => new Jacutinga { UnionMap = UnionMap };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonSerializer.Deserialize<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonSerializer.Serialize(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)
+        {
+            Converters =
+            {
+                CerographElementConverter.Singleton,
+                ChemotherapeuticElementConverter.Singleton,
+                CimeliaElementConverter.Singleton,
+                ClinodomeConverter.Singleton,
+                CoadjustElementConverter.Singleton,
+                ConsilienceConverter.Singleton,
+                ConstructorConverter.Singleton,
+                ContinuativeConverter.Singleton,
+                CredulityElementConverter.Singleton,
+                CrevicedConverter.Singleton,
+                DeruralizeElementConverter.Singleton,
+                DiaereseElementConverter.Singleton,
+                DownstrokeConverter.Singleton,
+                EleutheromaniaConverter.Singleton,
+                EntomoidConverter.Singleton,
+                EpipaleolithicConverter.Singleton,
+                ExpropriableConverter.Singleton,
+                FagginglyElementConverter.Singleton,
+                FenkElementConverter.Singleton,
+                FlagmakingElementConverter.Singleton,
+                FluorometerConverter.Singleton,
+                FuzzyConverter.Singleton,
+                GardenwardConverter.Singleton,
+                GeneralissimoConverter.Singleton,
+                HemicrystallineConverter.Singleton,
+                HemocoeleElementConverter.Singleton,
+                HoisterConverter.Singleton,
+                HyperpiesiConverter.Singleton,
+                HyppishConverter.Singleton,
+                IdealizerConverter.Singleton,
+                IncrustatorConverter.Singleton,
+                IntentivenessConverter.Singleton,
+                JacutingaConverter.Singleton,
+                new DateOnlyConverter(),
+                new TimeOnlyConverter(),
+                IsoDateTimeOffsetConverter.Singleton
+            },
+        };
+    }
+
+    internal class CerographElementConverter : JsonConverter<CerographElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(CerographElement);
+
+        public override CerographElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new CerographElement { };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new CerographElement { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<CerographClass>(ref reader, options);
+                    return new CerographElement { CerographClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type CerographElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, CerographElement value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.CerographClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.CerographClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type CerographElement");
+        }
+
+        public static readonly CerographElementConverter Singleton = new CerographElementConverter();
+    }
+
+    internal class ChemotherapeuticElementConverter : JsonConverter<ChemotherapeuticElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChemotherapeuticElement);
+
+        public override ChemotherapeuticElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new ChemotherapeuticElement { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<ChemotherapeuticClass>(ref reader, options);
+                    return new ChemotherapeuticElement { ChemotherapeuticClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type ChemotherapeuticElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, ChemotherapeuticElement value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.ChemotherapeuticClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.ChemotherapeuticClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type ChemotherapeuticElement");
+        }
+
+        public static readonly ChemotherapeuticElementConverter Singleton = new ChemotherapeuticElementConverter();
+    }
+
+    internal class CimeliaElementConverter : JsonConverter<CimeliaElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(CimeliaElement);
+
+        public override CimeliaElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new CimeliaElement { };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<CimeliaClass>(ref reader, options);
+                    return new CimeliaElement { CimeliaClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new CimeliaElement { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type CimeliaElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, CimeliaElement value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.CimeliaClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type CimeliaElement");
+        }
+
+        public static readonly CimeliaElementConverter Singleton = new CimeliaElementConverter();
+    }
+
+    internal class ClinodomeConverter : JsonConverter<Clinodome>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Clinodome);
+
+        public override Clinodome Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Clinodome { Double = doubleValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Clinodome { String = stringValue };
+            }
+            throw new JsonException("Cannot unmarshal type Clinodome");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Clinodome value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Clinodome");
+        }
+
+        public static readonly ClinodomeConverter Singleton = new ClinodomeConverter();
+    }
+
+    internal class CoadjustElementConverter : JsonConverter<CoadjustElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(CoadjustElement);
+
+        public override CoadjustElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new CoadjustElement { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<CoadjustClass>(ref reader, options);
+                    return new CoadjustElement { CoadjustClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type CoadjustElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, CoadjustElement value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.CoadjustClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.CoadjustClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type CoadjustElement");
+        }
+
+        public static readonly CoadjustElementConverter Singleton = new CoadjustElementConverter();
+    }
+
+    internal class ConsilienceConverter : JsonConverter<Consilience>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Consilience);
+
+        public override Consilience Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Consilience { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Consilience { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Consilience");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Consilience value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Consilience");
+        }
+
+        public static readonly ConsilienceConverter Singleton = new ConsilienceConverter();
+    }
+
+    internal class ConstructorConverter : JsonConverter<Constructor>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Constructor);
+
+        public override Constructor Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Constructor { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long?>>(ref reader, options);
+                    return new Constructor { UnionMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Constructor");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Constructor value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Constructor");
+        }
+
+        public static readonly ConstructorConverter Singleton = new ConstructorConverter();
+    }
+
+    internal class ContinuativeConverter : JsonConverter<Continuative>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Continuative);
+
+        public override Continuative Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Continuative { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Continuative { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Continuative");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Continuative value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Continuative");
+        }
+
+        public static readonly ContinuativeConverter Singleton = new ContinuativeConverter();
+    }
+
+    internal class CredulityElementConverter : JsonConverter<CredulityElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(CredulityElement);
+
+        public override CredulityElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new CredulityElement { Integer = intValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new CredulityElement { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<CredulityClass>(ref reader, options);
+                    return new CredulityElement { CredulityClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type CredulityElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, CredulityElement value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.CredulityClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.CredulityClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type CredulityElement");
+        }
+
+        public static readonly CredulityElementConverter Singleton = new CredulityElementConverter();
+    }
+
+    internal class CrevicedConverter : JsonConverter<Creviced>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Creviced);
+
+        public override Creviced Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Creviced { Bool = boolValue };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Creviced { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Creviced { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Creviced");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Creviced value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Creviced");
+        }
+
+        public static readonly CrevicedConverter Singleton = new CrevicedConverter();
+    }
+
+    internal class DeruralizeElementConverter : JsonConverter<DeruralizeElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(DeruralizeElement);
+
+        public override DeruralizeElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new DeruralizeElement { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<DeruralizeClass>(ref reader, options);
+                    return new DeruralizeElement { DeruralizeClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new DeruralizeElement { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type DeruralizeElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, DeruralizeElement value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.DeruralizeClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.DeruralizeClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type DeruralizeElement");
+        }
+
+        public static readonly DeruralizeElementConverter Singleton = new DeruralizeElementConverter();
+    }
+
+    internal class DiaereseElementConverter : JsonConverter<DiaereseElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiaereseElement);
+
+        public override DiaereseElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new DiaereseElement { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<DiaereseClass>(ref reader, options);
+                    return new DiaereseElement { DiaereseClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new DiaereseElement { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type DiaereseElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, DiaereseElement value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.DiaereseClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.DiaereseClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type DiaereseElement");
+        }
+
+        public static readonly DiaereseElementConverter Singleton = new DiaereseElementConverter();
+    }
+
+    internal class DownstrokeConverter : JsonConverter<Downstroke>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Downstroke);
+
+        public override Downstroke Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Downstroke { Bool = boolValue };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Downstroke { String = stringValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Downstroke { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Downstroke");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Downstroke value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Downstroke");
+        }
+
+        public static readonly DownstrokeConverter Singleton = new DownstrokeConverter();
+    }
+
+    internal class EleutheromaniaConverter : JsonConverter<Eleutheromania>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eleutheromania);
+
+        public override Eleutheromania Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Eleutheromania { Double = doubleValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Eleutheromania { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Eleutheromania { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Eleutheromania");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Eleutheromania value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Eleutheromania");
+        }
+
+        public static readonly EleutheromaniaConverter Singleton = new EleutheromaniaConverter();
+    }
+
+    internal class EntomoidConverter : JsonConverter<Entomoid>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Entomoid);
+
+        public override Entomoid Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Entomoid { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<CimeliaClass>(ref reader, options);
+                    return new Entomoid { CimeliaClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Entomoid");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Entomoid value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.CimeliaClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Entomoid");
+        }
+
+        public static readonly EntomoidConverter Singleton = new EntomoidConverter();
+    }
+
+    internal class EpipaleolithicConverter : JsonConverter<Epipaleolithic>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epipaleolithic);
+
+        public override Epipaleolithic Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Epipaleolithic { Double = doubleValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Epipaleolithic { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Epipaleolithic");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Epipaleolithic value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Epipaleolithic");
+        }
+
+        public static readonly EpipaleolithicConverter Singleton = new EpipaleolithicConverter();
+    }
+
+    internal class ExpropriableConverter : JsonConverter<Expropriable>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Expropriable);
+
+        public override Expropriable Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Expropriable { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<CimeliaClass>(ref reader, options);
+                    return new Expropriable { CimeliaClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Expropriable { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Expropriable");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Expropriable value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.CimeliaClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Expropriable");
+        }
+
+        public static readonly ExpropriableConverter Singleton = new ExpropriableConverter();
+    }
+
+    internal class FagginglyElementConverter : JsonConverter<FagginglyElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(FagginglyElement);
+
+        public override FagginglyElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new FagginglyElement { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<FagginglyClass>(ref reader, options);
+                    return new FagginglyElement { FagginglyClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type FagginglyElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, FagginglyElement value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.FagginglyClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.FagginglyClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type FagginglyElement");
+        }
+
+        public static readonly FagginglyElementConverter Singleton = new FagginglyElementConverter();
+    }
+
+    internal class FenkElementConverter : JsonConverter<FenkElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(FenkElement);
+
+        public override FenkElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new FenkElement { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<FenkClass>(ref reader, options);
+                    return new FenkElement { FenkClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type FenkElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, FenkElement value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.FenkClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.FenkClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type FenkElement");
+        }
+
+        public static readonly FenkElementConverter Singleton = new FenkElementConverter();
+    }
+
+    internal class FlagmakingElementConverter : JsonConverter<FlagmakingElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(FlagmakingElement);
+
+        public override FlagmakingElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new FlagmakingElement { Double = doubleValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new FlagmakingElement { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<FlagmakingClass>(ref reader, options);
+                    return new FlagmakingElement { FlagmakingClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type FlagmakingElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, FlagmakingElement value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.FlagmakingClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.FlagmakingClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type FlagmakingElement");
+        }
+
+        public static readonly FlagmakingElementConverter Singleton = new FlagmakingElementConverter();
+    }
+
+    internal class FluorometerConverter : JsonConverter<Fluorometer>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fluorometer);
+
+        public override Fluorometer Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Fluorometer { };
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Fluorometer { Integer = intValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Fluorometer { String = stringValue };
+            }
+            throw new JsonException("Cannot unmarshal type Fluorometer");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Fluorometer value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Fluorometer");
+        }
+
+        public static readonly FluorometerConverter Singleton = new FluorometerConverter();
+    }
+
+    internal class FuzzyConverter : JsonConverter<Fuzzy>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fuzzy);
+
+        public override Fuzzy Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Fuzzy { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long?>>(ref reader, options);
+                    return new Fuzzy { UnionMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Fuzzy");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Fuzzy value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Fuzzy");
+        }
+
+        public static readonly FuzzyConverter Singleton = new FuzzyConverter();
+    }
+
+    internal class GardenwardConverter : JsonConverter<Gardenward>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gardenward);
+
+        public override Gardenward Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Gardenward { Bool = boolValue };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Gardenward { String = stringValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Gardenward { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Gardenward");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Gardenward value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Gardenward");
+        }
+
+        public static readonly GardenwardConverter Singleton = new GardenwardConverter();
+    }
+
+    internal class GeneralissimoConverter : JsonConverter<Generalissimo>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Generalissimo);
+
+        public override Generalissimo Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Generalissimo { };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Generalissimo { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Generalissimo { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Generalissimo");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Generalissimo value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Generalissimo");
+        }
+
+        public static readonly GeneralissimoConverter Singleton = new GeneralissimoConverter();
+    }
+
+    internal class HemicrystallineConverter : JsonConverter<Hemicrystalline>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hemicrystalline);
+
+        public override Hemicrystalline Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Hemicrystalline { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<CimeliaClass>(ref reader, options);
+                    return new Hemicrystalline { CimeliaClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Hemicrystalline");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Hemicrystalline value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.CimeliaClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Hemicrystalline");
+        }
+
+        public static readonly HemicrystallineConverter Singleton = new HemicrystallineConverter();
+    }
+
+    internal class HemocoeleElementConverter : JsonConverter<HemocoeleElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(HemocoeleElement);
+
+        public override HemocoeleElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<HemocoeleClass>(ref reader, options);
+                    return new HemocoeleElement { HemocoeleClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new HemocoeleElement { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type HemocoeleElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, HemocoeleElement value, JsonSerializerOptions options)
+        {
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.HemocoeleClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.HemocoeleClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type HemocoeleElement");
+        }
+
+        public static readonly HemocoeleElementConverter Singleton = new HemocoeleElementConverter();
+    }
+
+    internal class HoisterConverter : JsonConverter<Hoister>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hoister);
+
+        public override Hoister Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Hoister { };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Hoister { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<CimeliaClass>(ref reader, options);
+                    return new Hoister { CimeliaClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Hoister");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Hoister value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.CimeliaClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Hoister");
+        }
+
+        public static readonly HoisterConverter Singleton = new HoisterConverter();
+    }
+
+    internal class HyperpiesiConverter : JsonConverter<Hyperpiesi>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyperpiesi);
+
+        public override Hyperpiesi Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Hyperpiesi { };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<CimeliaClass>(ref reader, options);
+                    return new Hyperpiesi { CimeliaClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Hyperpiesi { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Hyperpiesi");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Hyperpiesi value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.CimeliaClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Hyperpiesi");
+        }
+
+        public static readonly HyperpiesiConverter Singleton = new HyperpiesiConverter();
+    }
+
+    internal class HyppishConverter : JsonConverter<Hyppish>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyppish);
+
+        public override Hyppish Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Hyppish { };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Hyppish { Bool = boolValue };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Hyppish { String = stringValue };
+            }
+            throw new JsonException("Cannot unmarshal type Hyppish");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Hyppish value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Hyppish");
+        }
+
+        public static readonly HyppishConverter Singleton = new HyppishConverter();
+    }
+
+    internal class IdealizerConverter : JsonConverter<Idealizer>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Idealizer);
+
+        public override Idealizer Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Idealizer { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<CimeliaClass>(ref reader, options);
+                    return new Idealizer { CimeliaClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Idealizer { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Idealizer");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Idealizer value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.CimeliaClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Idealizer");
+        }
+
+        public static readonly IdealizerConverter Singleton = new IdealizerConverter();
+    }
+
+    internal class IncrustatorConverter : JsonConverter<Incrustator>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Incrustator);
+
+        public override Incrustator Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Incrustator { Integer = intValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Incrustator { String = stringValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Incrustator { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Incrustator");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Incrustator value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Incrustator");
+        }
+
+        public static readonly IncrustatorConverter Singleton = new IncrustatorConverter();
+    }
+
+    internal class IntentivenessConverter : JsonConverter<Intentiveness>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Intentiveness);
+
+        public override Intentiveness Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Intentiveness { Double = doubleValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Intentiveness { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<CimeliaClass>(ref reader, options);
+                    return new Intentiveness { CimeliaClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Intentiveness");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Intentiveness value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.CimeliaClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Intentiveness");
+        }
+
+        public static readonly IntentivenessConverter Singleton = new IntentivenessConverter();
+    }
+
+    internal class JacutingaConverter : JsonConverter<Jacutinga>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Jacutinga);
+
+        public override Jacutinga Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long?>>(ref reader, options);
+                    return new Jacutinga { UnionMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Jacutinga { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Jacutinga");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Jacutinga value, JsonSerializerOptions options)
+        {
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Jacutinga");
+        }
+
+        public static readonly JacutingaConverter Singleton = new JacutingaConverter();
+    }
+    
+    public class DateOnlyConverter : JsonConverter<DateOnly>
+    {
+        private readonly string serializationFormat;
+        public DateOnlyConverter() : this(null) { }
+
+        public DateOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "yyyy-MM-dd";
+        }
+
+        public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return DateOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    public class TimeOnlyConverter : JsonConverter<TimeOnly>
+    {
+        private readonly string serializationFormat;
+
+        public TimeOnlyConverter() : this(null) { }
+
+        public TimeOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff";
+        }
+
+        public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return TimeOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    internal class IsoDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
+    {
+        public override bool CanConvert(Type t) => t == typeof(DateTimeOffset);
+
+        private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
+
+        private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind;
+        private string? _dateTimeFormat;
+        private CultureInfo? _culture;
+
+        public DateTimeStyles DateTimeStyles
+        {
+                get => _dateTimeStyles;
+                set => _dateTimeStyles = value;
+        }
+
+        public string? DateTimeFormat
+        {
+                get => _dateTimeFormat ?? string.Empty;
+                set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value;
+        }
+
+        public CultureInfo Culture
+        {
+                get => _culture ?? CultureInfo.CurrentCulture;
+                set => _culture = value;
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
+        {
+                string text;
+
+
+                if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal
+                        || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal)
+                {
+                        value = value.ToUniversalTime();
+                }
+
+                text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture);
+
+                writer.WriteStringValue(text);
+        }
+
+        public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                string? dateText = reader.GetString();
+
+                if (string.IsNullOrEmpty(dateText) == false)
+                {
+                        if (!string.IsNullOrEmpty(_dateTimeFormat))
+                        {
+                                return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles);
+                        }
+                        else
+                        {
+                                return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles);
+                        }
+                }
+                else
+                {
+                        return default(DateTimeOffset);
+                }
+        }
+
+
+        public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
diff --git a/head/csharp-SystemTextJson/test/inputs/json/priority/combinations2.json/use-records-true--3cdbe9dae4f8/QuickType.cs b/head/csharp-SystemTextJson/test/inputs/json/priority/combinations2.json/use-records-true--3cdbe9dae4f8/QuickType.cs
new file mode 100644
index 0000000..667f815
--- /dev/null
+++ b/head/csharp-SystemTextJson/test/inputs/json/priority/combinations2.json/use-records-true--3cdbe9dae4f8/QuickType.cs
@@ -0,0 +1,2968 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'System.Text.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Text.Json;
+    using System.Text.Json.Serialization;
+    using System.Globalization;
+
+    public partial record TopLevel
+    {
+        [JsonRequired]
+        [JsonPropertyName("Abranchiata")]
+        public Abranchiata[] Abranchiata { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("academe")]
+        public Academe[] Academe { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("acquirable")]
+        public Acquirable[] Acquirable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("aerometry")]
+        public Aerometry[] Aerometry { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("alexin")]
+        public Alexin[] Alexin { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("alleviate")]
+        public AlleviateElement[] Alleviate { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("amaas")]
+        public Amaa[] Amaas { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ambassage")]
+        public Ambassage[] Ambassage { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("amphithyron")]
+        public Amphithyron?[] Amphithyron { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Andriana")]
+        public string?[] Andriana { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ankee")]
+        public AnkeeElement[] Ankee { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("annihilator")]
+        public Dictionary<string, long?>?[] Annihilator { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("annulose")]
+        public object Annulose { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Ansarie")]
+        public AnsarieElement[] Ansarie { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("aphasia")]
+        public Aphasia[] Aphasia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("asprawl")]
+        public Asprawl[] Asprawl { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("attractive")]
+        public bool?[] Attractive { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("barksome")]
+        public Dictionary<string, long> Barksome { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("bedesman")]
+        public Bedesman[] Bedesman { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("belard")]
+        public Belard[] Belard { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("bocking")]
+        public Bocking[] Bocking { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("brawlingly")]
+        public Brawlingly[] Brawlingly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("brookie")]
+        public Brookie[] Brookie { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("bumboatman")]
+        public Bumboatman[] Bumboatman { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("bystreet")]
+        public object[] Bystreet { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("calaverite")]
+        public Calaverite[] Calaverite { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("catallactic")]
+        public Catallactic[] Catallactic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cemental")]
+        public Cemental[] Cemental { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Chytridiaceae")]
+        public ChytridiaceaeElement[] Chytridiaceae { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Discordia")]
+        public DiscordiaElement[] Discordia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Endomyces")]
+        public Endomyce[] Endomyces { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Epinephelidae")]
+        public Epinephelidae[] Epinephelidae { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Eupatorium")]
+        public Eupatorium[] Eupatorium { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Gryphosaurus")]
+        public GryphosaurusElement[] Gryphosaurus { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Koryak")]
+        public Koryak[] Koryak { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Lavinia")]
+        public LaviniaElement[] Lavinia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Oskar")]
+        public OskarElement[] Oskar { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Rebecca")]
+        public RebeccaElement[] Rebecca { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Rhomboganoidei")]
+        public Rhomboganoidei[] Rhomboganoidei { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Rigsmal")]
+        public bool Rigsmal { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Ruellia")]
+        public Ruellia[] Ruellia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("School")]
+        public School[] School { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Shakespearolater")]
+        public Shakespearolater[] Shakespearolater { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Svan")]
+        public double[] Svan { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Wayao")]
+        public Dictionary<string, double> Wayao { get; set; }
+    }
+
+    public partial record AlleviateClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("apriori")]
+        public object Apriori { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("beggarer")]
+        public object Beggarer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("brokenheartedly")]
+        public object Brokenheartedly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("debilitation")]
+        public object Debilitation { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("frike")]
+        public object Frike { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("gastrolith")]
+        public object Gastrolith { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Hulsean")]
+        public object Hulsean { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("orthocentric")]
+        public object Orthocentric { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("petaly")]
+        public object Petaly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("probudgeting")]
+        public object Probudgeting { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("reacquire")]
+        public object Reacquire { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("scow")]
+        public object Scow { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("shutoff")]
+        public object Shutoff { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("subcontiguous")]
+        public object Subcontiguous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("suffumigate")]
+        public object Suffumigate { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("transformable")]
+        public object Transformable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("uncoroneted")]
+        public object Uncoroneted { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unparking")]
+        public object Unparking { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unvarnishedness")]
+        public object Unvarnishedness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("wherewithal")]
+        public object Wherewithal { get; set; }
+    }
+
+    public partial record Rebecca
+    {
+        [JsonRequired]
+        [JsonPropertyName("catharticalness")]
+        public double Catharticalness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Chirotherium")]
+        public long Chirotherium { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("disdiapason")]
+        public string Disdiapason { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("homocerc")]
+        public bool Homocerc { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nonbookish")]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Amphithyron
+    {
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("akroasis")]
+        public long? Akroasis { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("antiphonical")]
+        public long? Antiphonical { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("basebred")]
+        public long? Basebred { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("conductometric")]
+        public long? Conductometric { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("ensilation")]
+        public long? Ensilation { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("eyebolt")]
+        public long? Eyebolt { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("fistulated")]
+        public long? Fistulated { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("heteropod")]
+        public long? Heteropod { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Juniperus")]
+        public long? Juniperus { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("labyrinthically")]
+        public long? Labyrinthically { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("martyrization")]
+        public long? Martyrization { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("mispolicy")]
+        public long? Mispolicy { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("multipara")]
+        public long? Multipara { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Nazirite")]
+        public long? Nazirite { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("possessorial")]
+        public long? Possessorial { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("shamed")]
+        public long? Shamed { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("shelfworn")]
+        public long? Shelfworn { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("stagnum")]
+        public long? Stagnum { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Those")]
+        public long? Those { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("undecimal")]
+        public long? Undecimal { get; set; }
+    }
+
+    public partial record AnkeeClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("Anomoean")]
+        public object Anomoean { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("barleyhood")]
+        public object Barleyhood { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("befriender")]
+        public object Befriender { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("brutishness")]
+        public object Brutishness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cephalalgy")]
+        public object Cephalalgy { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cirurgian")]
+        public object Cirurgian { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("conventionally")]
+        public object Conventionally { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("jackshay")]
+        public object Jackshay { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("milammeter")]
+        public object Milammeter { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Naja")]
+        public object Naja { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ombrological")]
+        public object Ombrological { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("phonasthenia")]
+        public object Phonasthenia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("retrievableness")]
+        public object Retrievableness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("snakily")]
+        public object Snakily { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("swot")]
+        public object Swot { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tartlet")]
+        public object Tartlet { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("thiofuran")]
+        public object Thiofuran { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tracheophone")]
+        public object Tracheophone { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tuglike")]
+        public object Tuglike { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unscratchingly")]
+        public object Unscratchingly { get; set; }
+    }
+
+    public partial record AnsarieClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("accension")]
+        public object Accension { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Alida")]
+        public object Alida { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("asteria")]
+        public object Asteria { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("beriberic")]
+        public object Beriberic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("edgebone")]
+        public object Edgebone { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("gastrodialysis")]
+        public object Gastrodialysis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("geographic")]
+        public object Geographic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Ictonyx")]
+        public object Ictonyx { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("metrocele")]
+        public object Metrocele { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("misgraft")]
+        public object Misgraft { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("monteith")]
+        public object Monteith { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("notcher")]
+        public object Notcher { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("prorestriction")]
+        public object Prorestriction { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Ramist")]
+        public object Ramist { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("throatlet")]
+        public object Throatlet { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unfair")]
+        public object Unfair { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unsynonymous")]
+        public object Unsynonymous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("water")]
+        public object Water { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("zestfully")]
+        public object Zestfully { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("zincic")]
+        public object Zincic { get; set; }
+    }
+
+    public partial record ChytridiaceaeClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("Batidaceae")]
+        public object Batidaceae { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Brechites")]
+        public object Brechites { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("codespairer")]
+        public object Codespairer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Emery")]
+        public object Emery { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("enervative")]
+        public object Enervative { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("excriminate")]
+        public object Excriminate { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("goshenite")]
+        public object Goshenite { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("grime")]
+        public object Grime { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("gritten")]
+        public object Gritten { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hectorly")]
+        public object Hectorly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("intermediation")]
+        public object Intermediation { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("meeterly")]
+        public object Meeterly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Narraganset")]
+        public object Narraganset { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("onymatic")]
+        public object Onymatic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("paddlecock")]
+        public object Paddlecock { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("thana")]
+        public object Thana { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("thornily")]
+        public object Thornily { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("uckia")]
+        public object Uckia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unmettle")]
+        public object Unmettle { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("vorticellid")]
+        public object Vorticellid { get; set; }
+    }
+
+    public partial record DiscordiaClass
+    {
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Altaic")]
+        public long? Altaic { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("amoristic")]
+        public long? Amoristic { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("blennophthalmia")]
+        public long? Blennophthalmia { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disciplinability")]
+        public long? Disciplinability { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("goofer")]
+        public long? Goofer { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("laryngograph")]
+        public long? Laryngograph { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("leucitis")]
+        public long? Leucitis { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("lymphocyst")]
+        public long? Lymphocyst { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("microcosmology")]
+        public long? Microcosmology { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("nauseation")]
+        public long? Nauseation { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Patarin")]
+        public long? Patarin { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("preliberal")]
+        public long? Preliberal { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("prettifier")]
+        public long? Prettifier { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("rangework")]
+        public long? Rangework { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("redient")]
+        public long? Redient { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("subfusiform")]
+        public long? Subfusiform { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("suicidical")]
+        public long? Suicidical { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("swow")]
+        public long? Swow { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("wastrel")]
+        public long? Wastrel { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("wingle")]
+        public long? Wingle { get; set; }
+    }
+
+    public partial record GryphosaurusClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("amissibility")]
+        public object Amissibility { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Burushaski")]
+        public object Burushaski { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("citronin")]
+        public object Citronin { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("coplaintiff")]
+        public object Coplaintiff { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("disquisitionary")]
+        public object Disquisitionary { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("enoplan")]
+        public object Enoplan { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("faintness")]
+        public object Faintness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hebetomy")]
+        public object Hebetomy { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("islandry")]
+        public object Islandry { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("lameduck")]
+        public object Lameduck { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("overbattle")]
+        public object Overbattle { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("overinterested")]
+        public object Overinterested { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("phrenologic")]
+        public object Phrenologic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("rainband")]
+        public object Rainband { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("shiningly")]
+        public object Shiningly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("stamineous")]
+        public object Stamineous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("subscapularis")]
+        public object Subscapularis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Tahami")]
+        public object Tahami { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("undaubed")]
+        public object Undaubed { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("underntime")]
+        public object Underntime { get; set; }
+    }
+
+    public partial record LaviniaClass
+    {
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("agitable")]
+        public long? Agitable { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("asininity")]
+        public long? Asininity { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("benefiter")]
+        public long? Benefiter { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("bronzelike")]
+        public long? Bronzelike { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("cholesteatomatous")]
+        public long? Cholesteatomatous { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("deprivement")]
+        public long? Deprivement { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("flippantness")]
+        public long? Flippantness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("fogproof")]
+        public long? Fogproof { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("merrymeeting")]
+        public long? Merrymeeting { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("overcareful")]
+        public long? Overcareful { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("panaris")]
+        public long? Panaris { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("preacceptance")]
+        public long? Preacceptance { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("quinoxaline")]
+        public long? Quinoxaline { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("sig")]
+        public long? Sig { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("superconfusion")]
+        public long? Superconfusion { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Tacana")]
+        public long? Tacana { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("tillotter")]
+        public long? Tillotter { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("tranquillize")]
+        public long? Tranquillize { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("unquestionable")]
+        public long? Unquestionable { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("uproute")]
+        public long? Uproute { get; set; }
+    }
+
+    public partial record OskarClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("Acrobates")]
+        public object Acrobates { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("beanshooter")]
+        public object Beanshooter { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("bearhound")]
+        public object Bearhound { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Cayuga")]
+        public object Cayuga { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("guarneri")]
+        public object Guarneri { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hypochondriacism")]
+        public object Hypochondriacism { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("indication")]
+        public object Indication { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("jaculative")]
+        public object Jaculative { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nagana")]
+        public object Nagana { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Netherlandish")]
+        public object Netherlandish { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("noctivagous")]
+        public object Noctivagous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nonphysiological")]
+        public object Nonphysiological { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("praxis")]
+        public object Praxis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("provision")]
+        public object Provision { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("subterhuman")]
+        public object Subterhuman { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("sunlit")]
+        public object Sunlit { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("syncraniate")]
+        public object Syncraniate { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("teachment")]
+        public object Teachment { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unmutinous")]
+        public object Unmutinous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unstoppable")]
+        public object Unstoppable { get; set; }
+    }
+
+    public partial struct Abranchiata
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Abranchiata(long Integer) => new Abranchiata { Integer = Integer };
+        public static implicit operator Abranchiata(long[] IntegerArray) => new Abranchiata { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Integer == null;
+    }
+
+    public partial struct Academe
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Academe(long Integer) => new Academe { Integer = Integer };
+        public static implicit operator Academe(long[] IntegerArray) => new Academe { IntegerArray = IntegerArray };
+        public static implicit operator Academe(Dictionary<string, long> IntegerMap) => new Academe { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Acquirable
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public long?[]? UnionArray;
+
+        public static implicit operator Acquirable(Dictionary<string, long> IntegerMap) => new Acquirable { IntegerMap = IntegerMap };
+        public static implicit operator Acquirable(long?[] UnionArray) => new Acquirable { UnionArray = UnionArray };
+    }
+
+    public partial struct Aerometry
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Aerometry(bool Bool) => new Aerometry { Bool = Bool };
+        public static implicit operator Aerometry(double Double) => new Aerometry { Double = Double };
+    }
+
+    public partial struct Alexin
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+
+        public static implicit operator Alexin(bool Bool) => new Alexin { Bool = Bool };
+        public static implicit operator Alexin(long[] IntegerArray) => new Alexin { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AlleviateElement
+    {
+        public AlleviateClass? AlleviateClass;
+        public long?[]? UnionArray;
+
+        public static implicit operator AlleviateElement(AlleviateClass AlleviateClass) => new AlleviateElement { AlleviateClass = AlleviateClass };
+        public static implicit operator AlleviateElement(long?[] UnionArray) => new AlleviateElement { UnionArray = UnionArray };
+    }
+
+    public partial struct Amaa
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Amaa(bool Bool) => new Amaa { Bool = Bool };
+        public static implicit operator Amaa(long Integer) => new Amaa { Integer = Integer };
+        public static implicit operator Amaa(Rebecca Rebecca) => new Amaa { Rebecca = Rebecca };
+    }
+
+    public partial struct Ambassage
+    {
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Ambassage(object[] NullArray) => new Ambassage { NullArray = NullArray };
+        public static implicit operator Ambassage(string String) => new Ambassage { String = String };
+    }
+
+    public partial struct AnkeeElement
+    {
+        public AnkeeClass? AnkeeClass;
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator AnkeeElement(AnkeeClass AnkeeClass) => new AnkeeElement { AnkeeClass = AnkeeClass };
+        public static implicit operator AnkeeElement(long Integer) => new AnkeeElement { Integer = Integer };
+        public static implicit operator AnkeeElement(long[] IntegerArray) => new AnkeeElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AnsarieElement
+    {
+        public AnsarieClass? AnsarieClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator AnsarieElement(AnsarieClass AnsarieClass) => new AnsarieElement { AnsarieClass = AnsarieClass };
+        public static implicit operator AnsarieElement(long[] IntegerArray) => new AnsarieElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && AnsarieClass == null;
+    }
+
+    public partial struct Aphasia
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Aphasia(long Integer) => new Aphasia { Integer = Integer };
+        public static implicit operator Aphasia(long[] IntegerArray) => new Aphasia { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Asprawl
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Asprawl(double Double) => new Asprawl { Double = Double };
+        public static implicit operator Asprawl(string String) => new Asprawl { String = String };
+    }
+
+    public partial struct Bedesman
+    {
+        public bool? Bool;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Bedesman(bool Bool) => new Bedesman { Bool = Bool };
+        public static implicit operator Bedesman(double Double) => new Bedesman { Double = Double };
+        public static implicit operator Bedesman(string String) => new Bedesman { String = String };
+    }
+
+    public partial struct Belard
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Belard(double Double) => new Belard { Double = Double };
+        public static implicit operator Belard(long[] IntegerArray) => new Belard { IntegerArray = IntegerArray };
+        public static implicit operator Belard(Rebecca Rebecca) => new Belard { Rebecca = Rebecca };
+    }
+
+    public partial struct Bocking
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Bocking(bool Bool) => new Bocking { Bool = Bool };
+        public static implicit operator Bocking(long[] IntegerArray) => new Bocking { IntegerArray = IntegerArray };
+        public static implicit operator Bocking(Dictionary<string, long> IntegerMap) => new Bocking { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Brawlingly
+    {
+        public object[]? NullArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Brawlingly(object[] NullArray) => new Brawlingly { NullArray = NullArray };
+        public static implicit operator Brawlingly(Dictionary<string, long?> UnionMap) => new Brawlingly { UnionMap = UnionMap };
+    }
+
+    public partial struct Brookie
+    {
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Brookie(long[] IntegerArray) => new Brookie { IntegerArray = IntegerArray };
+        public static implicit operator Brookie(Rebecca Rebecca) => new Brookie { Rebecca = Rebecca };
+    }
+
+    public partial struct Bumboatman
+    {
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Bumboatman(object[] NullArray) => new Bumboatman { NullArray = NullArray };
+        public static implicit operator Bumboatman(string String) => new Bumboatman { String = String };
+        public bool IsNull => NullArray == null && String == null;
+    }
+
+    public partial struct Calaverite
+    {
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Calaverite(long[] IntegerArray) => new Calaverite { IntegerArray = IntegerArray };
+        public static implicit operator Calaverite(string String) => new Calaverite { String = String };
+    }
+
+    public partial struct Catallactic
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Catallactic(bool Bool) => new Catallactic { Bool = Bool };
+        public static implicit operator Catallactic(Dictionary<string, long> IntegerMap) => new Catallactic { IntegerMap = IntegerMap };
+        public static implicit operator Catallactic(object[] NullArray) => new Catallactic { NullArray = NullArray };
+    }
+
+    public partial struct Cemental
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Cemental(double Double) => new Cemental { Double = Double };
+        public static implicit operator Cemental(long[] IntegerArray) => new Cemental { IntegerArray = IntegerArray };
+        public static implicit operator Cemental(Dictionary<string, long> IntegerMap) => new Cemental { IntegerMap = IntegerMap };
+    }
+
+    public partial struct ChytridiaceaeElement
+    {
+        public bool? Bool;
+        public ChytridiaceaeClass? ChytridiaceaeClass;
+
+        public static implicit operator ChytridiaceaeElement(bool Bool) => new ChytridiaceaeElement { Bool = Bool };
+        public static implicit operator ChytridiaceaeElement(ChytridiaceaeClass ChytridiaceaeClass) => new ChytridiaceaeElement { ChytridiaceaeClass = ChytridiaceaeClass };
+        public bool IsNull => Bool == null && ChytridiaceaeClass == null;
+    }
+
+    public partial struct DiscordiaElement
+    {
+        public DiscordiaClass? DiscordiaClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator DiscordiaElement(DiscordiaClass DiscordiaClass) => new DiscordiaElement { DiscordiaClass = DiscordiaClass };
+        public static implicit operator DiscordiaElement(long[] IntegerArray) => new DiscordiaElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Endomyce
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Endomyce(long Integer) => new Endomyce { Integer = Integer };
+        public static implicit operator Endomyce(string String) => new Endomyce { String = String };
+    }
+
+    public partial struct Epinephelidae
+    {
+        public bool? Bool;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Epinephelidae(bool Bool) => new Epinephelidae { Bool = Bool };
+        public static implicit operator Epinephelidae(long Integer) => new Epinephelidae { Integer = Integer };
+        public static implicit operator Epinephelidae(string String) => new Epinephelidae { String = String };
+    }
+
+    public partial struct Eupatorium
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Eupatorium(Dictionary<string, long> IntegerMap) => new Eupatorium { IntegerMap = IntegerMap };
+        public static implicit operator Eupatorium(object[] NullArray) => new Eupatorium { NullArray = NullArray };
+    }
+
+    public partial struct GryphosaurusElement
+    {
+        public GryphosaurusClass? GryphosaurusClass;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator GryphosaurusElement(GryphosaurusClass GryphosaurusClass) => new GryphosaurusElement { GryphosaurusClass = GryphosaurusClass };
+        public static implicit operator GryphosaurusElement(long[] IntegerArray) => new GryphosaurusElement { IntegerArray = IntegerArray };
+        public static implicit operator GryphosaurusElement(string String) => new GryphosaurusElement { String = String };
+    }
+
+    public partial struct Koryak
+    {
+        public string? String;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Koryak(string String) => new Koryak { String = String };
+        public static implicit operator Koryak(Dictionary<string, long?> UnionMap) => new Koryak { UnionMap = UnionMap };
+    }
+
+    public partial struct LaviniaElement
+    {
+        public LaviniaClass? LaviniaClass;
+        public string? String;
+
+        public static implicit operator LaviniaElement(LaviniaClass LaviniaClass) => new LaviniaElement { LaviniaClass = LaviniaClass };
+        public static implicit operator LaviniaElement(string String) => new LaviniaElement { String = String };
+    }
+
+    public partial struct OskarElement
+    {
+        public long[]? IntegerArray;
+        public OskarClass? OskarClass;
+
+        public static implicit operator OskarElement(long[] IntegerArray) => new OskarElement { IntegerArray = IntegerArray };
+        public static implicit operator OskarElement(OskarClass OskarClass) => new OskarElement { OskarClass = OskarClass };
+    }
+
+    public partial struct RebeccaElement
+    {
+        public long? Integer;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator RebeccaElement(long Integer) => new RebeccaElement { Integer = Integer };
+        public static implicit operator RebeccaElement(Rebecca Rebecca) => new RebeccaElement { Rebecca = Rebecca };
+        public static implicit operator RebeccaElement(string String) => new RebeccaElement { String = String };
+    }
+
+    public partial struct Rhomboganoidei
+    {
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Rhomboganoidei(long[] IntegerArray) => new Rhomboganoidei { IntegerArray = IntegerArray };
+        public static implicit operator Rhomboganoidei(Rebecca Rebecca) => new Rhomboganoidei { Rebecca = Rebecca };
+        public static implicit operator Rhomboganoidei(string String) => new Rhomboganoidei { String = String };
+    }
+
+    public partial struct Ruellia
+    {
+        public bool? Bool;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Ruellia(bool Bool) => new Ruellia { Bool = Bool };
+        public static implicit operator Ruellia(Rebecca Rebecca) => new Ruellia { Rebecca = Rebecca };
+        public static implicit operator Ruellia(string String) => new Ruellia { String = String };
+    }
+
+    public partial struct School
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator School(long Integer) => new School { Integer = Integer };
+        public static implicit operator School(Dictionary<string, long> IntegerMap) => new School { IntegerMap = IntegerMap };
+        public bool IsNull => Integer == null && IntegerMap == null;
+    }
+
+    public partial struct Shakespearolater
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Shakespearolater(double Double) => new Shakespearolater { Double = Double };
+        public static implicit operator Shakespearolater(long[] IntegerArray) => new Shakespearolater { IntegerArray = IntegerArray };
+        public static implicit operator Shakespearolater(string String) => new Shakespearolater { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonSerializer.Deserialize<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonSerializer.Serialize(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)
+        {
+            Converters =
+            {
+                AbranchiataConverter.Singleton,
+                AnsarieElementConverter.Singleton,
+                ChytridiaceaeElementConverter.Singleton,
+                DiscordiaElementConverter.Singleton,
+                EndomyceConverter.Singleton,
+                EpinephelidaeConverter.Singleton,
+                EupatoriumConverter.Singleton,
+                GryphosaurusElementConverter.Singleton,
+                KoryakConverter.Singleton,
+                LaviniaElementConverter.Singleton,
+                OskarElementConverter.Singleton,
+                RebeccaElementConverter.Singleton,
+                RhomboganoideiConverter.Singleton,
+                RuelliaConverter.Singleton,
+                SchoolConverter.Singleton,
+                ShakespearolaterConverter.Singleton,
+                AcademeConverter.Singleton,
+                AcquirableConverter.Singleton,
+                AerometryConverter.Singleton,
+                AlexinConverter.Singleton,
+                AlleviateElementConverter.Singleton,
+                AmaaConverter.Singleton,
+                AmbassageConverter.Singleton,
+                AnkeeElementConverter.Singleton,
+                AphasiaConverter.Singleton,
+                AsprawlConverter.Singleton,
+                BedesmanConverter.Singleton,
+                BelardConverter.Singleton,
+                BockingConverter.Singleton,
+                BrawlinglyConverter.Singleton,
+                BrookieConverter.Singleton,
+                BumboatmanConverter.Singleton,
+                CalaveriteConverter.Singleton,
+                CatallacticConverter.Singleton,
+                CementalConverter.Singleton,
+                new DateOnlyConverter(),
+                new TimeOnlyConverter(),
+                IsoDateTimeOffsetConverter.Singleton
+            },
+        };
+    }
+
+    internal class AbranchiataConverter : JsonConverter<Abranchiata>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Abranchiata);
+
+        public override Abranchiata Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Abranchiata { };
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Abranchiata { Integer = intValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Abranchiata { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Abranchiata");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Abranchiata value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Abranchiata");
+        }
+
+        public static readonly AbranchiataConverter Singleton = new AbranchiataConverter();
+    }
+
+    internal class AnsarieElementConverter : JsonConverter<AnsarieElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnsarieElement);
+
+        public override AnsarieElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new AnsarieElement { };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<AnsarieClass>(ref reader, options);
+                    return new AnsarieElement { AnsarieClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new AnsarieElement { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type AnsarieElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, AnsarieElement value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.AnsarieClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.AnsarieClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type AnsarieElement");
+        }
+
+        public static readonly AnsarieElementConverter Singleton = new AnsarieElementConverter();
+    }
+
+    internal class ChytridiaceaeElementConverter : JsonConverter<ChytridiaceaeElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChytridiaceaeElement);
+
+        public override ChytridiaceaeElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new ChytridiaceaeElement { };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new ChytridiaceaeElement { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<ChytridiaceaeClass>(ref reader, options);
+                    return new ChytridiaceaeElement { ChytridiaceaeClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type ChytridiaceaeElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, ChytridiaceaeElement value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.ChytridiaceaeClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.ChytridiaceaeClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type ChytridiaceaeElement");
+        }
+
+        public static readonly ChytridiaceaeElementConverter Singleton = new ChytridiaceaeElementConverter();
+    }
+
+    internal class DiscordiaElementConverter : JsonConverter<DiscordiaElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiscordiaElement);
+
+        public override DiscordiaElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<DiscordiaClass>(ref reader, options);
+                    return new DiscordiaElement { DiscordiaClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new DiscordiaElement { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type DiscordiaElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, DiscordiaElement value, JsonSerializerOptions options)
+        {
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.DiscordiaClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.DiscordiaClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type DiscordiaElement");
+        }
+
+        public static readonly DiscordiaElementConverter Singleton = new DiscordiaElementConverter();
+    }
+
+    internal class EndomyceConverter : JsonConverter<Endomyce>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Endomyce);
+
+        public override Endomyce Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Endomyce { Integer = intValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Endomyce { String = stringValue };
+            }
+            throw new JsonException("Cannot unmarshal type Endomyce");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Endomyce value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Endomyce");
+        }
+
+        public static readonly EndomyceConverter Singleton = new EndomyceConverter();
+    }
+
+    internal class EpinephelidaeConverter : JsonConverter<Epinephelidae>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epinephelidae);
+
+        public override Epinephelidae Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Epinephelidae { Integer = intValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Epinephelidae { Bool = boolValue };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Epinephelidae { String = stringValue };
+            }
+            throw new JsonException("Cannot unmarshal type Epinephelidae");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Epinephelidae value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Epinephelidae");
+        }
+
+        public static readonly EpinephelidaeConverter Singleton = new EpinephelidaeConverter();
+    }
+
+    internal class EupatoriumConverter : JsonConverter<Eupatorium>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eupatorium);
+
+        public override Eupatorium Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Eupatorium { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Eupatorium { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Eupatorium");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Eupatorium value, JsonSerializerOptions options)
+        {
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Eupatorium");
+        }
+
+        public static readonly EupatoriumConverter Singleton = new EupatoriumConverter();
+    }
+
+    internal class GryphosaurusElementConverter : JsonConverter<GryphosaurusElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(GryphosaurusElement);
+
+        public override GryphosaurusElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new GryphosaurusElement { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<GryphosaurusClass>(ref reader, options);
+                    return new GryphosaurusElement { GryphosaurusClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new GryphosaurusElement { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type GryphosaurusElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, GryphosaurusElement value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.GryphosaurusClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.GryphosaurusClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type GryphosaurusElement");
+        }
+
+        public static readonly GryphosaurusElementConverter Singleton = new GryphosaurusElementConverter();
+    }
+
+    internal class KoryakConverter : JsonConverter<Koryak>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Koryak);
+
+        public override Koryak Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Koryak { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long?>>(ref reader, options);
+                    return new Koryak { UnionMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Koryak");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Koryak value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Koryak");
+        }
+
+        public static readonly KoryakConverter Singleton = new KoryakConverter();
+    }
+
+    internal class LaviniaElementConverter : JsonConverter<LaviniaElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(LaviniaElement);
+
+        public override LaviniaElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new LaviniaElement { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<LaviniaClass>(ref reader, options);
+                    return new LaviniaElement { LaviniaClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type LaviniaElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, LaviniaElement value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.LaviniaClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.LaviniaClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type LaviniaElement");
+        }
+
+        public static readonly LaviniaElementConverter Singleton = new LaviniaElementConverter();
+    }
+
+    internal class OskarElementConverter : JsonConverter<OskarElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(OskarElement);
+
+        public override OskarElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<OskarClass>(ref reader, options);
+                    return new OskarElement { OskarClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new OskarElement { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type OskarElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, OskarElement value, JsonSerializerOptions options)
+        {
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.OskarClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.OskarClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type OskarElement");
+        }
+
+        public static readonly OskarElementConverter Singleton = new OskarElementConverter();
+    }
+
+    internal class RebeccaElementConverter : JsonConverter<RebeccaElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(RebeccaElement);
+
+        public override RebeccaElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new RebeccaElement { Integer = intValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new RebeccaElement { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Rebecca>(ref reader, options);
+                    return new RebeccaElement { Rebecca = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type RebeccaElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, RebeccaElement value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                JsonSerializer.Serialize(writer, value.Rebecca, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type RebeccaElement");
+        }
+
+        public static readonly RebeccaElementConverter Singleton = new RebeccaElementConverter();
+    }
+
+    internal class RhomboganoideiConverter : JsonConverter<Rhomboganoidei>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rhomboganoidei);
+
+        public override Rhomboganoidei Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Rhomboganoidei { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Rebecca>(ref reader, options);
+                    return new Rhomboganoidei { Rebecca = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Rhomboganoidei { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Rhomboganoidei");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Rhomboganoidei value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                JsonSerializer.Serialize(writer, value.Rebecca, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Rhomboganoidei");
+        }
+
+        public static readonly RhomboganoideiConverter Singleton = new RhomboganoideiConverter();
+    }
+
+    internal class RuelliaConverter : JsonConverter<Ruellia>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ruellia);
+
+        public override Ruellia Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Ruellia { Bool = boolValue };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Ruellia { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Rebecca>(ref reader, options);
+                    return new Ruellia { Rebecca = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Ruellia");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Ruellia value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                JsonSerializer.Serialize(writer, value.Rebecca, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Ruellia");
+        }
+
+        public static readonly RuelliaConverter Singleton = new RuelliaConverter();
+    }
+
+    internal class SchoolConverter : JsonConverter<School>
+    {
+        public override bool CanConvert(Type t) => t == typeof(School);
+
+        public override School Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new School { };
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new School { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new School { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type School");
+        }
+
+        public override void Write(Utf8JsonWriter writer, School value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type School");
+        }
+
+        public static readonly SchoolConverter Singleton = new SchoolConverter();
+    }
+
+    internal class ShakespearolaterConverter : JsonConverter<Shakespearolater>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shakespearolater);
+
+        public override Shakespearolater Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Shakespearolater { Double = doubleValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Shakespearolater { String = stringValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Shakespearolater { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Shakespearolater");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Shakespearolater value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Shakespearolater");
+        }
+
+        public static readonly ShakespearolaterConverter Singleton = new ShakespearolaterConverter();
+    }
+
+    internal class AcademeConverter : JsonConverter<Academe>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Academe);
+
+        public override Academe Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Academe { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Academe { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Academe { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Academe");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Academe value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Academe");
+        }
+
+        public static readonly AcademeConverter Singleton = new AcademeConverter();
+    }
+
+    internal class AcquirableConverter : JsonConverter<Acquirable>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Acquirable);
+
+        public override Acquirable Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Acquirable { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long?[]>(ref reader, options);
+                    return new Acquirable { UnionArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Acquirable");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Acquirable value, JsonSerializerOptions options)
+        {
+            if (value.UnionArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Acquirable");
+        }
+
+        public static readonly AcquirableConverter Singleton = new AcquirableConverter();
+    }
+
+    internal class AerometryConverter : JsonConverter<Aerometry>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aerometry);
+
+        public override Aerometry Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Aerometry { Double = doubleValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Aerometry { Bool = boolValue };
+            }
+            throw new JsonException("Cannot unmarshal type Aerometry");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Aerometry value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Aerometry");
+        }
+
+        public static readonly AerometryConverter Singleton = new AerometryConverter();
+    }
+
+    internal class AlexinConverter : JsonConverter<Alexin>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Alexin);
+
+        public override Alexin Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Alexin { Bool = boolValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Alexin { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Alexin");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Alexin value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Alexin");
+        }
+
+        public static readonly AlexinConverter Singleton = new AlexinConverter();
+    }
+
+    internal class AlleviateElementConverter : JsonConverter<AlleviateElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(AlleviateElement);
+
+        public override AlleviateElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<AlleviateClass>(ref reader, options);
+                    return new AlleviateElement { AlleviateClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long?[]>(ref reader, options);
+                    return new AlleviateElement { UnionArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type AlleviateElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, AlleviateElement value, JsonSerializerOptions options)
+        {
+            if (value.UnionArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionArray, options);
+                return;
+            }
+            if (value.AlleviateClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.AlleviateClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type AlleviateElement");
+        }
+
+        public static readonly AlleviateElementConverter Singleton = new AlleviateElementConverter();
+    }
+
+    internal class AmaaConverter : JsonConverter<Amaa>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Amaa);
+
+        public override Amaa Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Amaa { Integer = intValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Amaa { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Rebecca>(ref reader, options);
+                    return new Amaa { Rebecca = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Amaa");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Amaa value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                JsonSerializer.Serialize(writer, value.Rebecca, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Amaa");
+        }
+
+        public static readonly AmaaConverter Singleton = new AmaaConverter();
+    }
+
+    internal class AmbassageConverter : JsonConverter<Ambassage>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ambassage);
+
+        public override Ambassage Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Ambassage { String = stringValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Ambassage { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Ambassage");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Ambassage value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Ambassage");
+        }
+
+        public static readonly AmbassageConverter Singleton = new AmbassageConverter();
+    }
+
+    internal class AnkeeElementConverter : JsonConverter<AnkeeElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnkeeElement);
+
+        public override AnkeeElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new AnkeeElement { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<AnkeeClass>(ref reader, options);
+                    return new AnkeeElement { AnkeeClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new AnkeeElement { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type AnkeeElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, AnkeeElement value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.AnkeeClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.AnkeeClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type AnkeeElement");
+        }
+
+        public static readonly AnkeeElementConverter Singleton = new AnkeeElementConverter();
+    }
+
+    internal class AphasiaConverter : JsonConverter<Aphasia>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aphasia);
+
+        public override Aphasia Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Aphasia { Integer = intValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Aphasia { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Aphasia");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Aphasia value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Aphasia");
+        }
+
+        public static readonly AphasiaConverter Singleton = new AphasiaConverter();
+    }
+
+    internal class AsprawlConverter : JsonConverter<Asprawl>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Asprawl);
+
+        public override Asprawl Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Asprawl { Double = doubleValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Asprawl { String = stringValue };
+            }
+            throw new JsonException("Cannot unmarshal type Asprawl");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Asprawl value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Asprawl");
+        }
+
+        public static readonly AsprawlConverter Singleton = new AsprawlConverter();
+    }
+
+    internal class BedesmanConverter : JsonConverter<Bedesman>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bedesman);
+
+        public override Bedesman Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Bedesman { Double = doubleValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Bedesman { Bool = boolValue };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Bedesman { String = stringValue };
+            }
+            throw new JsonException("Cannot unmarshal type Bedesman");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Bedesman value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Bedesman");
+        }
+
+        public static readonly BedesmanConverter Singleton = new BedesmanConverter();
+    }
+
+    internal class BelardConverter : JsonConverter<Belard>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Belard);
+
+        public override Belard Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Belard { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Rebecca>(ref reader, options);
+                    return new Belard { Rebecca = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Belard { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Belard");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Belard value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                JsonSerializer.Serialize(writer, value.Rebecca, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Belard");
+        }
+
+        public static readonly BelardConverter Singleton = new BelardConverter();
+    }
+
+    internal class BockingConverter : JsonConverter<Bocking>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bocking);
+
+        public override Bocking Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Bocking { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Bocking { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Bocking { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Bocking");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Bocking value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Bocking");
+        }
+
+        public static readonly BockingConverter Singleton = new BockingConverter();
+    }
+
+    internal class BrawlinglyConverter : JsonConverter<Brawlingly>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brawlingly);
+
+        public override Brawlingly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long?>>(ref reader, options);
+                    return new Brawlingly { UnionMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Brawlingly { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Brawlingly");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Brawlingly value, JsonSerializerOptions options)
+        {
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Brawlingly");
+        }
+
+        public static readonly BrawlinglyConverter Singleton = new BrawlinglyConverter();
+    }
+
+    internal class BrookieConverter : JsonConverter<Brookie>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brookie);
+
+        public override Brookie Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Rebecca>(ref reader, options);
+                    return new Brookie { Rebecca = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Brookie { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Brookie");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Brookie value, JsonSerializerOptions options)
+        {
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                JsonSerializer.Serialize(writer, value.Rebecca, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Brookie");
+        }
+
+        public static readonly BrookieConverter Singleton = new BrookieConverter();
+    }
+
+    internal class BumboatmanConverter : JsonConverter<Bumboatman>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bumboatman);
+
+        public override Bumboatman Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Bumboatman { };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Bumboatman { String = stringValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Bumboatman { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Bumboatman");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Bumboatman value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Bumboatman");
+        }
+
+        public static readonly BumboatmanConverter Singleton = new BumboatmanConverter();
+    }
+
+    internal class CalaveriteConverter : JsonConverter<Calaverite>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Calaverite);
+
+        public override Calaverite Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Calaverite { String = stringValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Calaverite { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Calaverite");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Calaverite value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Calaverite");
+        }
+
+        public static readonly CalaveriteConverter Singleton = new CalaveriteConverter();
+    }
+
+    internal class CatallacticConverter : JsonConverter<Catallactic>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Catallactic);
+
+        public override Catallactic Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Catallactic { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Catallactic { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Catallactic { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Catallactic");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Catallactic value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Catallactic");
+        }
+
+        public static readonly CatallacticConverter Singleton = new CatallacticConverter();
+    }
+
+    internal class CementalConverter : JsonConverter<Cemental>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Cemental);
+
+        public override Cemental Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Cemental { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Cemental { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Cemental { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Cemental");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Cemental value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Cemental");
+        }
+
+        public static readonly CementalConverter Singleton = new CementalConverter();
+    }
+    
+    public class DateOnlyConverter : JsonConverter<DateOnly>
+    {
+        private readonly string serializationFormat;
+        public DateOnlyConverter() : this(null) { }
+
+        public DateOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "yyyy-MM-dd";
+        }
+
+        public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return DateOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    public class TimeOnlyConverter : JsonConverter<TimeOnly>
+    {
+        private readonly string serializationFormat;
+
+        public TimeOnlyConverter() : this(null) { }
+
+        public TimeOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff";
+        }
+
+        public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return TimeOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    internal class IsoDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
+    {
+        public override bool CanConvert(Type t) => t == typeof(DateTimeOffset);
+
+        private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
+
+        private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind;
+        private string? _dateTimeFormat;
+        private CultureInfo? _culture;
+
+        public DateTimeStyles DateTimeStyles
+        {
+                get => _dateTimeStyles;
+                set => _dateTimeStyles = value;
+        }
+
+        public string? DateTimeFormat
+        {
+                get => _dateTimeFormat ?? string.Empty;
+                set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value;
+        }
+
+        public CultureInfo Culture
+        {
+                get => _culture ?? CultureInfo.CurrentCulture;
+                set => _culture = value;
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
+        {
+                string text;
+
+
+                if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal
+                        || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal)
+                {
+                        value = value.ToUniversalTime();
+                }
+
+                text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture);
+
+                writer.WriteStringValue(text);
+        }
+
+        public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                string? dateText = reader.GetString();
+
+                if (string.IsNullOrEmpty(dateText) == false)
+                {
+                        if (!string.IsNullOrEmpty(_dateTimeFormat))
+                        {
+                                return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles);
+                        }
+                        else
+                        {
+                                return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles);
+                        }
+                }
+                else
+                {
+                        return default(DateTimeOffset);
+                }
+        }
+
+
+        public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
diff --git a/head/csharp-SystemTextJson/test/inputs/json/priority/combinations3.json/use-records-true--3cdbe9dae4f8/QuickType.cs b/head/csharp-SystemTextJson/test/inputs/json/priority/combinations3.json/use-records-true--3cdbe9dae4f8/QuickType.cs
new file mode 100644
index 0000000..7ca4a85
--- /dev/null
+++ b/head/csharp-SystemTextJson/test/inputs/json/priority/combinations3.json/use-records-true--3cdbe9dae4f8/QuickType.cs
@@ -0,0 +1,3290 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'System.Text.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Text.Json;
+    using System.Text.Json.Serialization;
+    using System.Globalization;
+
+    public partial record TopLevel
+    {
+        [JsonRequired]
+        [JsonPropertyName("juror")]
+        public JurorElement[] Juror { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("kongoni")]
+        public Kongoni[] Kongoni { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ladronism")]
+        public LadronismElement[] Ladronism { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("landlubberly")]
+        public LandlubberlyElement[] Landlubberly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("listener")]
+        public Listener[] Listener { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("lupus")]
+        public LupusElement[] Lupus { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("maslin")]
+        public Maslin[] Maslin { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("monazite")]
+        public MonaziteElement[] Monazite { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("monoliteral")]
+        public Monoliteral[] Monoliteral { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("monotheistically")]
+        public MonotheisticallyElement[] Monotheistically { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("montage")]
+        public Montage[] Montage { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("moralness")]
+        public Moralness[] Moralness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("mowra")]
+        public MonaziteClass?[] Mowra { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("mulishly")]
+        public Mulishly[] Mulishly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("myoscope")]
+        public Myoscope[] Myoscope { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nach")]
+        public long?[]?[] Nach { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("neuromastic")]
+        public Neuromastic[] Neuromastic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("noncontributing")]
+        public Noncontributing[] Noncontributing { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nonnervous")]
+        public Nonnervous[] Nonnervous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nonvaluation")]
+        public Nonvaluation[] Nonvaluation { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("occupationalist")]
+        public OccupationalistElement[] Occupationalist { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("outrival")]
+        public OutrivalElement[] Outrival { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("paleographically")]
+        public Paleographically[] Paleographically { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pamphletwise")]
+        public Pamphletwise[] Pamphletwise { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pediatrics")]
+        public Pediatric[] Pediatrics { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("perceptive")]
+        public bool[] Perceptive { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("piaculum")]
+        public PiaculumElement[] Piaculum { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("piccadilly")]
+        public Piccadilly[] Piccadilly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("piffler")]
+        public Piffler[] Piffler { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pithful")]
+        public Pithful[] Pithful { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("placuntitis")]
+        public Placuntiti[] Placuntitis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("plectopterous")]
+        public Plectopterous[] Plectopterous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pneumocele")]
+        public Pneumocele?[] Pneumocele { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("poliorcetic")]
+        public Poliorcetic[] Poliorcetic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("poormaster")]
+        public Poormaster[] Poormaster { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("potwhisky")]
+        public PotwhiskyElement[] Potwhisky { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("practicalizer")]
+        public Practicalizer[] Practicalizer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("prefreshman")]
+        public PrefreshmanElement[] Prefreshman { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("prehensility")]
+        public Prehensility[] Prehensility { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("prevoidance")]
+        public Prevoidance[] Prevoidance { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("probant")]
+        public Dictionary<string, long?>[] Probant { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("protext")]
+        public Protext[] Protext { get; set; }
+    }
+
+    public partial record JurorClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("adipsy")]
+        public object Adipsy { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("auxiliator")]
+        public object Auxiliator { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("benda")]
+        public object Benda { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("benjamin")]
+        public object Benjamin { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("brandling")]
+        public object Brandling { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("epicurishly")]
+        public object Epicurishly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("eremochaetous")]
+        public object Eremochaetous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("marten")]
+        public object Marten { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("monocline")]
+        public object Monocline { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Olea")]
+        public object Olea { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("palgat")]
+        public object Palgat { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pennyworth")]
+        public object Pennyworth { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pioury")]
+        public object Pioury { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pragmatistic")]
+        public object Pragmatistic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("stylelessness")]
+        public object Stylelessness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("systematical")]
+        public object Systematical { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("thready")]
+        public object Thready { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("uncontemporary")]
+        public object Uncontemporary { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("uncouched")]
+        public object Uncouched { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("uninhabitedness")]
+        public object Uninhabitedness { get; set; }
+    }
+
+    public partial record LadronismClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("acclaimer")]
+        public object Acclaimer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("achree")]
+        public object Achree { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("base")]
+        public object Base { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("conundrumize")]
+        public object Conundrumize { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("degerminator")]
+        public object Degerminator { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("describable")]
+        public object Describable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("exasperatedly")]
+        public object Exasperatedly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("heroine")]
+        public object Heroine { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("indazin")]
+        public object Indazin { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("luteous")]
+        public object Luteous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("papular")]
+        public object Papular { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pritch")]
+        public object Pritch { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Prodenia")]
+        public object Prodenia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("seege")]
+        public object Seege { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("shopgirl")]
+        public object Shopgirl { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tragedietta")]
+        public object Tragedietta { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unsparse")]
+        public object Unsparse { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("uplook")]
+        public object Uplook { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("vermiformis")]
+        public object Vermiformis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("whafabout")]
+        public object Whafabout { get; set; }
+    }
+
+    public partial record LandlubberlyClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("acropoleis")]
+        public object Acropoleis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("aminate")]
+        public object Aminate { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Amyraldism")]
+        public object Amyraldism { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("bipenniform")]
+        public object Bipenniform { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("bugre")]
+        public object Bugre { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("calycule")]
+        public object Calycule { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("caoutchouc")]
+        public object Caoutchouc { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("disprover")]
+        public object Disprover { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("fitroot")]
+        public object Fitroot { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("fulgently")]
+        public object Fulgently { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("kickup")]
+        public object Kickup { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("laevoversion")]
+        public object Laevoversion { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("moter")]
+        public object Moter { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("objectivity")]
+        public object Objectivity { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("posterity")]
+        public object Posterity { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("postnuptial")]
+        public object Postnuptial { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("precedentary")]
+        public object Precedentary { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("saddling")]
+        public object Saddling { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("subcurrent")]
+        public object Subcurrent { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unrecriminative")]
+        public object Unrecriminative { get; set; }
+    }
+
+    public partial record LupusClass
+    {
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chlorioninae")]
+        public long? Chlorioninae { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Corvinae")]
+        public long? Corvinae { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Crassina")]
+        public long? Crassina { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("exiguity")]
+        public long? Exiguity { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("farcist")]
+        public long? Farcist { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("holographical")]
+        public long? Holographical { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("ichthyophagan")]
+        public long? Ichthyophagan { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("implacable")]
+        public long? Implacable { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("outshiner")]
+        public long? Outshiner { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("overweather")]
+        public long? Overweather { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("protonegroid")]
+        public long? Protonegroid { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("shallowish")]
+        public long? Shallowish { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("snoke")]
+        public long? Snoke { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("snout")]
+        public long? Snout { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("surveillance")]
+        public long? Surveillance { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("threshingtime")]
+        public long? Threshingtime { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Thysanocarpus")]
+        public long? Thysanocarpus { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("unsignificantly")]
+        public long? Unsignificantly { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("unsnap")]
+        public long? Unsnap { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("vendible")]
+        public long? Vendible { get; set; }
+    }
+
+    public partial record Maslin
+    {
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Alicant")]
+        public long? Alicant { get; set; }
+
+        [JsonPropertyName("antiatonement")]
+        public object? Antiatonement { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("anticorrosive")]
+        public long? Anticorrosive { get; set; }
+
+        [JsonPropertyName("aphidozer")]
+        public object? Aphidozer { get; set; }
+
+        [JsonPropertyName("Bakuninist")]
+        public object? Bakuninist { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("be")]
+        public long? Be { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("chub")]
+        public long? Chub { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("cuprosilicon")]
+        public long? Cuprosilicon { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("curtailedly")]
+        public long? Curtailedly { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("dellenite")]
+        public long? Dellenite { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Dimitry")]
+        public long? Dimitry { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonPropertyName("edifying")]
+        public object? Edifying { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("ethmoiditis")]
+        public long? Ethmoiditis { get; set; }
+
+        [JsonPropertyName("gastralgy")]
+        public object? Gastralgy { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("goatherd")]
+        public long? Goatherd { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("hammerdress")]
+        public long? Hammerdress { get; set; }
+
+        [JsonPropertyName("hangfire")]
+        public object? Hangfire { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("lacunosity")]
+        public long? Lacunosity { get; set; }
+
+        [JsonPropertyName("longiloquence")]
+        public object? Longiloquence { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("mameliere")]
+        public long? Mameliere { get; set; }
+
+        [JsonPropertyName("motherless")]
+        public object? Motherless { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonPropertyName("noncorrodible")]
+        public object? Noncorrodible { get; set; }
+
+        [JsonPropertyName("nonsensicality")]
+        public object? Nonsensicality { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("oafishly")]
+        public long? Oafishly { get; set; }
+
+        [JsonPropertyName("pfund")]
+        public object? Pfund { get; set; }
+
+        [JsonPropertyName("preadvisory")]
+        public object? Preadvisory { get; set; }
+
+        [JsonPropertyName("retroflexed")]
+        public object? Retroflexed { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("saccharulmic")]
+        public long? Saccharulmic { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("scowlful")]
+        public long? Scowlful { get; set; }
+
+        [JsonPropertyName("secluded")]
+        public object? Secluded { get; set; }
+
+        [JsonPropertyName("slackage")]
+        public object? Slackage { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("sphaeridial")]
+        public long? Sphaeridial { get; set; }
+
+        [JsonPropertyName("spondulics")]
+        public object? Spondulics { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("subsecive")]
+        public long? Subsecive { get; set; }
+
+        [JsonPropertyName("swellmobsman")]
+        public object? Swellmobsman { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("trachyglossate")]
+        public long? Trachyglossate { get; set; }
+
+        [JsonPropertyName("trialogue")]
+        public object? Trialogue { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("unassuaged")]
+        public long? Unassuaged { get; set; }
+
+        [JsonPropertyName("ungross")]
+        public object? Ungross { get; set; }
+
+        [JsonPropertyName("unjudiciously")]
+        public object? Unjudiciously { get; set; }
+    }
+
+    public partial record MonaziteClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("catharticalness")]
+        public double Catharticalness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Chirotherium")]
+        public long Chirotherium { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("disdiapason")]
+        public string Disdiapason { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("homocerc")]
+        public bool Homocerc { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nonbookish")]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record MonotheisticallyClass
+    {
+        [JsonPropertyName("blaspheme")]
+        public object? Blaspheme { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonPropertyName("celiosalpingectomy")]
+        public object? Celiosalpingectomy { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonPropertyName("consummativeness")]
+        public object? Consummativeness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonPropertyName("egestive")]
+        public object? Egestive { get; set; }
+
+        [JsonPropertyName("enchylema")]
+        public object? Enchylema { get; set; }
+
+        [JsonPropertyName("gasconade")]
+        public object? Gasconade { get; set; }
+
+        [JsonPropertyName("holidayer")]
+        public object? Holidayer { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonPropertyName("intuitionalism")]
+        public object? Intuitionalism { get; set; }
+
+        [JsonPropertyName("lophiostomate")]
+        public object? Lophiostomate { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonPropertyName("nonvolition")]
+        public object? Nonvolition { get; set; }
+
+        [JsonPropertyName("palatableness")]
+        public object? Palatableness { get; set; }
+
+        [JsonPropertyName("pimpery")]
+        public object? Pimpery { get; set; }
+
+        [JsonPropertyName("previolation")]
+        public object? Previolation { get; set; }
+
+        [JsonPropertyName("reconveyance")]
+        public object? Reconveyance { get; set; }
+
+        [JsonPropertyName("registership")]
+        public object? Registership { get; set; }
+
+        [JsonPropertyName("rhyacolite")]
+        public object? Rhyacolite { get; set; }
+
+        [JsonPropertyName("smithereens")]
+        public object? Smithereens { get; set; }
+
+        [JsonPropertyName("superedification")]
+        public object? Superedification { get; set; }
+
+        [JsonPropertyName("trust")]
+        public object? Trust { get; set; }
+
+        [JsonPropertyName("whitestone")]
+        public object? Whitestone { get; set; }
+    }
+
+    public partial record Noncontributing
+    {
+        [JsonRequired]
+        [JsonPropertyName("estevin")]
+        public string Estevin { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("jolterhead")]
+        public double Jolterhead { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("sauternes")]
+        public long Sauternes { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("sparsely")]
+        public bool Sparsely { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unrequested")]
+        public object Unrequested { get; set; }
+    }
+
+    public partial record OccupationalistClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("beholdable")]
+        public object Beholdable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("brotuliform")]
+        public object Brotuliform { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Chimakum")]
+        public object Chimakum { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("doodler")]
+        public object Doodler { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("emulsin")]
+        public object Emulsin { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Fin")]
+        public object Fin { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("flourishing")]
+        public object Flourishing { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("flueless")]
+        public object Flueless { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("furtively")]
+        public object Furtively { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("gritter")]
+        public object Gritter { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("interwish")]
+        public object Interwish { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("monoxylic")]
+        public object Monoxylic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("myristic")]
+        public object Myristic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nightwear")]
+        public object Nightwear { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("peruser")]
+        public object Peruser { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("theoastrological")]
+        public object Theoastrological { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("thumby")]
+        public object Thumby { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tingitid")]
+        public object Tingitid { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("trailless")]
+        public object Trailless { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unpocketed")]
+        public object Unpocketed { get; set; }
+    }
+
+    public partial record OutrivalClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("adroitly")]
+        public object Adroitly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("bridehood")]
+        public object Bridehood { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Castoroides")]
+        public object Castoroides { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Czechoslovak")]
+        public object Czechoslovak { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("diagenesis")]
+        public object Diagenesis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("dihexahedron")]
+        public object Dihexahedron { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("dopester")]
+        public object Dopester { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("eumerism")]
+        public object Eumerism { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("flyness")]
+        public object Flyness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("fouler")]
+        public object Fouler { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("laudanosine")]
+        public object Laudanosine { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Lingulidae")]
+        public object Lingulidae { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("minutary")]
+        public object Minutary { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("mitra")]
+        public object Mitra { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("opisthorchiasis")]
+        public object Opisthorchiasis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pensively")]
+        public object Pensively { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pubigerous")]
+        public object Pubigerous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("rebellious")]
+        public object Rebellious { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("recodify")]
+        public object Recodify { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unpaced")]
+        public object Unpaced { get; set; }
+    }
+
+    public partial record PiaculumClass
+    {
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("alada")]
+        public long? Alada { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("amphistomous")]
+        public long? Amphistomous { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("boysenberry")]
+        public long? Boysenberry { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("decardinalize")]
+        public long? Decardinalize { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("discouragement")]
+        public long? Discouragement { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("doitrified")]
+        public long? Doitrified { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("hexaspermous")]
+        public long? Hexaspermous { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("insinking")]
+        public long? Insinking { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("loathfulness")]
+        public long? Loathfulness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("miasmatical")]
+        public long? Miasmatical { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("neurofibril")]
+        public long? Neurofibril { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("phonendoscope")]
+        public long? Phonendoscope { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("pilferment")]
+        public long? Pilferment { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("predismissory")]
+        public long? Predismissory { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("preinscription")]
+        public long? Preinscription { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("quotative")]
+        public long? Quotative { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("sienna")]
+        public long? Sienna { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("thorax")]
+        public long? Thorax { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("yachting")]
+        public long? Yachting { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Zipper")]
+        public long? Zipper { get; set; }
+    }
+
+    public partial record Pneumocele
+    {
+        [JsonPropertyName("Carbonarism")]
+        public object? Carbonarism { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonPropertyName("cineolic")]
+        public object? Cineolic { get; set; }
+
+        [JsonPropertyName("cobbly")]
+        public object? Cobbly { get; set; }
+
+        [JsonPropertyName("conchyliferous")]
+        public object? Conchyliferous { get; set; }
+
+        [JsonPropertyName("congregation")]
+        public object? Congregation { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonPropertyName("enterotomy")]
+        public object? Enterotomy { get; set; }
+
+        [JsonPropertyName("entophytal")]
+        public object? Entophytal { get; set; }
+
+        [JsonPropertyName("fewtrils")]
+        public object? Fewtrils { get; set; }
+
+        [JsonPropertyName("herem")]
+        public object? Herem { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonPropertyName("Koniga")]
+        public object? Koniga { get; set; }
+
+        [JsonPropertyName("meticulosity")]
+        public object? Meticulosity { get; set; }
+
+        [JsonPropertyName("Micky")]
+        public object? Micky { get; set; }
+
+        [JsonPropertyName("mismarriage")]
+        public object? Mismarriage { get; set; }
+
+        [JsonPropertyName("neurotrophic")]
+        public object? Neurotrophic { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonPropertyName("persuasively")]
+        public object? Persuasively { get; set; }
+
+        [JsonPropertyName("replaceable")]
+        public object? Replaceable { get; set; }
+
+        [JsonPropertyName("silex")]
+        public object? Silex { get; set; }
+
+        [JsonPropertyName("taillight")]
+        public object? Taillight { get; set; }
+
+        [JsonPropertyName("unjealous")]
+        public object? Unjealous { get; set; }
+
+        [JsonPropertyName("visitorial")]
+        public object? Visitorial { get; set; }
+    }
+
+    public partial record PotwhiskyClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("arciform")]
+        public object Arciform { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cresolin")]
+        public object Cresolin { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("disheartener")]
+        public object Disheartener { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("disproportionable")]
+        public object Disproportionable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Euchorda")]
+        public object Euchorda { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ferryway")]
+        public object Ferryway { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("filamentiferous")]
+        public object Filamentiferous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("flemish")]
+        public object Flemish { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("forgainst")]
+        public object Forgainst { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("grainering")]
+        public object Grainering { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("irrevoluble")]
+        public object Irrevoluble { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("kindredship")]
+        public object Kindredship { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pinguitudinous")]
+        public object Pinguitudinous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("simpletonic")]
+        public object Simpletonic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("singsong")]
+        public object Singsong { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("submergement")]
+        public object Submergement { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("supraoesophagal")]
+        public object Supraoesophagal { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("thrashel")]
+        public object Thrashel { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tyremesis")]
+        public object Tyremesis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Yoruba")]
+        public object Yoruba { get; set; }
+    }
+
+    public partial record PrefreshmanClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("azorubine")]
+        public object Azorubine { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("choroiditis")]
+        public object Choroiditis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("coagulatory")]
+        public object Coagulatory { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cyclorama")]
+        public object Cyclorama { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Dolphus")]
+        public object Dolphus { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("duckhearted")]
+        public object Duckhearted { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Ficus")]
+        public object Ficus { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Gemaric")]
+        public object Gemaric { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("jugation")]
+        public object Jugation { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("myoliposis")]
+        public object Myoliposis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nonnomination")]
+        public object Nonnomination { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("palay")]
+        public object Palay { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pentactinal")]
+        public object Pentactinal { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Phaet")]
+        public object Phaet { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("piquant")]
+        public object Piquant { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("registration")]
+        public object Registration { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("remancipation")]
+        public object Remancipation { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("scutatiform")]
+        public object Scutatiform { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("theodolite")]
+        public object Theodolite { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("underward")]
+        public object Underward { get; set; }
+    }
+
+    public partial struct JurorElement
+    {
+        public bool? Bool;
+        public JurorClass? JurorClass;
+
+        public static implicit operator JurorElement(bool Bool) => new JurorElement { Bool = Bool };
+        public static implicit operator JurorElement(JurorClass JurorClass) => new JurorElement { JurorClass = JurorClass };
+    }
+
+    public partial struct Kongoni
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Kongoni(long[] IntegerArray) => new Kongoni { IntegerArray = IntegerArray };
+        public static implicit operator Kongoni(Dictionary<string, long> IntegerMap) => new Kongoni { IntegerMap = IntegerMap };
+    }
+
+    public partial struct LadronismElement
+    {
+        public double? Double;
+        public LadronismClass? LadronismClass;
+        public string? String;
+
+        public static implicit operator LadronismElement(double Double) => new LadronismElement { Double = Double };
+        public static implicit operator LadronismElement(LadronismClass LadronismClass) => new LadronismElement { LadronismClass = LadronismClass };
+        public static implicit operator LadronismElement(string String) => new LadronismElement { String = String };
+    }
+
+    public partial struct LandlubberlyElement
+    {
+        public bool? Bool;
+        public long? Integer;
+        public LandlubberlyClass? LandlubberlyClass;
+
+        public static implicit operator LandlubberlyElement(bool Bool) => new LandlubberlyElement { Bool = Bool };
+        public static implicit operator LandlubberlyElement(long Integer) => new LandlubberlyElement { Integer = Integer };
+        public static implicit operator LandlubberlyElement(LandlubberlyClass LandlubberlyClass) => new LandlubberlyElement { LandlubberlyClass = LandlubberlyClass };
+    }
+
+    public partial struct Listener
+    {
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Listener(long Integer) => new Listener { Integer = Integer };
+        public static implicit operator Listener(object[] NullArray) => new Listener { NullArray = NullArray };
+    }
+
+    public partial struct LupusElement
+    {
+        public long? Integer;
+        public LupusClass? LupusClass;
+
+        public static implicit operator LupusElement(long Integer) => new LupusElement { Integer = Integer };
+        public static implicit operator LupusElement(LupusClass LupusClass) => new LupusElement { LupusClass = LupusClass };
+    }
+
+    public partial struct MonaziteElement
+    {
+        public double? Double;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator MonaziteElement(double Double) => new MonaziteElement { Double = Double };
+        public static implicit operator MonaziteElement(MonaziteClass MonaziteClass) => new MonaziteElement { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Monoliteral
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+
+        public static implicit operator Monoliteral(bool Bool) => new Monoliteral { Bool = Bool };
+        public static implicit operator Monoliteral(object[] NullArray) => new Monoliteral { NullArray = NullArray };
+    }
+
+    public partial struct MonotheisticallyElement
+    {
+        public MonotheisticallyClass? MonotheisticallyClass;
+        public object[]? NullArray;
+
+        public static implicit operator MonotheisticallyElement(MonotheisticallyClass MonotheisticallyClass) => new MonotheisticallyElement { MonotheisticallyClass = MonotheisticallyClass };
+        public static implicit operator MonotheisticallyElement(object[] NullArray) => new MonotheisticallyElement { NullArray = NullArray };
+    }
+
+    public partial struct Montage
+    {
+        public double? Double;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Montage(double Double) => new Montage { Double = Double };
+        public static implicit operator Montage(object[] NullArray) => new Montage { NullArray = NullArray };
+        public static implicit operator Montage(string String) => new Montage { String = String };
+    }
+
+    public partial struct Moralness
+    {
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Moralness(double Double) => new Moralness { Double = Double };
+        public static implicit operator Moralness(object[] NullArray) => new Moralness { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Double == null;
+    }
+
+    public partial struct Mulishly
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Mulishly(double Double) => new Mulishly { Double = Double };
+        public static implicit operator Mulishly(long[] IntegerArray) => new Mulishly { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Double == null;
+    }
+
+    public partial struct Myoscope
+    {
+        public bool? Bool;
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Myoscope(bool Bool) => new Myoscope { Bool = Bool };
+        public static implicit operator Myoscope(long Integer) => new Myoscope { Integer = Integer };
+        public static implicit operator Myoscope(object[] NullArray) => new Myoscope { NullArray = NullArray };
+    }
+
+    public partial struct Neuromastic
+    {
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Neuromastic(double Double) => new Neuromastic { Double = Double };
+        public static implicit operator Neuromastic(object[] NullArray) => new Neuromastic { NullArray = NullArray };
+    }
+
+    public partial struct Nonnervous
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Nonnervous(bool Bool) => new Nonnervous { Bool = Bool };
+        public static implicit operator Nonnervous(long Integer) => new Nonnervous { Integer = Integer };
+    }
+
+    public partial struct Nonvaluation
+    {
+        public bool? Bool;
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Nonvaluation(bool Bool) => new Nonvaluation { Bool = Bool };
+        public static implicit operator Nonvaluation(double Double) => new Nonvaluation { Double = Double };
+        public static implicit operator Nonvaluation(object[] NullArray) => new Nonvaluation { NullArray = NullArray };
+    }
+
+    public partial struct OccupationalistElement
+    {
+        public object[]? NullArray;
+        public OccupationalistClass? OccupationalistClass;
+
+        public static implicit operator OccupationalistElement(object[] NullArray) => new OccupationalistElement { NullArray = NullArray };
+        public static implicit operator OccupationalistElement(OccupationalistClass OccupationalistClass) => new OccupationalistElement { OccupationalistClass = OccupationalistClass };
+        public bool IsNull => NullArray == null && OccupationalistClass == null;
+    }
+
+    public partial struct OutrivalElement
+    {
+        public double? Double;
+        public OutrivalClass? OutrivalClass;
+
+        public static implicit operator OutrivalElement(double Double) => new OutrivalElement { Double = Double };
+        public static implicit operator OutrivalElement(OutrivalClass OutrivalClass) => new OutrivalElement { OutrivalClass = OutrivalClass };
+        public bool IsNull => OutrivalClass == null && Double == null;
+    }
+
+    public partial struct Paleographically
+    {
+        public double? Double;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Paleographically(double Double) => new Paleographically { Double = Double };
+        public static implicit operator Paleographically(Dictionary<string, long?> UnionMap) => new Paleographically { UnionMap = UnionMap };
+    }
+
+    public partial struct Pamphletwise
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Pamphletwise(long Integer) => new Pamphletwise { Integer = Integer };
+        public static implicit operator Pamphletwise(Dictionary<string, long> IntegerMap) => new Pamphletwise { IntegerMap = IntegerMap };
+        public static implicit operator Pamphletwise(string String) => new Pamphletwise { String = String };
+    }
+
+    public partial struct Pediatric
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Pediatric(bool Bool) => new Pediatric { Bool = Bool };
+        public static implicit operator Pediatric(double Double) => new Pediatric { Double = Double };
+        public bool IsNull => Bool == null && Double == null;
+    }
+
+    public partial struct PiaculumElement
+    {
+        public double? Double;
+        public PiaculumClass? PiaculumClass;
+
+        public static implicit operator PiaculumElement(double Double) => new PiaculumElement { Double = Double };
+        public static implicit operator PiaculumElement(PiaculumClass PiaculumClass) => new PiaculumElement { PiaculumClass = PiaculumClass };
+    }
+
+    public partial struct Piccadilly
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Piccadilly(double Double) => new Piccadilly { Double = Double };
+        public static implicit operator Piccadilly(string String) => new Piccadilly { String = String };
+        public bool IsNull => Double == null && String == null;
+    }
+
+    public partial struct Piffler
+    {
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+
+        public static implicit operator Piffler(MonaziteClass MonaziteClass) => new Piffler { MonaziteClass = MonaziteClass };
+        public static implicit operator Piffler(object[] NullArray) => new Piffler { NullArray = NullArray };
+    }
+
+    public partial struct Pithful
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Pithful(bool Bool) => new Pithful { Bool = Bool };
+        public static implicit operator Pithful(long Integer) => new Pithful { Integer = Integer };
+        public bool IsNull => Bool == null && Integer == null;
+    }
+
+    public partial struct Placuntiti
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Placuntiti(long Integer) => new Placuntiti { Integer = Integer };
+        public static implicit operator Placuntiti(Dictionary<string, long> IntegerMap) => new Placuntiti { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Plectopterous
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Plectopterous(double Double) => new Plectopterous { Double = Double };
+        public static implicit operator Plectopterous(Dictionary<string, long> IntegerMap) => new Plectopterous { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Poliorcetic
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Poliorcetic(bool Bool) => new Poliorcetic { Bool = Bool };
+        public static implicit operator Poliorcetic(MonaziteClass MonaziteClass) => new Poliorcetic { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Poormaster
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Poormaster(long[] IntegerArray) => new Poormaster { IntegerArray = IntegerArray };
+        public static implicit operator Poormaster(Dictionary<string, long> IntegerMap) => new Poormaster { IntegerMap = IntegerMap };
+        public bool IsNull => IntegerArray == null && IntegerMap == null;
+    }
+
+    public partial struct PotwhiskyElement
+    {
+        public long? Integer;
+        public PotwhiskyClass? PotwhiskyClass;
+
+        public static implicit operator PotwhiskyElement(long Integer) => new PotwhiskyElement { Integer = Integer };
+        public static implicit operator PotwhiskyElement(PotwhiskyClass PotwhiskyClass) => new PotwhiskyElement { PotwhiskyClass = PotwhiskyClass };
+        public bool IsNull => PotwhiskyClass == null && Integer == null;
+    }
+
+    public partial struct Practicalizer
+    {
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Practicalizer(MonaziteClass MonaziteClass) => new Practicalizer { MonaziteClass = MonaziteClass };
+        public static implicit operator Practicalizer(object[] NullArray) => new Practicalizer { NullArray = NullArray };
+        public static implicit operator Practicalizer(string String) => new Practicalizer { String = String };
+    }
+
+    public partial struct PrefreshmanElement
+    {
+        public object[]? NullArray;
+        public PrefreshmanClass? PrefreshmanClass;
+        public string? String;
+
+        public static implicit operator PrefreshmanElement(object[] NullArray) => new PrefreshmanElement { NullArray = NullArray };
+        public static implicit operator PrefreshmanElement(PrefreshmanClass PrefreshmanClass) => new PrefreshmanElement { PrefreshmanClass = PrefreshmanClass };
+        public static implicit operator PrefreshmanElement(string String) => new PrefreshmanElement { String = String };
+    }
+
+    public partial struct Prehensility
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+
+        public static implicit operator Prehensility(bool Bool) => new Prehensility { Bool = Bool };
+        public static implicit operator Prehensility(MonaziteClass MonaziteClass) => new Prehensility { MonaziteClass = MonaziteClass };
+        public static implicit operator Prehensility(object[] NullArray) => new Prehensility { NullArray = NullArray };
+    }
+
+    public partial struct Prevoidance
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Prevoidance(long Integer) => new Prevoidance { Integer = Integer };
+        public static implicit operator Prevoidance(long[] IntegerArray) => new Prevoidance { IntegerArray = IntegerArray };
+        public static implicit operator Prevoidance(MonaziteClass MonaziteClass) => new Prevoidance { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Protext
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Protext(bool Bool) => new Protext { Bool = Bool };
+        public static implicit operator Protext(long[] IntegerArray) => new Protext { IntegerArray = IntegerArray };
+        public static implicit operator Protext(MonaziteClass MonaziteClass) => new Protext { MonaziteClass = MonaziteClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonSerializer.Deserialize<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonSerializer.Serialize(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)
+        {
+            Converters =
+            {
+                JurorElementConverter.Singleton,
+                KongoniConverter.Singleton,
+                LadronismElementConverter.Singleton,
+                LandlubberlyElementConverter.Singleton,
+                ListenerConverter.Singleton,
+                LupusElementConverter.Singleton,
+                MonaziteElementConverter.Singleton,
+                MonoliteralConverter.Singleton,
+                MonotheisticallyElementConverter.Singleton,
+                MontageConverter.Singleton,
+                MoralnessConverter.Singleton,
+                MulishlyConverter.Singleton,
+                MyoscopeConverter.Singleton,
+                NeuromasticConverter.Singleton,
+                NonnervousConverter.Singleton,
+                NonvaluationConverter.Singleton,
+                OccupationalistElementConverter.Singleton,
+                OutrivalElementConverter.Singleton,
+                PaleographicallyConverter.Singleton,
+                PamphletwiseConverter.Singleton,
+                PediatricConverter.Singleton,
+                PiaculumElementConverter.Singleton,
+                PiccadillyConverter.Singleton,
+                PifflerConverter.Singleton,
+                PithfulConverter.Singleton,
+                PlacuntitiConverter.Singleton,
+                PlectopterousConverter.Singleton,
+                PoliorceticConverter.Singleton,
+                PoormasterConverter.Singleton,
+                PotwhiskyElementConverter.Singleton,
+                PracticalizerConverter.Singleton,
+                PrefreshmanElementConverter.Singleton,
+                PrehensilityConverter.Singleton,
+                PrevoidanceConverter.Singleton,
+                ProtextConverter.Singleton,
+                new DateOnlyConverter(),
+                new TimeOnlyConverter(),
+                IsoDateTimeOffsetConverter.Singleton
+            },
+        };
+    }
+
+    internal class JurorElementConverter : JsonConverter<JurorElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(JurorElement);
+
+        public override JurorElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new JurorElement { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<JurorClass>(ref reader, options);
+                    return new JurorElement { JurorClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type JurorElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, JurorElement value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.JurorClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.JurorClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type JurorElement");
+        }
+
+        public static readonly JurorElementConverter Singleton = new JurorElementConverter();
+    }
+
+    internal class KongoniConverter : JsonConverter<Kongoni>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kongoni);
+
+        public override Kongoni Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Kongoni { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Kongoni { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Kongoni");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Kongoni value, JsonSerializerOptions options)
+        {
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Kongoni");
+        }
+
+        public static readonly KongoniConverter Singleton = new KongoniConverter();
+    }
+
+    internal class LadronismElementConverter : JsonConverter<LadronismElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(LadronismElement);
+
+        public override LadronismElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new LadronismElement { Double = doubleValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new LadronismElement { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<LadronismClass>(ref reader, options);
+                    return new LadronismElement { LadronismClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type LadronismElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, LadronismElement value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.LadronismClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.LadronismClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type LadronismElement");
+        }
+
+        public static readonly LadronismElementConverter Singleton = new LadronismElementConverter();
+    }
+
+    internal class LandlubberlyElementConverter : JsonConverter<LandlubberlyElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(LandlubberlyElement);
+
+        public override LandlubberlyElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new LandlubberlyElement { Integer = intValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new LandlubberlyElement { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<LandlubberlyClass>(ref reader, options);
+                    return new LandlubberlyElement { LandlubberlyClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type LandlubberlyElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, LandlubberlyElement value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.LandlubberlyClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.LandlubberlyClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type LandlubberlyElement");
+        }
+
+        public static readonly LandlubberlyElementConverter Singleton = new LandlubberlyElementConverter();
+    }
+
+    internal class ListenerConverter : JsonConverter<Listener>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Listener);
+
+        public override Listener Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Listener { Integer = intValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Listener { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Listener");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Listener value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Listener");
+        }
+
+        public static readonly ListenerConverter Singleton = new ListenerConverter();
+    }
+
+    internal class LupusElementConverter : JsonConverter<LupusElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(LupusElement);
+
+        public override LupusElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new LupusElement { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<LupusClass>(ref reader, options);
+                    return new LupusElement { LupusClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type LupusElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, LupusElement value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.LupusClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.LupusClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type LupusElement");
+        }
+
+        public static readonly LupusElementConverter Singleton = new LupusElementConverter();
+    }
+
+    internal class MonaziteElementConverter : JsonConverter<MonaziteElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonaziteElement);
+
+        public override MonaziteElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new MonaziteElement { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<MonaziteClass>(ref reader, options);
+                    return new MonaziteElement { MonaziteClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type MonaziteElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, MonaziteElement value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.MonaziteClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type MonaziteElement");
+        }
+
+        public static readonly MonaziteElementConverter Singleton = new MonaziteElementConverter();
+    }
+
+    internal class MonoliteralConverter : JsonConverter<Monoliteral>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Monoliteral);
+
+        public override Monoliteral Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Monoliteral { Bool = boolValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Monoliteral { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Monoliteral");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Monoliteral value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Monoliteral");
+        }
+
+        public static readonly MonoliteralConverter Singleton = new MonoliteralConverter();
+    }
+
+    internal class MonotheisticallyElementConverter : JsonConverter<MonotheisticallyElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonotheisticallyElement);
+
+        public override MonotheisticallyElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<MonotheisticallyClass>(ref reader, options);
+                    return new MonotheisticallyElement { MonotheisticallyClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new MonotheisticallyElement { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type MonotheisticallyElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, MonotheisticallyElement value, JsonSerializerOptions options)
+        {
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.MonotheisticallyClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.MonotheisticallyClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type MonotheisticallyElement");
+        }
+
+        public static readonly MonotheisticallyElementConverter Singleton = new MonotheisticallyElementConverter();
+    }
+
+    internal class MontageConverter : JsonConverter<Montage>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Montage);
+
+        public override Montage Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Montage { Double = doubleValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Montage { String = stringValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Montage { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Montage");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Montage value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Montage");
+        }
+
+        public static readonly MontageConverter Singleton = new MontageConverter();
+    }
+
+    internal class MoralnessConverter : JsonConverter<Moralness>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Moralness);
+
+        public override Moralness Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Moralness { };
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Moralness { Double = doubleValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Moralness { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Moralness");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Moralness value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Moralness");
+        }
+
+        public static readonly MoralnessConverter Singleton = new MoralnessConverter();
+    }
+
+    internal class MulishlyConverter : JsonConverter<Mulishly>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Mulishly);
+
+        public override Mulishly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Mulishly { };
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Mulishly { Double = doubleValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Mulishly { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Mulishly");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Mulishly value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Mulishly");
+        }
+
+        public static readonly MulishlyConverter Singleton = new MulishlyConverter();
+    }
+
+    internal class MyoscopeConverter : JsonConverter<Myoscope>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Myoscope);
+
+        public override Myoscope Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Myoscope { Integer = intValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Myoscope { Bool = boolValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Myoscope { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Myoscope");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Myoscope value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Myoscope");
+        }
+
+        public static readonly MyoscopeConverter Singleton = new MyoscopeConverter();
+    }
+
+    internal class NeuromasticConverter : JsonConverter<Neuromastic>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Neuromastic);
+
+        public override Neuromastic Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Neuromastic { Double = doubleValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Neuromastic { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Neuromastic");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Neuromastic value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Neuromastic");
+        }
+
+        public static readonly NeuromasticConverter Singleton = new NeuromasticConverter();
+    }
+
+    internal class NonnervousConverter : JsonConverter<Nonnervous>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonnervous);
+
+        public override Nonnervous Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Nonnervous { Integer = intValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Nonnervous { Bool = boolValue };
+            }
+            throw new JsonException("Cannot unmarshal type Nonnervous");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Nonnervous value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Nonnervous");
+        }
+
+        public static readonly NonnervousConverter Singleton = new NonnervousConverter();
+    }
+
+    internal class NonvaluationConverter : JsonConverter<Nonvaluation>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonvaluation);
+
+        public override Nonvaluation Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Nonvaluation { Double = doubleValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Nonvaluation { Bool = boolValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Nonvaluation { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Nonvaluation");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Nonvaluation value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Nonvaluation");
+        }
+
+        public static readonly NonvaluationConverter Singleton = new NonvaluationConverter();
+    }
+
+    internal class OccupationalistElementConverter : JsonConverter<OccupationalistElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(OccupationalistElement);
+
+        public override OccupationalistElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new OccupationalistElement { };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<OccupationalistClass>(ref reader, options);
+                    return new OccupationalistElement { OccupationalistClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new OccupationalistElement { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type OccupationalistElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, OccupationalistElement value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.OccupationalistClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.OccupationalistClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type OccupationalistElement");
+        }
+
+        public static readonly OccupationalistElementConverter Singleton = new OccupationalistElementConverter();
+    }
+
+    internal class OutrivalElementConverter : JsonConverter<OutrivalElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(OutrivalElement);
+
+        public override OutrivalElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new OutrivalElement { };
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new OutrivalElement { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<OutrivalClass>(ref reader, options);
+                    return new OutrivalElement { OutrivalClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type OutrivalElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, OutrivalElement value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.OutrivalClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.OutrivalClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type OutrivalElement");
+        }
+
+        public static readonly OutrivalElementConverter Singleton = new OutrivalElementConverter();
+    }
+
+    internal class PaleographicallyConverter : JsonConverter<Paleographically>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Paleographically);
+
+        public override Paleographically Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Paleographically { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long?>>(ref reader, options);
+                    return new Paleographically { UnionMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Paleographically");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Paleographically value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Paleographically");
+        }
+
+        public static readonly PaleographicallyConverter Singleton = new PaleographicallyConverter();
+    }
+
+    internal class PamphletwiseConverter : JsonConverter<Pamphletwise>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pamphletwise);
+
+        public override Pamphletwise Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Pamphletwise { Integer = intValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Pamphletwise { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Pamphletwise { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Pamphletwise");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Pamphletwise value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Pamphletwise");
+        }
+
+        public static readonly PamphletwiseConverter Singleton = new PamphletwiseConverter();
+    }
+
+    internal class PediatricConverter : JsonConverter<Pediatric>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pediatric);
+
+        public override Pediatric Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Pediatric { };
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Pediatric { Double = doubleValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Pediatric { Bool = boolValue };
+            }
+            throw new JsonException("Cannot unmarshal type Pediatric");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Pediatric value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Pediatric");
+        }
+
+        public static readonly PediatricConverter Singleton = new PediatricConverter();
+    }
+
+    internal class PiaculumElementConverter : JsonConverter<PiaculumElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(PiaculumElement);
+
+        public override PiaculumElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new PiaculumElement { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<PiaculumClass>(ref reader, options);
+                    return new PiaculumElement { PiaculumClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type PiaculumElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, PiaculumElement value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.PiaculumClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.PiaculumClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type PiaculumElement");
+        }
+
+        public static readonly PiaculumElementConverter Singleton = new PiaculumElementConverter();
+    }
+
+    internal class PiccadillyConverter : JsonConverter<Piccadilly>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piccadilly);
+
+        public override Piccadilly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Piccadilly { };
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Piccadilly { Double = doubleValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Piccadilly { String = stringValue };
+            }
+            throw new JsonException("Cannot unmarshal type Piccadilly");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Piccadilly value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Piccadilly");
+        }
+
+        public static readonly PiccadillyConverter Singleton = new PiccadillyConverter();
+    }
+
+    internal class PifflerConverter : JsonConverter<Piffler>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piffler);
+
+        public override Piffler Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<MonaziteClass>(ref reader, options);
+                    return new Piffler { MonaziteClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Piffler { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Piffler");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Piffler value, JsonSerializerOptions options)
+        {
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.MonaziteClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Piffler");
+        }
+
+        public static readonly PifflerConverter Singleton = new PifflerConverter();
+    }
+
+    internal class PithfulConverter : JsonConverter<Pithful>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pithful);
+
+        public override Pithful Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Pithful { };
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Pithful { Integer = intValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Pithful { Bool = boolValue };
+            }
+            throw new JsonException("Cannot unmarshal type Pithful");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Pithful value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Pithful");
+        }
+
+        public static readonly PithfulConverter Singleton = new PithfulConverter();
+    }
+
+    internal class PlacuntitiConverter : JsonConverter<Placuntiti>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Placuntiti);
+
+        public override Placuntiti Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Placuntiti { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Placuntiti { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Placuntiti");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Placuntiti value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Placuntiti");
+        }
+
+        public static readonly PlacuntitiConverter Singleton = new PlacuntitiConverter();
+    }
+
+    internal class PlectopterousConverter : JsonConverter<Plectopterous>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Plectopterous);
+
+        public override Plectopterous Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Plectopterous { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Plectopterous { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Plectopterous");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Plectopterous value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Plectopterous");
+        }
+
+        public static readonly PlectopterousConverter Singleton = new PlectopterousConverter();
+    }
+
+    internal class PoliorceticConverter : JsonConverter<Poliorcetic>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poliorcetic);
+
+        public override Poliorcetic Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Poliorcetic { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<MonaziteClass>(ref reader, options);
+                    return new Poliorcetic { MonaziteClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Poliorcetic");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Poliorcetic value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.MonaziteClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Poliorcetic");
+        }
+
+        public static readonly PoliorceticConverter Singleton = new PoliorceticConverter();
+    }
+
+    internal class PoormasterConverter : JsonConverter<Poormaster>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poormaster);
+
+        public override Poormaster Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Poormaster { };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Poormaster { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Poormaster { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Poormaster");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Poormaster value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Poormaster");
+        }
+
+        public static readonly PoormasterConverter Singleton = new PoormasterConverter();
+    }
+
+    internal class PotwhiskyElementConverter : JsonConverter<PotwhiskyElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(PotwhiskyElement);
+
+        public override PotwhiskyElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new PotwhiskyElement { };
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new PotwhiskyElement { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<PotwhiskyClass>(ref reader, options);
+                    return new PotwhiskyElement { PotwhiskyClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type PotwhiskyElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, PotwhiskyElement value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.PotwhiskyClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.PotwhiskyClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type PotwhiskyElement");
+        }
+
+        public static readonly PotwhiskyElementConverter Singleton = new PotwhiskyElementConverter();
+    }
+
+    internal class PracticalizerConverter : JsonConverter<Practicalizer>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Practicalizer);
+
+        public override Practicalizer Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Practicalizer { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<MonaziteClass>(ref reader, options);
+                    return new Practicalizer { MonaziteClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Practicalizer { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Practicalizer");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Practicalizer value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.MonaziteClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Practicalizer");
+        }
+
+        public static readonly PracticalizerConverter Singleton = new PracticalizerConverter();
+    }
+
+    internal class PrefreshmanElementConverter : JsonConverter<PrefreshmanElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(PrefreshmanElement);
+
+        public override PrefreshmanElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new PrefreshmanElement { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<PrefreshmanClass>(ref reader, options);
+                    return new PrefreshmanElement { PrefreshmanClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new PrefreshmanElement { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type PrefreshmanElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, PrefreshmanElement value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.PrefreshmanClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.PrefreshmanClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type PrefreshmanElement");
+        }
+
+        public static readonly PrefreshmanElementConverter Singleton = new PrefreshmanElementConverter();
+    }
+
+    internal class PrehensilityConverter : JsonConverter<Prehensility>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prehensility);
+
+        public override Prehensility Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Prehensility { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<MonaziteClass>(ref reader, options);
+                    return new Prehensility { MonaziteClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Prehensility { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Prehensility");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Prehensility value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.MonaziteClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Prehensility");
+        }
+
+        public static readonly PrehensilityConverter Singleton = new PrehensilityConverter();
+    }
+
+    internal class PrevoidanceConverter : JsonConverter<Prevoidance>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prevoidance);
+
+        public override Prevoidance Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Prevoidance { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<MonaziteClass>(ref reader, options);
+                    return new Prevoidance { MonaziteClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Prevoidance { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Prevoidance");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Prevoidance value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.MonaziteClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Prevoidance");
+        }
+
+        public static readonly PrevoidanceConverter Singleton = new PrevoidanceConverter();
+    }
+
+    internal class ProtextConverter : JsonConverter<Protext>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protext);
+
+        public override Protext Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Protext { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<MonaziteClass>(ref reader, options);
+                    return new Protext { MonaziteClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Protext { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Protext");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Protext value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.MonaziteClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Protext");
+        }
+
+        public static readonly ProtextConverter Singleton = new ProtextConverter();
+    }
+    
+    public class DateOnlyConverter : JsonConverter<DateOnly>
+    {
+        private readonly string serializationFormat;
+        public DateOnlyConverter() : this(null) { }
+
+        public DateOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "yyyy-MM-dd";
+        }
+
+        public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return DateOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    public class TimeOnlyConverter : JsonConverter<TimeOnly>
+    {
+        private readonly string serializationFormat;
+
+        public TimeOnlyConverter() : this(null) { }
+
+        public TimeOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff";
+        }
+
+        public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return TimeOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    internal class IsoDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
+    {
+        public override bool CanConvert(Type t) => t == typeof(DateTimeOffset);
+
+        private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
+
+        private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind;
+        private string? _dateTimeFormat;
+        private CultureInfo? _culture;
+
+        public DateTimeStyles DateTimeStyles
+        {
+                get => _dateTimeStyles;
+                set => _dateTimeStyles = value;
+        }
+
+        public string? DateTimeFormat
+        {
+                get => _dateTimeFormat ?? string.Empty;
+                set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value;
+        }
+
+        public CultureInfo Culture
+        {
+                get => _culture ?? CultureInfo.CurrentCulture;
+                set => _culture = value;
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
+        {
+                string text;
+
+
+                if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal
+                        || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal)
+                {
+                        value = value.ToUniversalTime();
+                }
+
+                text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture);
+
+                writer.WriteStringValue(text);
+        }
+
+        public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                string? dateText = reader.GetString();
+
+                if (string.IsNullOrEmpty(dateText) == false)
+                {
+                        if (!string.IsNullOrEmpty(_dateTimeFormat))
+                        {
+                                return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles);
+                        }
+                        else
+                        {
+                                return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles);
+                        }
+                }
+                else
+                {
+                        return default(DateTimeOffset);
+                }
+        }
+
+
+        public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
diff --git a/head/csharp-SystemTextJson/test/inputs/json/priority/combinations4.json/use-records-true--3cdbe9dae4f8/QuickType.cs b/head/csharp-SystemTextJson/test/inputs/json/priority/combinations4.json/use-records-true--3cdbe9dae4f8/QuickType.cs
new file mode 100644
index 0000000..3851257
--- /dev/null
+++ b/head/csharp-SystemTextJson/test/inputs/json/priority/combinations4.json/use-records-true--3cdbe9dae4f8/QuickType.cs
@@ -0,0 +1,3859 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'System.Text.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Text.Json;
+    using System.Text.Json.Serialization;
+    using System.Globalization;
+
+    public partial record TopLevel
+    {
+        [JsonRequired]
+        [JsonPropertyName("protrusive")]
+        public Protrusive[] Protrusive { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pulpitism")]
+        public PulpitismElement[] Pulpitism { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pyodermia")]
+        public PyodermiaElement[] Pyodermia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("quebrachine")]
+        public QuebrachineElement[] Quebrachine { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("querier")]
+        public Querier[] Querier { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("rebarbative")]
+        public Rebarbative[] Rebarbative { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("reimagine")]
+        public Reimagine[] Reimagine { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ressaut")]
+        public Ressaut Ressaut { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("retrocervical")]
+        public Retrocervical[] Retrocervical { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("revert")]
+        public Revert[] Revert { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("rewrite")]
+        public RewriteElement[] Rewrite { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("saccoderm")]
+        public Saccoderm[] Saccoderm { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("santir")]
+        public SantirElement[] Santir { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("saprophilous")]
+        public Saprophilous[] Saprophilous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("saxten")]
+        public SaxtenElement[] Saxten { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("scatty")]
+        public Scatty?[] Scatty { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("scoffer")]
+        public Scoffer[] Scoffer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("scrampum")]
+        public Scrampum[] Scrampum { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("semantic")]
+        public double Semantic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("serpentinic")]
+        public Serpentinic[] Serpentinic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("shadowable")]
+        public Shadowable[] Shadowable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("sistering")]
+        public SisteringElement[] Sistering { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("staghunting")]
+        public Staghunting[] Staghunting { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("stagmometer")]
+        public Stagmometer[] Stagmometer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("stimulability")]
+        public Stimulability[] Stimulability { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("strangleable")]
+        public Strangleable[] Strangleable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("strenuosity")]
+        public StrenuosityElement[] Strenuosity { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tabaxir")]
+        public Tabaxir[] Tabaxir { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("talpiform")]
+        public Talpiform[] Talpiform { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("thwack")]
+        public Thwack[] Thwack { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("to")]
+        public double?[] To { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tortricine")]
+        public Tortricine[] Tortricine { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("truantcy")]
+        public TruantcyElement[] Truantcy { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("turgesce")]
+        public string[] Turgesce { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unbeginning")]
+        public Unbeginning[] Unbeginning { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("underdunged")]
+        public double[] Underdunged { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("undesirability")]
+        public Undesirability[] Undesirability { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unerasing")]
+        public Unerasing[] Unerasing { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unguentarium")]
+        public Unguentarium[] Unguentarium { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unimpeachably")]
+        public UnimpeachablyElement[] Unimpeachably { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unmortgaged")]
+        public Unmortgaged[] Unmortgaged { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unobstructed")]
+        public Unobstructed[] Unobstructed { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unreceptivity")]
+        public Unreceptivity[] Unreceptivity { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unsatisfactoriness")]
+        public Unsatisfactoriness[] Unsatisfactoriness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unsecurity")]
+        public long[] Unsecurity { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unstressed")]
+        public UnstressedElement[] Unstressed { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("untasked")]
+        public Untasked[] Untasked { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unvarying")]
+        public Unvarying[] Unvarying { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("vehemently")]
+        public Vehemently[] Vehemently { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("warriorship")]
+        public Dictionary<string, bool> Warriorship { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("whitepot")]
+        public Whitepot[] Whitepot { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("wrothy")]
+        public WrothyElement[] Wrothy { get; set; }
+    }
+
+    public partial record PulpitismClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("abnet")]
+        public object Abnet { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("buckhorn")]
+        public object Buckhorn { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("calciform")]
+        public object Calciform { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("chelophore")]
+        public object Chelophore { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cogitation")]
+        public object Cogitation { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("decreeable")]
+        public object Decreeable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("despicable")]
+        public object Despicable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("isodiazo")]
+        public object Isodiazo { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("jadedly")]
+        public object Jadedly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("leptochlorite")]
+        public object Leptochlorite { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nursling")]
+        public object Nursling { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("palamedean")]
+        public object Palamedean { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("photoheliograph")]
+        public object Photoheliograph { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("pipewood")]
+        public object Pipewood { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("roberd")]
+        public object Roberd { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("statable")]
+        public object Statable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("superassume")]
+        public object Superassume { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("syllabe")]
+        public object Syllabe { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("toughhead")]
+        public object Toughhead { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("underburn")]
+        public object Underburn { get; set; }
+    }
+
+    public partial record PyodermiaClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("aphoristically")]
+        public object Aphoristically { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("apophyllous")]
+        public object Apophyllous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cognize")]
+        public object Cognize { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("dermonosology")]
+        public object Dermonosology { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Gyppo")]
+        public object Gyppo { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ither")]
+        public object Ither { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("juglandaceous")]
+        public object Juglandaceous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("litho")]
+        public object Litho { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("macropterous")]
+        public object Macropterous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("photographer")]
+        public object Photographer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("romancing")]
+        public object Romancing { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("rumness")]
+        public object Rumness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("somniloquist")]
+        public object Somniloquist { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("stressfully")]
+        public object Stressfully { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tactically")]
+        public object Tactically { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tracheophony")]
+        public object Tracheophony { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unappositely")]
+        public object Unappositely { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unclothedly")]
+        public object Unclothedly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unimplied")]
+        public object Unimplied { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unsyncopated")]
+        public object Unsyncopated { get; set; }
+    }
+
+    public partial record QuebrachineClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("catharticalness")]
+        public double Catharticalness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Chirotherium")]
+        public long Chirotherium { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("disdiapason")]
+        public string Disdiapason { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("homocerc")]
+        public bool Homocerc { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nonbookish")]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Reimagine
+    {
+        [JsonPropertyName("adducible")]
+        public object? Adducible { get; set; }
+
+        [JsonPropertyName("anabolin")]
+        public object? Anabolin { get; set; }
+
+        [JsonPropertyName("brainy")]
+        public object? Brainy { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonPropertyName("chrysamine")]
+        public object? Chrysamine { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonPropertyName("fluxweed")]
+        public object? Fluxweed { get; set; }
+
+        [JsonPropertyName("glaucine")]
+        public object? Glaucine { get; set; }
+
+        [JsonPropertyName("grobianism")]
+        public object? Grobianism { get; set; }
+
+        [JsonPropertyName("Hermo")]
+        public object? Hermo { get; set; }
+
+        [JsonPropertyName("hieroglyphist")]
+        public object? Hieroglyphist { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonPropertyName("icteroid")]
+        public object? Icteroid { get; set; }
+
+        [JsonPropertyName("immortal")]
+        public object? Immortal { get; set; }
+
+        [JsonPropertyName("impetulant")]
+        public object? Impetulant { get; set; }
+
+        [JsonPropertyName("irrigate")]
+        public object? Irrigate { get; set; }
+
+        [JsonPropertyName("myxedema")]
+        public object? Myxedema { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonPropertyName("onyx")]
+        public object? Onyx { get; set; }
+
+        [JsonPropertyName("repasser")]
+        public object? Repasser { get; set; }
+
+        [JsonPropertyName("septomarginal")]
+        public object? Septomarginal { get; set; }
+
+        [JsonPropertyName("subdie")]
+        public object? Subdie { get; set; }
+
+        [JsonPropertyName("tibiometatarsal")]
+        public object? Tibiometatarsal { get; set; }
+
+        [JsonPropertyName("waltzlike")]
+        public object? Waltzlike { get; set; }
+    }
+
+    public partial record Ressaut
+    {
+        [JsonRequired]
+        [JsonPropertyName("apperceptive")]
+        public string Apperceptive { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cuttoo")]
+        public string Cuttoo { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("douser")]
+        public string Douser { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("drinkproof")]
+        public string Drinkproof { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("forementioned")]
+        public string Forementioned { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Freesia")]
+        public string Freesia { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Genevieve")]
+        public string Genevieve { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hyperdiabolical")]
+        public string Hyperdiabolical { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hypocone")]
+        public string Hypocone { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("irreverentially")]
+        public string Irreverentially { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("jumart")]
+        public string Jumart { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Mimosaceae")]
+        public string Mimosaceae { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("mollicrush")]
+        public string Mollicrush { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nedder")]
+        public string Nedder { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("retinasphalt")]
+        public string Retinasphalt { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("sough")]
+        public string Sough { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("steading")]
+        public string Steading { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Theopaschitism")]
+        public string Theopaschitism { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("undurableness")]
+        public string Undurableness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unmingleable")]
+        public string Unmingleable { get; set; }
+    }
+
+    public partial record RewriteClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("accountancy")]
+        public object Accountancy { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cacotrophic")]
+        public object Cacotrophic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("contest")]
+        public object Contest { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("couthily")]
+        public object Couthily { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("falculate")]
+        public object Falculate { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("foreseize")]
+        public object Foreseize { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Hyades")]
+        public object Hyades { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("lemnad")]
+        public object Lemnad { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("monotheistically")]
+        public object Monotheistically { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nonflying")]
+        public object Nonflying { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Ptenoglossa")]
+        public object Ptenoglossa { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("repatch")]
+        public object Repatch { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("rodman")]
+        public object Rodman { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("strung")]
+        public object Strung { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("titmal")]
+        public object Titmal { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("twalpennyworth")]
+        public object Twalpennyworth { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unblamable")]
+        public object Unblamable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("vertical")]
+        public object Vertical { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Whiggification")]
+        public object Whiggification { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("yardman")]
+        public object Yardman { get; set; }
+    }
+
+    public partial record SantirClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("admiredly")]
+        public object Admiredly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("demicaponier")]
+        public object Demicaponier { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("epitympanic")]
+        public object Epitympanic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("investitor")]
+        public object Investitor { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("lupiform")]
+        public object Lupiform { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("monoflagellate")]
+        public object Monoflagellate { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("paleoethnic")]
+        public object Paleoethnic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("prediscountable")]
+        public object Prediscountable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("rhetoricals")]
+        public object Rhetoricals { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("roomth")]
+        public object Roomth { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("saccharose")]
+        public object Saccharose { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("septonasal")]
+        public object Septonasal { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("serpenticide")]
+        public object Serpenticide { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("setarious")]
+        public object Setarious { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("spaework")]
+        public object Spaework { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("stylite")]
+        public object Stylite { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Suessiones")]
+        public object Suessiones { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("timelily")]
+        public object Timelily { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unprofaned")]
+        public object Unprofaned { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("vorticular")]
+        public object Vorticular { get; set; }
+    }
+
+    public partial record SaxtenClass
+    {
+        [JsonPropertyName("algarrobilla")]
+        public object? Algarrobilla { get; set; }
+
+        [JsonPropertyName("bowgrace")]
+        public object? Bowgrace { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonPropertyName("Centaurid")]
+        public object? Centaurid { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonPropertyName("flix")]
+        public object? Flix { get; set; }
+
+        [JsonPropertyName("germanely")]
+        public object? Germanely { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonPropertyName("inhume")]
+        public object? Inhume { get; set; }
+
+        [JsonPropertyName("lepidote")]
+        public object? Lepidote { get; set; }
+
+        [JsonPropertyName("megalochirous")]
+        public object? Megalochirous { get; set; }
+
+        [JsonPropertyName("ninepenny")]
+        public object? Ninepenny { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonPropertyName("nondeist")]
+        public object? Nondeist { get; set; }
+
+        [JsonPropertyName("nymphaeaceous")]
+        public object? Nymphaeaceous { get; set; }
+
+        [JsonPropertyName("parietofrontal")]
+        public object? Parietofrontal { get; set; }
+
+        [JsonPropertyName("sancyite")]
+        public object? Sancyite { get; set; }
+
+        [JsonPropertyName("subjectivist")]
+        public object? Subjectivist { get; set; }
+
+        [JsonPropertyName("tibiad")]
+        public object? Tibiad { get; set; }
+
+        [JsonPropertyName("transonic")]
+        public object? Transonic { get; set; }
+
+        [JsonPropertyName("tripetalous")]
+        public object? Tripetalous { get; set; }
+
+        [JsonPropertyName("trunchman")]
+        public object? Trunchman { get; set; }
+
+        [JsonPropertyName("urger")]
+        public object? Urger { get; set; }
+
+        [JsonPropertyName("withdrawnness")]
+        public object? Withdrawnness { get; set; }
+    }
+
+    public partial record Scatty
+    {
+        [JsonRequired]
+        [JsonPropertyName("aeriferous")]
+        public object Aeriferous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("antical")]
+        public object Antical { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("antighostism")]
+        public object Antighostism { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("arcanum")]
+        public object Arcanum { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("autotrophy")]
+        public object Autotrophy { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("baronial")]
+        public object Baronial { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("caffeine")]
+        public object Caffeine { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("gorgoniacean")]
+        public object Gorgoniacean { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("heroical")]
+        public object Heroical { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hydropical")]
+        public object Hydropical { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("mechanology")]
+        public object Mechanology { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("musicopoetic")]
+        public object Musicopoetic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("officiality")]
+        public object Officiality { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("oftentimes")]
+        public object Oftentimes { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ophthalmotonometer")]
+        public object Ophthalmotonometer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("reflectively")]
+        public object Reflectively { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("springer")]
+        public object Springer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Tabasco")]
+        public object Tabasco { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("teleianthous")]
+        public object Teleianthous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("uncombated")]
+        public object Uncombated { get; set; }
+    }
+
+    public partial record SisteringClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("amphicarpic")]
+        public object Amphicarpic { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Chianti")]
+        public object Chianti { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("frigorific")]
+        public object Frigorific { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Haplomi")]
+        public object Haplomi { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("hyperkinesis")]
+        public object Hyperkinesis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("laudable")]
+        public object Laudable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("madwoman")]
+        public object Madwoman { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("maimedly")]
+        public object Maimedly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Micropterygidae")]
+        public object Micropterygidae { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("microrhabdus")]
+        public object Microrhabdus { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("nondense")]
+        public object Nondense { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("phlebemphraxis")]
+        public object Phlebemphraxis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("redsear")]
+        public object Redsear { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("schismatical")]
+        public object Schismatical { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("tartryl")]
+        public object Tartryl { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unabhorred")]
+        public object Unabhorred { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("undeliberateness")]
+        public object Undeliberateness { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unmixable")]
+        public object Unmixable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("untruckling")]
+        public object Untruckling { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("vineal")]
+        public object Vineal { get; set; }
+    }
+
+    public partial record Staghunting
+    {
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("calorimetric")]
+        public long? Calorimetric { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("canid")]
+        public long? Canid { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("ditriglyphic")]
+        public long? Ditriglyphic { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("floriferousness")]
+        public long? Floriferousness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("gamelike")]
+        public long? Gamelike { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("grig")]
+        public long? Grig { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("interloan")]
+        public long? Interloan { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("lithotomy")]
+        public long? Lithotomy { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("loric")]
+        public long? Loric { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("membranocoriaceous")]
+        public long? Membranocoriaceous { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("membranogenic")]
+        public long? Membranogenic { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("overtrump")]
+        public long? Overtrump { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("scotino")]
+        public long? Scotino { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("seasonable")]
+        public long? Seasonable { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("sephen")]
+        public long? Sephen { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("stigmarioid")]
+        public long? Stigmarioid { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("tired")]
+        public long? Tired { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("trifid")]
+        public long? Trifid { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("undefeatedly")]
+        public long? Undefeatedly { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("ungirlish")]
+        public long? Ungirlish { get; set; }
+    }
+
+    public partial record StrenuosityClass
+    {
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("bliss")]
+        public long? Bliss { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("buccate")]
+        public long? Buccate { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("bulletproof")]
+        public long? Bulletproof { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("crumblingness")]
+        public long? Crumblingness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("engagedly")]
+        public long? Engagedly { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("fightable")]
+        public long? Fightable { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("hoariness")]
+        public long? Hoariness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("hypopodium")]
+        public long? Hypopodium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("luxurist")]
+        public long? Luxurist { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("mechanician")]
+        public long? Mechanician { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Onopordon")]
+        public long? Onopordon { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("podgily")]
+        public long? Podgily { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("reformableness")]
+        public long? Reformableness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("scatterbrains")]
+        public long? Scatterbrains { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("seminuria")]
+        public long? Seminuria { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Sodomite")]
+        public long? Sodomite { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("tramp")]
+        public long? Tramp { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("undueness")]
+        public long? Undueness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("worthily")]
+        public long? Worthily { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Yankeeist")]
+        public long? Yankeeist { get; set; }
+    }
+
+    public partial record TruantcyClass
+    {
+        [JsonPropertyName("alfiona")]
+        public object? Alfiona { get; set; }
+
+        [JsonPropertyName("ascaridiasis")]
+        public object? Ascaridiasis { get; set; }
+
+        [JsonPropertyName("bungey")]
+        public object? Bungey { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonPropertyName("ceroxyle")]
+        public object? Ceroxyle { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonPropertyName("chorology")]
+        public object? Chorology { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonPropertyName("enmarble")]
+        public object? Enmarble { get; set; }
+
+        [JsonPropertyName("Epeira")]
+        public object? Epeira { get; set; }
+
+        [JsonPropertyName("Eurylaimi")]
+        public object? Eurylaimi { get; set; }
+
+        [JsonPropertyName("germination")]
+        public object? Germination { get; set; }
+
+        [JsonPropertyName("hallelujah")]
+        public object? Hallelujah { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonPropertyName("lev")]
+        public object? Lev { get; set; }
+
+        [JsonPropertyName("mouthing")]
+        public object? Mouthing { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonPropertyName("philliloo")]
+        public object? Philliloo { get; set; }
+
+        [JsonPropertyName("planetal")]
+        public object? Planetal { get; set; }
+
+        [JsonPropertyName("poney")]
+        public object? Poney { get; set; }
+
+        [JsonPropertyName("punctualist")]
+        public object? Punctualist { get; set; }
+
+        [JsonPropertyName("returnlessly")]
+        public object? Returnlessly { get; set; }
+
+        [JsonPropertyName("skelder")]
+        public object? Skelder { get; set; }
+
+        [JsonPropertyName("windwaywardly")]
+        public object? Windwaywardly { get; set; }
+
+        [JsonPropertyName("Yuman")]
+        public object? Yuman { get; set; }
+    }
+
+    public partial record UnimpeachablyClass
+    {
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("acerin")]
+        public long? Acerin { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Bobadil")]
+        public long? Bobadil { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("catharticalness")]
+        public double? Catharticalness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Chirotherium")]
+        public long? Chirotherium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("chlorophylligenous")]
+        public long? Chlorophylligenous { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("conversational")]
+        public long? Conversational { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("demiowl")]
+        public long? Demiowl { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("disdiapason")]
+        public string? Disdiapason { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("ectorhinal")]
+        public long? Ectorhinal { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("gamblesomeness")]
+        public long? Gamblesomeness { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("homocerc")]
+        public bool? Homocerc { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("irrorate")]
+        public long? Irrorate { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("kindergartening")]
+        public long? Kindergartening { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("lateritic")]
+        public long? Lateritic { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("mespil")]
+        public long? Mespil { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("misconfiguration")]
+        public long? Misconfiguration { get; set; }
+
+        [JsonPropertyName("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("planometry")]
+        public long? Planometry { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Quiina")]
+        public long? Quiina { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("Robert")]
+        public long? Robert { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("rot")]
+        public long? Rot { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("subcinctorium")]
+        public long? Subcinctorium { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("tussocker")]
+        public long? Tussocker { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("ultraproud")]
+        public long? Ultraproud { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("unsuggestedness")]
+        public long? Unsuggestedness { get; set; }
+    }
+
+    public partial record UnstressedClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("Alain")]
+        public object Alain { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Amphirhina")]
+        public object Amphirhina { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("antimachinery")]
+        public object Antimachinery { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("coldish")]
+        public object Coldish { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("crantara")]
+        public object Crantara { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("distinguishing")]
+        public object Distinguishing { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("elytroposis")]
+        public object Elytroposis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("gentianwort")]
+        public object Gentianwort { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("heliosis")]
+        public object Heliosis { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("instrumental")]
+        public object Instrumental { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("introinflection")]
+        public object Introinflection { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("kala")]
+        public object Kala { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Lincolnian")]
+        public object Lincolnian { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("metad")]
+        public object Metad { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Sarcophilus")]
+        public object Sarcophilus { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("swingingly")]
+        public object Swingingly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unconformity")]
+        public object Unconformity { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("undecreed")]
+        public object Undecreed { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("venerable")]
+        public object Venerable { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("vowellessness")]
+        public object Vowellessness { get; set; }
+    }
+
+    public partial record WrothyClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("Aeschynanthus")]
+        public object Aeschynanthus { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("aquiferous")]
+        public object Aquiferous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("cheapener")]
+        public object Cheapener { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("enumeration")]
+        public object Enumeration { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("Ephesine")]
+        public object Ephesine { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("escadrille")]
+        public object Escadrille { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("estrous")]
+        public object Estrous { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("interestedly")]
+        public object Interestedly { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("katakinetomer")]
+        public object Katakinetomer { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("mortification")]
+        public object Mortification { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("morula")]
+        public object Morula { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("orthosymmetrical")]
+        public object Orthosymmetrical { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("overbark")]
+        public object Overbark { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("politist")]
+        public object Politist { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("qualified")]
+        public object Qualified { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("sphenomalar")]
+        public object Sphenomalar { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("throatful")]
+        public object Throatful { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("transhumance")]
+        public object Transhumance { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("triandrian")]
+        public object Triandrian { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("unbooked")]
+        public object Unbooked { get; set; }
+    }
+
+    public partial struct Protrusive
+    {
+        public double? Double;
+        public long?[]? UnionArray;
+
+        public static implicit operator Protrusive(double Double) => new Protrusive { Double = Double };
+        public static implicit operator Protrusive(long?[] UnionArray) => new Protrusive { UnionArray = UnionArray };
+    }
+
+    public partial struct PulpitismElement
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public PulpitismClass? PulpitismClass;
+
+        public static implicit operator PulpitismElement(double Double) => new PulpitismElement { Double = Double };
+        public static implicit operator PulpitismElement(long[] IntegerArray) => new PulpitismElement { IntegerArray = IntegerArray };
+        public static implicit operator PulpitismElement(PulpitismClass PulpitismClass) => new PulpitismElement { PulpitismClass = PulpitismClass };
+    }
+
+    public partial struct PyodermiaElement
+    {
+        public long? Integer;
+        public PyodermiaClass? PyodermiaClass;
+
+        public static implicit operator PyodermiaElement(long Integer) => new PyodermiaElement { Integer = Integer };
+        public static implicit operator PyodermiaElement(PyodermiaClass PyodermiaClass) => new PyodermiaElement { PyodermiaClass = PyodermiaClass };
+    }
+
+    public partial struct QuebrachineElement
+    {
+        public bool? Bool;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator QuebrachineElement(bool Bool) => new QuebrachineElement { Bool = Bool };
+        public static implicit operator QuebrachineElement(QuebrachineClass QuebrachineClass) => new QuebrachineElement { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => Bool == null && QuebrachineClass == null;
+    }
+
+    public partial struct Querier
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Querier(bool Bool) => new Querier { Bool = Bool };
+        public static implicit operator Querier(Dictionary<string, long> IntegerMap) => new Querier { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Rebarbative
+    {
+        public bool? Bool;
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Rebarbative(bool Bool) => new Rebarbative { Bool = Bool };
+        public static implicit operator Rebarbative(double Double) => new Rebarbative { Double = Double };
+        public static implicit operator Rebarbative(long[] IntegerArray) => new Rebarbative { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Retrocervical
+    {
+        public long? Integer;
+        public long?[]? UnionArray;
+
+        public static implicit operator Retrocervical(long Integer) => new Retrocervical { Integer = Integer };
+        public static implicit operator Retrocervical(long?[] UnionArray) => new Retrocervical { UnionArray = UnionArray };
+    }
+
+    public partial struct Revert
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Revert(bool Bool) => new Revert { Bool = Bool };
+        public static implicit operator Revert(string String) => new Revert { String = String };
+    }
+
+    public partial struct RewriteElement
+    {
+        public double? Double;
+        public object[]? NullArray;
+        public RewriteClass? RewriteClass;
+
+        public static implicit operator RewriteElement(double Double) => new RewriteElement { Double = Double };
+        public static implicit operator RewriteElement(object[] NullArray) => new RewriteElement { NullArray = NullArray };
+        public static implicit operator RewriteElement(RewriteClass RewriteClass) => new RewriteElement { RewriteClass = RewriteClass };
+    }
+
+    public partial struct Saccoderm
+    {
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Saccoderm(long[] IntegerArray) => new Saccoderm { IntegerArray = IntegerArray };
+        public static implicit operator Saccoderm(string String) => new Saccoderm { String = String };
+        public bool IsNull => IntegerArray == null && String == null;
+    }
+
+    public partial struct SantirElement
+    {
+        public double? Double;
+        public SantirClass? SantirClass;
+
+        public static implicit operator SantirElement(double Double) => new SantirElement { Double = Double };
+        public static implicit operator SantirElement(SantirClass SantirClass) => new SantirElement { SantirClass = SantirClass };
+    }
+
+    public partial struct Saprophilous
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Saprophilous(Dictionary<string, long> IntegerMap) => new Saprophilous { IntegerMap = IntegerMap };
+        public static implicit operator Saprophilous(string String) => new Saprophilous { String = String };
+        public bool IsNull => IntegerMap == null && String == null;
+    }
+
+    public partial struct SaxtenElement
+    {
+        public SaxtenClass? SaxtenClass;
+        public string? String;
+
+        public static implicit operator SaxtenElement(SaxtenClass SaxtenClass) => new SaxtenElement { SaxtenClass = SaxtenClass };
+        public static implicit operator SaxtenElement(string String) => new SaxtenElement { String = String };
+    }
+
+    public partial struct Scoffer
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Scoffer(Dictionary<string, long> IntegerMap) => new Scoffer { IntegerMap = IntegerMap };
+        public static implicit operator Scoffer(object[] NullArray) => new Scoffer { NullArray = NullArray };
+        public bool IsNull => NullArray == null && IntegerMap == null;
+    }
+
+    public partial struct Scrampum
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+
+        public static implicit operator Scrampum(bool Bool) => new Scrampum { Bool = Bool };
+        public static implicit operator Scrampum(long[] IntegerArray) => new Scrampum { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Bool == null;
+    }
+
+    public partial struct Serpentinic
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Serpentinic(double Double) => new Serpentinic { Double = Double };
+        public static implicit operator Serpentinic(long[] IntegerArray) => new Serpentinic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Shadowable
+    {
+        public bool? Bool;
+        public long?[]? UnionArray;
+
+        public static implicit operator Shadowable(bool Bool) => new Shadowable { Bool = Bool };
+        public static implicit operator Shadowable(long?[] UnionArray) => new Shadowable { UnionArray = UnionArray };
+    }
+
+    public partial struct SisteringElement
+    {
+        public long? Integer;
+        public object[]? NullArray;
+        public SisteringClass? SisteringClass;
+
+        public static implicit operator SisteringElement(long Integer) => new SisteringElement { Integer = Integer };
+        public static implicit operator SisteringElement(object[] NullArray) => new SisteringElement { NullArray = NullArray };
+        public static implicit operator SisteringElement(SisteringClass SisteringClass) => new SisteringElement { SisteringClass = SisteringClass };
+    }
+
+    public partial struct Stagmometer
+    {
+        public string? String;
+        public long?[]? UnionArray;
+
+        public static implicit operator Stagmometer(string String) => new Stagmometer { String = String };
+        public static implicit operator Stagmometer(long?[] UnionArray) => new Stagmometer { UnionArray = UnionArray };
+    }
+
+    public partial struct Stimulability
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Stimulability(bool Bool) => new Stimulability { Bool = Bool };
+        public static implicit operator Stimulability(long Integer) => new Stimulability { Integer = Integer };
+        public static implicit operator Stimulability(Dictionary<string, long> IntegerMap) => new Stimulability { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Strangleable
+    {
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Strangleable(double Double) => new Strangleable { Double = Double };
+        public static implicit operator Strangleable(object[] NullArray) => new Strangleable { NullArray = NullArray };
+    }
+
+    public partial struct StrenuosityElement
+    {
+        public object[]? NullArray;
+        public StrenuosityClass? StrenuosityClass;
+
+        public static implicit operator StrenuosityElement(object[] NullArray) => new StrenuosityElement { NullArray = NullArray };
+        public static implicit operator StrenuosityElement(StrenuosityClass StrenuosityClass) => new StrenuosityElement { StrenuosityClass = StrenuosityClass };
+    }
+
+    public partial struct Tabaxir
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Tabaxir(bool Bool) => new Tabaxir { Bool = Bool };
+        public static implicit operator Tabaxir(double Double) => new Tabaxir { Double = Double };
+    }
+
+    public partial struct Talpiform
+    {
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Talpiform(double Double) => new Talpiform { Double = Double };
+        public static implicit operator Talpiform(QuebrachineClass QuebrachineClass) => new Talpiform { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Double == null;
+    }
+
+    public partial struct Thwack
+    {
+        public bool? Bool;
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Thwack(bool Bool) => new Thwack { Bool = Bool };
+        public static implicit operator Thwack(double Double) => new Thwack { Double = Double };
+        public static implicit operator Thwack(QuebrachineClass QuebrachineClass) => new Thwack { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct Tortricine
+    {
+        public QuebrachineClass? QuebrachineClass;
+        public long?[]? UnionArray;
+
+        public static implicit operator Tortricine(QuebrachineClass QuebrachineClass) => new Tortricine { QuebrachineClass = QuebrachineClass };
+        public static implicit operator Tortricine(long?[] UnionArray) => new Tortricine { UnionArray = UnionArray };
+    }
+
+    public partial struct TruantcyElement
+    {
+        public bool? Bool;
+        public TruantcyClass? TruantcyClass;
+
+        public static implicit operator TruantcyElement(bool Bool) => new TruantcyElement { Bool = Bool };
+        public static implicit operator TruantcyElement(TruantcyClass TruantcyClass) => new TruantcyElement { TruantcyClass = TruantcyClass };
+    }
+
+    public partial struct Unbeginning
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Unbeginning(Dictionary<string, long> IntegerMap) => new Unbeginning { IntegerMap = IntegerMap };
+        public static implicit operator Unbeginning(object[] NullArray) => new Unbeginning { NullArray = NullArray };
+        public static implicit operator Unbeginning(string String) => new Unbeginning { String = String };
+    }
+
+    public partial struct Undesirability
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Undesirability(long[] IntegerArray) => new Undesirability { IntegerArray = IntegerArray };
+        public static implicit operator Undesirability(Dictionary<string, long> IntegerMap) => new Undesirability { IntegerMap = IntegerMap };
+        public static implicit operator Undesirability(string String) => new Undesirability { String = String };
+    }
+
+    public partial struct Unerasing
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Unerasing(long Integer) => new Unerasing { Integer = Integer };
+        public static implicit operator Unerasing(Dictionary<string, long> IntegerMap) => new Unerasing { IntegerMap = IntegerMap };
+        public static implicit operator Unerasing(object[] NullArray) => new Unerasing { NullArray = NullArray };
+    }
+
+    public partial struct Unguentarium
+    {
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Unguentarium(long Integer) => new Unguentarium { Integer = Integer };
+        public static implicit operator Unguentarium(object[] NullArray) => new Unguentarium { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Integer == null;
+    }
+
+    public partial struct UnimpeachablyElement
+    {
+        public bool? Bool;
+        public UnimpeachablyClass? UnimpeachablyClass;
+
+        public static implicit operator UnimpeachablyElement(bool Bool) => new UnimpeachablyElement { Bool = Bool };
+        public static implicit operator UnimpeachablyElement(UnimpeachablyClass UnimpeachablyClass) => new UnimpeachablyElement { UnimpeachablyClass = UnimpeachablyClass };
+    }
+
+    public partial struct Unmortgaged
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unmortgaged(double Double) => new Unmortgaged { Double = Double };
+        public static implicit operator Unmortgaged(Dictionary<string, long> IntegerMap) => new Unmortgaged { IntegerMap = IntegerMap };
+        public bool IsNull => Double == null && IntegerMap == null;
+    }
+
+    public partial struct Unobstructed
+    {
+        public long? Integer;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Unobstructed(long Integer) => new Unobstructed { Integer = Integer };
+        public static implicit operator Unobstructed(QuebrachineClass QuebrachineClass) => new Unobstructed { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Integer == null;
+    }
+
+    public partial struct Unreceptivity
+    {
+        public long? Integer;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Unreceptivity(long Integer) => new Unreceptivity { Integer = Integer };
+        public static implicit operator Unreceptivity(object[] NullArray) => new Unreceptivity { NullArray = NullArray };
+        public static implicit operator Unreceptivity(string String) => new Unreceptivity { String = String };
+    }
+
+    public partial struct Unsatisfactoriness
+    {
+        public bool? Bool;
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Unsatisfactoriness(bool Bool) => new Unsatisfactoriness { Bool = Bool };
+        public static implicit operator Unsatisfactoriness(long Integer) => new Unsatisfactoriness { Integer = Integer };
+        public static implicit operator Unsatisfactoriness(long[] IntegerArray) => new Unsatisfactoriness { IntegerArray = IntegerArray };
+    }
+
+    public partial struct UnstressedElement
+    {
+        public bool? Bool;
+        public string? String;
+        public UnstressedClass? UnstressedClass;
+
+        public static implicit operator UnstressedElement(bool Bool) => new UnstressedElement { Bool = Bool };
+        public static implicit operator UnstressedElement(string String) => new UnstressedElement { String = String };
+        public static implicit operator UnstressedElement(UnstressedClass UnstressedClass) => new UnstressedElement { UnstressedClass = UnstressedClass };
+    }
+
+    public partial struct Untasked
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Untasked(double Double) => new Untasked { Double = Double };
+        public static implicit operator Untasked(Dictionary<string, long> IntegerMap) => new Untasked { IntegerMap = IntegerMap };
+        public static implicit operator Untasked(object[] NullArray) => new Untasked { NullArray = NullArray };
+    }
+
+    public partial struct Unvarying
+    {
+        public bool? Bool;
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unvarying(bool Bool) => new Unvarying { Bool = Bool };
+        public static implicit operator Unvarying(double Double) => new Unvarying { Double = Double };
+        public static implicit operator Unvarying(Dictionary<string, long> IntegerMap) => new Unvarying { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Vehemently
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+
+        public static implicit operator Vehemently(bool Bool) => new Vehemently { Bool = Bool };
+        public static implicit operator Vehemently(object[] NullArray) => new Vehemently { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Bool == null;
+    }
+
+    public partial struct Whitepot
+    {
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Whitepot(double Double) => new Whitepot { Double = Double };
+        public static implicit operator Whitepot(QuebrachineClass QuebrachineClass) => new Whitepot { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct WrothyElement
+    {
+        public object[]? NullArray;
+        public WrothyClass? WrothyClass;
+
+        public static implicit operator WrothyElement(object[] NullArray) => new WrothyElement { NullArray = NullArray };
+        public static implicit operator WrothyElement(WrothyClass WrothyClass) => new WrothyElement { WrothyClass = WrothyClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonSerializer.Deserialize<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonSerializer.Serialize(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)
+        {
+            Converters =
+            {
+                ProtrusiveConverter.Singleton,
+                PulpitismElementConverter.Singleton,
+                PyodermiaElementConverter.Singleton,
+                QuebrachineElementConverter.Singleton,
+                QuerierConverter.Singleton,
+                RebarbativeConverter.Singleton,
+                RetrocervicalConverter.Singleton,
+                RevertConverter.Singleton,
+                RewriteElementConverter.Singleton,
+                SaccodermConverter.Singleton,
+                SantirElementConverter.Singleton,
+                SaprophilousConverter.Singleton,
+                SaxtenElementConverter.Singleton,
+                ScofferConverter.Singleton,
+                ScrampumConverter.Singleton,
+                SerpentinicConverter.Singleton,
+                ShadowableConverter.Singleton,
+                SisteringElementConverter.Singleton,
+                StagmometerConverter.Singleton,
+                StimulabilityConverter.Singleton,
+                StrangleableConverter.Singleton,
+                StrenuosityElementConverter.Singleton,
+                TabaxirConverter.Singleton,
+                TalpiformConverter.Singleton,
+                ThwackConverter.Singleton,
+                TortricineConverter.Singleton,
+                TruantcyElementConverter.Singleton,
+                UnbeginningConverter.Singleton,
+                UndesirabilityConverter.Singleton,
+                UnerasingConverter.Singleton,
+                UnguentariumConverter.Singleton,
+                UnimpeachablyElementConverter.Singleton,
+                UnmortgagedConverter.Singleton,
+                UnobstructedConverter.Singleton,
+                UnreceptivityConverter.Singleton,
+                UnsatisfactorinessConverter.Singleton,
+                UnstressedElementConverter.Singleton,
+                UntaskedConverter.Singleton,
+                UnvaryingConverter.Singleton,
+                VehementlyConverter.Singleton,
+                WhitepotConverter.Singleton,
+                WrothyElementConverter.Singleton,
+                new DateOnlyConverter(),
+                new TimeOnlyConverter(),
+                IsoDateTimeOffsetConverter.Singleton
+            },
+        };
+    }
+
+    internal class ProtrusiveConverter : JsonConverter<Protrusive>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protrusive);
+
+        public override Protrusive Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Protrusive { Double = doubleValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long?[]>(ref reader, options);
+                    return new Protrusive { UnionArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Protrusive");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Protrusive value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Protrusive");
+        }
+
+        public static readonly ProtrusiveConverter Singleton = new ProtrusiveConverter();
+    }
+
+    internal class PulpitismElementConverter : JsonConverter<PulpitismElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(PulpitismElement);
+
+        public override PulpitismElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new PulpitismElement { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<PulpitismClass>(ref reader, options);
+                    return new PulpitismElement { PulpitismClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new PulpitismElement { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type PulpitismElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, PulpitismElement value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.PulpitismClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.PulpitismClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type PulpitismElement");
+        }
+
+        public static readonly PulpitismElementConverter Singleton = new PulpitismElementConverter();
+    }
+
+    internal class PyodermiaElementConverter : JsonConverter<PyodermiaElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(PyodermiaElement);
+
+        public override PyodermiaElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new PyodermiaElement { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<PyodermiaClass>(ref reader, options);
+                    return new PyodermiaElement { PyodermiaClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type PyodermiaElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, PyodermiaElement value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.PyodermiaClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.PyodermiaClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type PyodermiaElement");
+        }
+
+        public static readonly PyodermiaElementConverter Singleton = new PyodermiaElementConverter();
+    }
+
+    internal class QuebrachineElementConverter : JsonConverter<QuebrachineElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(QuebrachineElement);
+
+        public override QuebrachineElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new QuebrachineElement { };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new QuebrachineElement { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<QuebrachineClass>(ref reader, options);
+                    return new QuebrachineElement { QuebrachineClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type QuebrachineElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, QuebrachineElement value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.QuebrachineClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type QuebrachineElement");
+        }
+
+        public static readonly QuebrachineElementConverter Singleton = new QuebrachineElementConverter();
+    }
+
+    internal class QuerierConverter : JsonConverter<Querier>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Querier);
+
+        public override Querier Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Querier { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Querier { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Querier");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Querier value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Querier");
+        }
+
+        public static readonly QuerierConverter Singleton = new QuerierConverter();
+    }
+
+    internal class RebarbativeConverter : JsonConverter<Rebarbative>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rebarbative);
+
+        public override Rebarbative Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Rebarbative { Double = doubleValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Rebarbative { Bool = boolValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Rebarbative { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Rebarbative");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Rebarbative value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Rebarbative");
+        }
+
+        public static readonly RebarbativeConverter Singleton = new RebarbativeConverter();
+    }
+
+    internal class RetrocervicalConverter : JsonConverter<Retrocervical>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Retrocervical);
+
+        public override Retrocervical Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Retrocervical { Integer = intValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long?[]>(ref reader, options);
+                    return new Retrocervical { UnionArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Retrocervical");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Retrocervical value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Retrocervical");
+        }
+
+        public static readonly RetrocervicalConverter Singleton = new RetrocervicalConverter();
+    }
+
+    internal class RevertConverter : JsonConverter<Revert>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Revert);
+
+        public override Revert Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Revert { Bool = boolValue };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Revert { String = stringValue };
+            }
+            throw new JsonException("Cannot unmarshal type Revert");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Revert value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Revert");
+        }
+
+        public static readonly RevertConverter Singleton = new RevertConverter();
+    }
+
+    internal class RewriteElementConverter : JsonConverter<RewriteElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(RewriteElement);
+
+        public override RewriteElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new RewriteElement { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<RewriteClass>(ref reader, options);
+                    return new RewriteElement { RewriteClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new RewriteElement { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type RewriteElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, RewriteElement value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.RewriteClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.RewriteClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type RewriteElement");
+        }
+
+        public static readonly RewriteElementConverter Singleton = new RewriteElementConverter();
+    }
+
+    internal class SaccodermConverter : JsonConverter<Saccoderm>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saccoderm);
+
+        public override Saccoderm Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Saccoderm { };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Saccoderm { String = stringValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Saccoderm { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Saccoderm");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Saccoderm value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Saccoderm");
+        }
+
+        public static readonly SaccodermConverter Singleton = new SaccodermConverter();
+    }
+
+    internal class SantirElementConverter : JsonConverter<SantirElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(SantirElement);
+
+        public override SantirElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new SantirElement { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<SantirClass>(ref reader, options);
+                    return new SantirElement { SantirClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type SantirElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, SantirElement value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.SantirClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.SantirClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type SantirElement");
+        }
+
+        public static readonly SantirElementConverter Singleton = new SantirElementConverter();
+    }
+
+    internal class SaprophilousConverter : JsonConverter<Saprophilous>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saprophilous);
+
+        public override Saprophilous Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Saprophilous { };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Saprophilous { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Saprophilous { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Saprophilous");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Saprophilous value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Saprophilous");
+        }
+
+        public static readonly SaprophilousConverter Singleton = new SaprophilousConverter();
+    }
+
+    internal class SaxtenElementConverter : JsonConverter<SaxtenElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(SaxtenElement);
+
+        public override SaxtenElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new SaxtenElement { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<SaxtenClass>(ref reader, options);
+                    return new SaxtenElement { SaxtenClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type SaxtenElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, SaxtenElement value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.SaxtenClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.SaxtenClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type SaxtenElement");
+        }
+
+        public static readonly SaxtenElementConverter Singleton = new SaxtenElementConverter();
+    }
+
+    internal class ScofferConverter : JsonConverter<Scoffer>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scoffer);
+
+        public override Scoffer Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Scoffer { };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Scoffer { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Scoffer { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Scoffer");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Scoffer value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Scoffer");
+        }
+
+        public static readonly ScofferConverter Singleton = new ScofferConverter();
+    }
+
+    internal class ScrampumConverter : JsonConverter<Scrampum>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scrampum);
+
+        public override Scrampum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Scrampum { };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Scrampum { Bool = boolValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Scrampum { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Scrampum");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Scrampum value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Scrampum");
+        }
+
+        public static readonly ScrampumConverter Singleton = new ScrampumConverter();
+    }
+
+    internal class SerpentinicConverter : JsonConverter<Serpentinic>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Serpentinic);
+
+        public override Serpentinic Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Serpentinic { Double = doubleValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Serpentinic { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Serpentinic");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Serpentinic value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Serpentinic");
+        }
+
+        public static readonly SerpentinicConverter Singleton = new SerpentinicConverter();
+    }
+
+    internal class ShadowableConverter : JsonConverter<Shadowable>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shadowable);
+
+        public override Shadowable Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Shadowable { Bool = boolValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long?[]>(ref reader, options);
+                    return new Shadowable { UnionArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Shadowable");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Shadowable value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Shadowable");
+        }
+
+        public static readonly ShadowableConverter Singleton = new ShadowableConverter();
+    }
+
+    internal class SisteringElementConverter : JsonConverter<SisteringElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(SisteringElement);
+
+        public override SisteringElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new SisteringElement { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<SisteringClass>(ref reader, options);
+                    return new SisteringElement { SisteringClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new SisteringElement { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type SisteringElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, SisteringElement value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.SisteringClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.SisteringClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type SisteringElement");
+        }
+
+        public static readonly SisteringElementConverter Singleton = new SisteringElementConverter();
+    }
+
+    internal class StagmometerConverter : JsonConverter<Stagmometer>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stagmometer);
+
+        public override Stagmometer Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Stagmometer { String = stringValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long?[]>(ref reader, options);
+                    return new Stagmometer { UnionArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Stagmometer");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Stagmometer value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Stagmometer");
+        }
+
+        public static readonly StagmometerConverter Singleton = new StagmometerConverter();
+    }
+
+    internal class StimulabilityConverter : JsonConverter<Stimulability>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stimulability);
+
+        public override Stimulability Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Stimulability { Integer = intValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Stimulability { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Stimulability { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Stimulability");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Stimulability value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Stimulability");
+        }
+
+        public static readonly StimulabilityConverter Singleton = new StimulabilityConverter();
+    }
+
+    internal class StrangleableConverter : JsonConverter<Strangleable>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Strangleable);
+
+        public override Strangleable Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Strangleable { Double = doubleValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Strangleable { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Strangleable");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Strangleable value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Strangleable");
+        }
+
+        public static readonly StrangleableConverter Singleton = new StrangleableConverter();
+    }
+
+    internal class StrenuosityElementConverter : JsonConverter<StrenuosityElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(StrenuosityElement);
+
+        public override StrenuosityElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<StrenuosityClass>(ref reader, options);
+                    return new StrenuosityElement { StrenuosityClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new StrenuosityElement { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type StrenuosityElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, StrenuosityElement value, JsonSerializerOptions options)
+        {
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.StrenuosityClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.StrenuosityClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type StrenuosityElement");
+        }
+
+        public static readonly StrenuosityElementConverter Singleton = new StrenuosityElementConverter();
+    }
+
+    internal class TabaxirConverter : JsonConverter<Tabaxir>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tabaxir);
+
+        public override Tabaxir Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Tabaxir { Double = doubleValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Tabaxir { Bool = boolValue };
+            }
+            throw new JsonException("Cannot unmarshal type Tabaxir");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Tabaxir value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Tabaxir");
+        }
+
+        public static readonly TabaxirConverter Singleton = new TabaxirConverter();
+    }
+
+    internal class TalpiformConverter : JsonConverter<Talpiform>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Talpiform);
+
+        public override Talpiform Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Talpiform { };
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Talpiform { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<QuebrachineClass>(ref reader, options);
+                    return new Talpiform { QuebrachineClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Talpiform");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Talpiform value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.QuebrachineClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Talpiform");
+        }
+
+        public static readonly TalpiformConverter Singleton = new TalpiformConverter();
+    }
+
+    internal class ThwackConverter : JsonConverter<Thwack>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Thwack);
+
+        public override Thwack Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Thwack { Double = doubleValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Thwack { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<QuebrachineClass>(ref reader, options);
+                    return new Thwack { QuebrachineClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Thwack");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Thwack value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.QuebrachineClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Thwack");
+        }
+
+        public static readonly ThwackConverter Singleton = new ThwackConverter();
+    }
+
+    internal class TortricineConverter : JsonConverter<Tortricine>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tortricine);
+
+        public override Tortricine Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<QuebrachineClass>(ref reader, options);
+                    return new Tortricine { QuebrachineClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long?[]>(ref reader, options);
+                    return new Tortricine { UnionArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Tortricine");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Tortricine value, JsonSerializerOptions options)
+        {
+            if (value.UnionArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnionArray, options);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.QuebrachineClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Tortricine");
+        }
+
+        public static readonly TortricineConverter Singleton = new TortricineConverter();
+    }
+
+    internal class TruantcyElementConverter : JsonConverter<TruantcyElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(TruantcyElement);
+
+        public override TruantcyElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new TruantcyElement { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<TruantcyClass>(ref reader, options);
+                    return new TruantcyElement { TruantcyClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type TruantcyElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, TruantcyElement value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.TruantcyClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.TruantcyClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type TruantcyElement");
+        }
+
+        public static readonly TruantcyElementConverter Singleton = new TruantcyElementConverter();
+    }
+
+    internal class UnbeginningConverter : JsonConverter<Unbeginning>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unbeginning);
+
+        public override Unbeginning Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Unbeginning { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Unbeginning { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Unbeginning { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Unbeginning");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Unbeginning value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Unbeginning");
+        }
+
+        public static readonly UnbeginningConverter Singleton = new UnbeginningConverter();
+    }
+
+    internal class UndesirabilityConverter : JsonConverter<Undesirability>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Undesirability);
+
+        public override Undesirability Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Undesirability { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Undesirability { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Undesirability { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Undesirability");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Undesirability value, JsonSerializerOptions options)
+        {
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Undesirability");
+        }
+
+        public static readonly UndesirabilityConverter Singleton = new UndesirabilityConverter();
+    }
+
+    internal class UnerasingConverter : JsonConverter<Unerasing>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unerasing);
+
+        public override Unerasing Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Unerasing { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Unerasing { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Unerasing { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Unerasing");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Unerasing value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Unerasing");
+        }
+
+        public static readonly UnerasingConverter Singleton = new UnerasingConverter();
+    }
+
+    internal class UnguentariumConverter : JsonConverter<Unguentarium>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unguentarium);
+
+        public override Unguentarium Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Unguentarium { };
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Unguentarium { Integer = intValue1 };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Unguentarium { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Unguentarium");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Unguentarium value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Unguentarium");
+        }
+
+        public static readonly UnguentariumConverter Singleton = new UnguentariumConverter();
+    }
+
+    internal class UnimpeachablyElementConverter : JsonConverter<UnimpeachablyElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnimpeachablyElement);
+
+        public override UnimpeachablyElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new UnimpeachablyElement { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<UnimpeachablyClass>(ref reader, options);
+                    return new UnimpeachablyElement { UnimpeachablyClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type UnimpeachablyElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, UnimpeachablyElement value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.UnimpeachablyClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnimpeachablyClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type UnimpeachablyElement");
+        }
+
+        public static readonly UnimpeachablyElementConverter Singleton = new UnimpeachablyElementConverter();
+    }
+
+    internal class UnmortgagedConverter : JsonConverter<Unmortgaged>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unmortgaged);
+
+        public override Unmortgaged Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Unmortgaged { };
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Unmortgaged { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Unmortgaged { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Unmortgaged");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Unmortgaged value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Unmortgaged");
+        }
+
+        public static readonly UnmortgagedConverter Singleton = new UnmortgagedConverter();
+    }
+
+    internal class UnobstructedConverter : JsonConverter<Unobstructed>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unobstructed);
+
+        public override Unobstructed Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Unobstructed { };
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Unobstructed { Integer = intValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<QuebrachineClass>(ref reader, options);
+                    return new Unobstructed { QuebrachineClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Unobstructed");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Unobstructed value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.QuebrachineClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Unobstructed");
+        }
+
+        public static readonly UnobstructedConverter Singleton = new UnobstructedConverter();
+    }
+
+    internal class UnreceptivityConverter : JsonConverter<Unreceptivity>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unreceptivity);
+
+        public override Unreceptivity Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Unreceptivity { Integer = intValue1 };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new Unreceptivity { String = stringValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Unreceptivity { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Unreceptivity");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Unreceptivity value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Unreceptivity");
+        }
+
+        public static readonly UnreceptivityConverter Singleton = new UnreceptivityConverter();
+    }
+
+    internal class UnsatisfactorinessConverter : JsonConverter<Unsatisfactoriness>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unsatisfactoriness);
+
+        public override Unsatisfactoriness Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var intValue1 = reader.GetInt64();
+                    return new Unsatisfactoriness { Integer = intValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Unsatisfactoriness { Bool = boolValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<long[]>(ref reader, options);
+                    return new Unsatisfactoriness { IntegerArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Unsatisfactoriness");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Unsatisfactoriness value, JsonSerializerOptions options)
+        {
+            if (value.Integer != null)
+            {
+                JsonSerializer.Serialize(writer, value.Integer.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Unsatisfactoriness");
+        }
+
+        public static readonly UnsatisfactorinessConverter Singleton = new UnsatisfactorinessConverter();
+    }
+
+    internal class UnstressedElementConverter : JsonConverter<UnstressedElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnstressedElement);
+
+        public override UnstressedElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new UnstressedElement { Bool = boolValue };
+                case JsonTokenType.String:
+                    var stringValue = reader.GetString();
+                    return new UnstressedElement { String = stringValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<UnstressedClass>(ref reader, options);
+                    return new UnstressedElement { UnstressedClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type UnstressedElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, UnstressedElement value, JsonSerializerOptions options)
+        {
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.String != null)
+            {
+                JsonSerializer.Serialize(writer, value.String, options);
+                return;
+            }
+            if (value.UnstressedClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnstressedClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type UnstressedElement");
+        }
+
+        public static readonly UnstressedElementConverter Singleton = new UnstressedElementConverter();
+    }
+
+    internal class UntaskedConverter : JsonConverter<Untasked>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Untasked);
+
+        public override Untasked Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Untasked { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Untasked { IntegerMap = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Untasked { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Untasked");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Untasked value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Untasked");
+        }
+
+        public static readonly UntaskedConverter Singleton = new UntaskedConverter();
+    }
+
+    internal class UnvaryingConverter : JsonConverter<Unvarying>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unvarying);
+
+        public override Unvarying Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Unvarying { Double = doubleValue1 };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Unvarying { Bool = boolValue };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<Dictionary<string, long>>(ref reader, options);
+                    return new Unvarying { IntegerMap = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Unvarying");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Unvarying value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                JsonSerializer.Serialize(writer, value.IntegerMap, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Unvarying");
+        }
+
+        public static readonly UnvaryingConverter Singleton = new UnvaryingConverter();
+    }
+
+    internal class VehementlyConverter : JsonConverter<Vehemently>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Vehemently);
+
+        public override Vehemently Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Null:
+                    return new Vehemently { };
+                case JsonTokenType.True:
+                case JsonTokenType.False:
+                    var boolValue = reader.GetBoolean();
+                    return new Vehemently { Bool = boolValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new Vehemently { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type Vehemently");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Vehemently value, JsonSerializerOptions options)
+        {
+            if (value.IsNull)
+            {
+                writer.WriteNullValue();
+                return;
+            }
+            if (value.Bool != null)
+            {
+                JsonSerializer.Serialize(writer, value.Bool.Value, options);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Vehemently");
+        }
+
+        public static readonly VehementlyConverter Singleton = new VehementlyConverter();
+    }
+
+    internal class WhitepotConverter : JsonConverter<Whitepot>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Whitepot);
+
+        public override Whitepot Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new Whitepot { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<QuebrachineClass>(ref reader, options);
+                    return new Whitepot { QuebrachineClass = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type Whitepot");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Whitepot value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.QuebrachineClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type Whitepot");
+        }
+
+        public static readonly WhitepotConverter Singleton = new WhitepotConverter();
+    }
+
+    internal class WrothyElementConverter : JsonConverter<WrothyElement>
+    {
+        public override bool CanConvert(Type t) => t == typeof(WrothyElement);
+
+        public override WrothyElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<WrothyClass>(ref reader, options);
+                    return new WrothyElement { WrothyClass = objectValue };
+                case JsonTokenType.StartArray:
+                    var arrayValue = JsonSerializer.Deserialize<object[]>(ref reader, options);
+                    return new WrothyElement { NullArray = arrayValue };
+            }
+            throw new JsonException("Cannot unmarshal type WrothyElement");
+        }
+
+        public override void Write(Utf8JsonWriter writer, WrothyElement value, JsonSerializerOptions options)
+        {
+            if (value.NullArray != null)
+            {
+                JsonSerializer.Serialize(writer, value.NullArray, options);
+                return;
+            }
+            if (value.WrothyClass != null)
+            {
+                JsonSerializer.Serialize(writer, value.WrothyClass, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type WrothyElement");
+        }
+
+        public static readonly WrothyElementConverter Singleton = new WrothyElementConverter();
+    }
+    
+    public class DateOnlyConverter : JsonConverter<DateOnly>
+    {
+        private readonly string serializationFormat;
+        public DateOnlyConverter() : this(null) { }
+
+        public DateOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "yyyy-MM-dd";
+        }
+
+        public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return DateOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    public class TimeOnlyConverter : JsonConverter<TimeOnly>
+    {
+        private readonly string serializationFormat;
+
+        public TimeOnlyConverter() : this(null) { }
+
+        public TimeOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff";
+        }
+
+        public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return TimeOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    internal class IsoDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
+    {
+        public override bool CanConvert(Type t) => t == typeof(DateTimeOffset);
+
+        private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
+
+        private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind;
+        private string? _dateTimeFormat;
+        private CultureInfo? _culture;
+
+        public DateTimeStyles DateTimeStyles
+        {
+                get => _dateTimeStyles;
+                set => _dateTimeStyles = value;
+        }
+
+        public string? DateTimeFormat
+        {
+                get => _dateTimeFormat ?? string.Empty;
+                set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value;
+        }
+
+        public CultureInfo Culture
+        {
+                get => _culture ?? CultureInfo.CurrentCulture;
+                set => _culture = value;
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
+        {
+                string text;
+
+
+                if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal
+                        || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal)
+                {
+                        value = value.ToUniversalTime();
+                }
+
+                text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture);
+
+                writer.WriteStringValue(text);
+        }
+
+        public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                string? dateText = reader.GetString();
+
+                if (string.IsNullOrEmpty(dateText) == false)
+                {
+                        if (!string.IsNullOrEmpty(_dateTimeFormat))
+                        {
+                                return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles);
+                        }
+                        else
+                        {
+                                return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles);
+                        }
+                }
+                else
+                {
+                        return default(DateTimeOffset);
+                }
+        }
+
+
+        public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
diff --git a/head/csharp-records/test/inputs/json/misc/00c36.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/00c36.json/default/QuickType.cs
new file mode 100644
index 0000000..32c8a8e
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/00c36.json/default/QuickType.cs
@@ -0,0 +1,266 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record PurpleTopLevel
+    {
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Date { get; set; }
+
+        [JsonProperty("decimal", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Decimal { get; set; }
+
+        [JsonProperty("indicator", Required = Required.Always)]
+        public Country Indicator { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record Country
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public Id Id { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public Value Value { get; set; }
+    }
+
+    public partial record FluffyTopLevel
+    {
+        [JsonProperty("page", Required = Required.Always)]
+        public long Page { get; set; }
+
+        [JsonProperty("pages", Required = Required.Always)]
+        public long Pages { get; set; }
+
+        [JsonProperty("per_page", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long PerPage { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+    }
+
+    public enum Id { Us, NyGdpMktpCd };
+
+    public enum Value { UnitedStates, GdpCurrentUs };
+
+    public partial struct TopLevelUnion
+    {
+        public FluffyTopLevel? FluffyTopLevel;
+        public PurpleTopLevel[]? PurpleTopLevelArray;
+
+        public static implicit operator TopLevelUnion(FluffyTopLevel FluffyTopLevel) => new TopLevelUnion { FluffyTopLevel = FluffyTopLevel };
+        public static implicit operator TopLevelUnion(PurpleTopLevel[] PurpleTopLevelArray) => new TopLevelUnion { PurpleTopLevelArray = PurpleTopLevelArray };
+    }
+
+    public class TopLevel
+    {
+        public static TopLevelUnion[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevelUnion[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevelUnion[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TopLevelUnionConverter.Singleton,
+                IdConverter.Singleton,
+                ValueConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TopLevelUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TopLevelUnion) || t == typeof(TopLevelUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FluffyTopLevel>(reader);
+                    return new TopLevelUnion { FluffyTopLevel = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<PurpleTopLevel[]>(reader);
+                    return new TopLevelUnion { PurpleTopLevelArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type TopLevelUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TopLevelUnion)untypedValue;
+            if (value.PurpleTopLevelArray != null)
+            {
+                serializer.Serialize(writer, value.PurpleTopLevelArray);
+                return;
+            }
+            if (value.FluffyTopLevel != null)
+            {
+                serializer.Serialize(writer, value.FluffyTopLevel);
+                return;
+            }
+            throw new Exception("Cannot marshal type TopLevelUnion");
+        }
+
+        public static readonly TopLevelUnionConverter Singleton = new TopLevelUnionConverter();
+    }
+
+    internal class IdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Id) || t == typeof(Id?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "US":
+                    return Id.Us;
+                case "NY.GDP.MKTP.CD":
+                    return Id.NyGdpMktpCd;
+            }
+            throw new Exception("Cannot unmarshal type Id");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Id)untypedValue;
+            switch (value)
+            {
+                case Id.Us:
+                    serializer.Serialize(writer, "US");
+                    return;
+                case Id.NyGdpMktpCd:
+                    serializer.Serialize(writer, "NY.GDP.MKTP.CD");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Id");
+        }
+
+        public static readonly IdConverter Singleton = new IdConverter();
+    }
+
+    internal class ValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Value) || t == typeof(Value?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "United States":
+                    return Value.UnitedStates;
+                case "GDP (current US$)":
+                    return Value.GdpCurrentUs;
+            }
+            throw new Exception("Cannot unmarshal type Value");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Value)untypedValue;
+            switch (value)
+            {
+                case Value.UnitedStates:
+                    serializer.Serialize(writer, "United States");
+                    return;
+                case Value.GdpCurrentUs:
+                    serializer.Serialize(writer, "GDP (current US$)");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Value");
+        }
+
+        public static readonly ValueConverter Singleton = new ValueConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/00ec5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/00ec5.json/default/QuickType.cs
new file mode 100644
index 0000000..06138ed
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/00ec5.json/default/QuickType.cs
@@ -0,0 +1,224 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("basePath", Required = Required.Always)]
+        public string BasePath { get; set; }
+
+        [JsonProperty("definitions", Required = Required.Always)]
+        public Definitions Definitions { get; set; }
+
+        [JsonProperty("host", Required = Required.Always)]
+        public string Host { get; set; }
+
+        [JsonProperty("info", Required = Required.Always)]
+        public Info Info { get; set; }
+
+        [JsonProperty("paths", Required = Required.Always)]
+        public Paths Paths { get; set; }
+
+        [JsonProperty("produces", Required = Required.Always)]
+        public string[] Produces { get; set; }
+
+        [JsonProperty("schemes", Required = Required.Always)]
+        public string[] Schemes { get; set; }
+
+        [JsonProperty("swagger", Required = Required.Always)]
+        public string Swagger { get; set; }
+    }
+
+    public partial record Definitions
+    {
+        [JsonProperty("Provider", Required = Required.Always)]
+        public Provider Provider { get; set; }
+    }
+
+    public partial record Provider
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public Dictionary<string, Property> Properties { get; set; }
+    }
+
+    public partial record Property
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record Info
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("version", Required = Required.Always)]
+        public string Version { get; set; }
+    }
+
+    public partial record Paths
+    {
+        [JsonProperty("/business_service_providers/search", Required = Required.Always)]
+        public BusinessServiceProvidersSearch BusinessServiceProvidersSearch { get; set; }
+    }
+
+    public partial record BusinessServiceProvidersSearch
+    {
+        [JsonProperty("get", Required = Required.Always)]
+        public Get Get { get; set; }
+    }
+
+    public partial record Get
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("parameters", Required = Required.Always)]
+        public Parameter[] Parameters { get; set; }
+
+        [JsonProperty("responses", Required = Required.Always)]
+        public Responses Responses { get; set; }
+
+        [JsonProperty("summary", Required = Required.Always)]
+        public string Summary { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+    }
+
+    public partial record Parameter
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public TypeEnum Format { get; set; }
+
+        [JsonProperty("in", Required = Required.Always)]
+        public string In { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("required", Required = Required.Always)]
+        public bool ParameterRequired { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record Responses
+    {
+        [JsonProperty("200", Required = Required.Always)]
+        public The200 The200 { get; set; }
+    }
+
+    public partial record The200
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("schema", Required = Required.Always)]
+        public Schema Schema { get; set; }
+    }
+
+    public partial record Schema
+    {
+        [JsonProperty("$ref", Required = Required.Always)]
+        public string Ref { get; set; }
+    }
+
+    public enum TypeEnum { String };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TypeEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "string")
+            {
+                return TypeEnum.String;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.String)
+            {
+                serializer.Serialize(writer, "string");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/010b1.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/010b1.json/default/QuickType.cs
new file mode 100644
index 0000000..80f8e48
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/010b1.json/default/QuickType.cs
@@ -0,0 +1,113 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("age", Required = Required.Always)]
+        public long Age { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("females", Required = Required.Always)]
+        public long Females { get; set; }
+
+        [JsonProperty("males", Required = Required.Always)]
+        public long Males { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+
+        [JsonProperty("year", Required = Required.Always)]
+        public long Year { get; set; }
+    }
+
+    public enum Country { UnitedStates };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CountryConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CountryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Country) || t == typeof(Country?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "United States")
+            {
+                return Country.UnitedStates;
+            }
+            throw new Exception("Cannot unmarshal type Country");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Country)untypedValue;
+            if (value == Country.UnitedStates)
+            {
+                serializer.Serialize(writer, "United States");
+                return;
+            }
+            throw new Exception("Cannot marshal type Country");
+        }
+
+        public static readonly CountryConverter Singleton = new CountryConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/016af.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/016af.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/016af.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/033b1.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/033b1.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/033b1.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/050b0.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/050b0.json/default/QuickType.cs
new file mode 100644
index 0000000..15fb205
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/050b0.json/default/QuickType.cs
@@ -0,0 +1,371 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identifiers", Required = Required.Always)]
+        public Identifier[] Identifiers { get; set; }
+
+        [JsonProperty("keywords", Required = Required.Always)]
+        public Keyword[] Keywords { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public Link[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("other_names", Required = Required.Always)]
+        public OtherName[] OtherNames { get; set; }
+
+        [JsonProperty("superseded_by", Required = Required.AllowNull)]
+        public string? SupersededBy { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text[] Text { get; set; }
+    }
+
+    public partial record Identifier
+    {
+        [JsonProperty("identifier", Required = Required.Always)]
+        public string IdentifierIdentifier { get; set; }
+
+        [JsonProperty("scheme", Required = Required.Always)]
+        public Scheme Scheme { get; set; }
+    }
+
+    public partial record Link
+    {
+        [JsonProperty("note", Required = Required.Always)]
+        public Note Note { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record OtherName
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("note", Required = Required.AllowNull)]
+        public string? Note { get; set; }
+    }
+
+    public partial record Text
+    {
+        [JsonProperty("media_type", Required = Required.Always)]
+        public MediaType MediaType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public Title Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum Scheme { Dep5, Spdx, Trove };
+
+    public enum Keyword { OsiApproved, Popular, Permissive, Copyleft };
+
+    public enum Note { TlDrLegal, WikipediaPage, OsiPage, NoteWikipediaPage, MozillaPage };
+
+    public enum MediaType { TextHtml, TextPlain };
+
+    public enum Title { Html, PlainText };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                SchemeConverter.Singleton,
+                KeywordConverter.Singleton,
+                NoteConverter.Singleton,
+                MediaTypeConverter.Singleton,
+                TitleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class SchemeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scheme) || t == typeof(Scheme?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "DEP5":
+                    return Scheme.Dep5;
+                case "SPDX":
+                    return Scheme.Spdx;
+                case "Trove":
+                    return Scheme.Trove;
+            }
+            throw new Exception("Cannot unmarshal type Scheme");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Scheme)untypedValue;
+            switch (value)
+            {
+                case Scheme.Dep5:
+                    serializer.Serialize(writer, "DEP5");
+                    return;
+                case Scheme.Spdx:
+                    serializer.Serialize(writer, "SPDX");
+                    return;
+                case Scheme.Trove:
+                    serializer.Serialize(writer, "Trove");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Scheme");
+        }
+
+        public static readonly SchemeConverter Singleton = new SchemeConverter();
+    }
+
+    internal class KeywordConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Keyword) || t == typeof(Keyword?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "osi-approved":
+                    return Keyword.OsiApproved;
+                case "popular":
+                    return Keyword.Popular;
+                case "permissive":
+                    return Keyword.Permissive;
+                case "copyleft":
+                    return Keyword.Copyleft;
+            }
+            throw new Exception("Cannot unmarshal type Keyword");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Keyword)untypedValue;
+            switch (value)
+            {
+                case Keyword.OsiApproved:
+                    serializer.Serialize(writer, "osi-approved");
+                    return;
+                case Keyword.Popular:
+                    serializer.Serialize(writer, "popular");
+                    return;
+                case Keyword.Permissive:
+                    serializer.Serialize(writer, "permissive");
+                    return;
+                case Keyword.Copyleft:
+                    serializer.Serialize(writer, "copyleft");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Keyword");
+        }
+
+        public static readonly KeywordConverter Singleton = new KeywordConverter();
+    }
+
+    internal class NoteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Note) || t == typeof(Note?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "tl;dr legal":
+                    return Note.TlDrLegal;
+                case "Wikipedia page":
+                    return Note.WikipediaPage;
+                case "OSI Page":
+                    return Note.OsiPage;
+                case "Wikipedia Page":
+                    return Note.NoteWikipediaPage;
+                case "Mozilla Page":
+                    return Note.MozillaPage;
+            }
+            throw new Exception("Cannot unmarshal type Note");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Note)untypedValue;
+            switch (value)
+            {
+                case Note.TlDrLegal:
+                    serializer.Serialize(writer, "tl;dr legal");
+                    return;
+                case Note.WikipediaPage:
+                    serializer.Serialize(writer, "Wikipedia page");
+                    return;
+                case Note.OsiPage:
+                    serializer.Serialize(writer, "OSI Page");
+                    return;
+                case Note.NoteWikipediaPage:
+                    serializer.Serialize(writer, "Wikipedia Page");
+                    return;
+                case Note.MozillaPage:
+                    serializer.Serialize(writer, "Mozilla Page");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Note");
+        }
+
+        public static readonly NoteConverter Singleton = new NoteConverter();
+    }
+
+    internal class MediaTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MediaType) || t == typeof(MediaType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "text/html":
+                    return MediaType.TextHtml;
+                case "text/plain":
+                    return MediaType.TextPlain;
+            }
+            throw new Exception("Cannot unmarshal type MediaType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (MediaType)untypedValue;
+            switch (value)
+            {
+                case MediaType.TextHtml:
+                    serializer.Serialize(writer, "text/html");
+                    return;
+                case MediaType.TextPlain:
+                    serializer.Serialize(writer, "text/plain");
+                    return;
+            }
+            throw new Exception("Cannot marshal type MediaType");
+        }
+
+        public static readonly MediaTypeConverter Singleton = new MediaTypeConverter();
+    }
+
+    internal class TitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Title) || t == typeof(Title?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "HTML":
+                    return Title.Html;
+                case "Plain Text":
+                    return Title.PlainText;
+            }
+            throw new Exception("Cannot unmarshal type Title");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Title)untypedValue;
+            switch (value)
+            {
+                case Title.Html:
+                    serializer.Serialize(writer, "HTML");
+                    return;
+                case Title.PlainText:
+                    serializer.Serialize(writer, "Plain Text");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Title");
+        }
+
+        public static readonly TitleConverter Singleton = new TitleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/06bee.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/06bee.json/default/QuickType.cs
new file mode 100644
index 0000000..2cbe568
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/06bee.json/default/QuickType.cs
@@ -0,0 +1,321 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identifiers", Required = Required.Always)]
+        public Identifier[] Identifiers { get; set; }
+
+        [JsonProperty("keywords", Required = Required.Always)]
+        public Keyword[] Keywords { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public Link[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("other_names", Required = Required.Always)]
+        public object[] OtherNames { get; set; }
+
+        [JsonProperty("superseded_by", Required = Required.AllowNull)]
+        public object SupersededBy { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text[] Text { get; set; }
+    }
+
+    public partial record Identifier
+    {
+        [JsonProperty("identifier", Required = Required.Always)]
+        public string IdentifierIdentifier { get; set; }
+
+        [JsonProperty("scheme", Required = Required.Always)]
+        public Scheme Scheme { get; set; }
+    }
+
+    public partial record Link
+    {
+        [JsonProperty("note", Required = Required.Always)]
+        public Note Note { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Text
+    {
+        [JsonProperty("media_type", Required = Required.Always)]
+        public MediaType MediaType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public Title Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum Scheme { Spdx, Trove, Dep5 };
+
+    public enum Keyword { Discouraged, NonReusable, OsiApproved };
+
+    public enum Note { OsiPage };
+
+    public enum MediaType { TextHtml };
+
+    public enum Title { Html };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                SchemeConverter.Singleton,
+                KeywordConverter.Singleton,
+                NoteConverter.Singleton,
+                MediaTypeConverter.Singleton,
+                TitleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class SchemeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scheme) || t == typeof(Scheme?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "SPDX":
+                    return Scheme.Spdx;
+                case "Trove":
+                    return Scheme.Trove;
+                case "DEP5":
+                    return Scheme.Dep5;
+            }
+            throw new Exception("Cannot unmarshal type Scheme");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Scheme)untypedValue;
+            switch (value)
+            {
+                case Scheme.Spdx:
+                    serializer.Serialize(writer, "SPDX");
+                    return;
+                case Scheme.Trove:
+                    serializer.Serialize(writer, "Trove");
+                    return;
+                case Scheme.Dep5:
+                    serializer.Serialize(writer, "DEP5");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Scheme");
+        }
+
+        public static readonly SchemeConverter Singleton = new SchemeConverter();
+    }
+
+    internal class KeywordConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Keyword) || t == typeof(Keyword?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "discouraged":
+                    return Keyword.Discouraged;
+                case "non-reusable":
+                    return Keyword.NonReusable;
+                case "osi-approved":
+                    return Keyword.OsiApproved;
+            }
+            throw new Exception("Cannot unmarshal type Keyword");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Keyword)untypedValue;
+            switch (value)
+            {
+                case Keyword.Discouraged:
+                    serializer.Serialize(writer, "discouraged");
+                    return;
+                case Keyword.NonReusable:
+                    serializer.Serialize(writer, "non-reusable");
+                    return;
+                case Keyword.OsiApproved:
+                    serializer.Serialize(writer, "osi-approved");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Keyword");
+        }
+
+        public static readonly KeywordConverter Singleton = new KeywordConverter();
+    }
+
+    internal class NoteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Note) || t == typeof(Note?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "OSI Page")
+            {
+                return Note.OsiPage;
+            }
+            throw new Exception("Cannot unmarshal type Note");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Note)untypedValue;
+            if (value == Note.OsiPage)
+            {
+                serializer.Serialize(writer, "OSI Page");
+                return;
+            }
+            throw new Exception("Cannot marshal type Note");
+        }
+
+        public static readonly NoteConverter Singleton = new NoteConverter();
+    }
+
+    internal class MediaTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MediaType) || t == typeof(MediaType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "text/html")
+            {
+                return MediaType.TextHtml;
+            }
+            throw new Exception("Cannot unmarshal type MediaType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (MediaType)untypedValue;
+            if (value == MediaType.TextHtml)
+            {
+                serializer.Serialize(writer, "text/html");
+                return;
+            }
+            throw new Exception("Cannot marshal type MediaType");
+        }
+
+        public static readonly MediaTypeConverter Singleton = new MediaTypeConverter();
+    }
+
+    internal class TitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Title) || t == typeof(Title?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "HTML")
+            {
+                return Title.Html;
+            }
+            throw new Exception("Cannot unmarshal type Title");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Title)untypedValue;
+            if (value == Title.Html)
+            {
+                serializer.Serialize(writer, "HTML");
+                return;
+            }
+            throw new Exception("Cannot marshal type Title");
+        }
+
+        public static readonly TitleConverter Singleton = new TitleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/07540.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/07540.json/default/QuickType.cs
new file mode 100644
index 0000000..6a34ef8
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/07540.json/default/QuickType.cs
@@ -0,0 +1,65 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("cookies", Required = Required.Always)]
+        public Cookies Cookies { get; set; }
+    }
+
+    public partial record Cookies
+    {
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/0779f.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/0779f.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/0779f.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/07c75.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/07c75.json/default/QuickType.cs
new file mode 100644
index 0000000..5fa12ff
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/07c75.json/default/QuickType.cs
@@ -0,0 +1,112 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identifiers", Required = Required.Always)]
+        public Identifier[] Identifiers { get; set; }
+
+        [JsonProperty("keywords", Required = Required.Always)]
+        public string[] Keywords { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public Link[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("other_names", Required = Required.Always)]
+        public object[] OtherNames { get; set; }
+
+        [JsonProperty("superseded_by", Required = Required.AllowNull)]
+        public object SupersededBy { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text[] Text { get; set; }
+    }
+
+    public partial record Identifier
+    {
+        [JsonProperty("identifier", Required = Required.Always)]
+        public string IdentifierIdentifier { get; set; }
+
+        [JsonProperty("scheme", Required = Required.Always)]
+        public string Scheme { get; set; }
+    }
+
+    public partial record Link
+    {
+        [JsonProperty("note", Required = Required.Always)]
+        public string Note { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Text
+    {
+        [JsonProperty("media_type", Required = Required.Always)]
+        public string MediaType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/09f54.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/09f54.json/default/QuickType.cs
new file mode 100644
index 0000000..64ace20
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/09f54.json/default/QuickType.cs
@@ -0,0 +1,88 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Dictionary<string, Datum> Data { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public Description Description { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("anomaly", Required = Required.Always)]
+        public string Anomaly { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record Description
+    {
+        [JsonProperty("base_period", Required = Required.Always)]
+        public string BasePeriod { get; set; }
+
+        [JsonProperty("missing", Required = Required.Always)]
+        public long Missing { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public string Units { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/0a358.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/0a358.json/default/QuickType.cs
new file mode 100644
index 0000000..d92a7d4
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/0a358.json/default/QuickType.cs
@@ -0,0 +1,104 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("facets", Required = Required.Always)]
+        public Facets Facets { get; set; }
+
+        [JsonProperty("limit", Required = Required.Always)]
+        public long Limit { get; set; }
+
+        [JsonProperty("next", Required = Required.Always)]
+        public Uri Next { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("previous", Required = Required.Always)]
+        public bool Previous { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Facets
+    {
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        public string Code { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("uri", Required = Required.Always)]
+        public Uri Uri { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/0a91a.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/0a91a.json/default/QuickType.cs
new file mode 100644
index 0000000..8a215fb
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/0a91a.json/default/QuickType.cs
@@ -0,0 +1,687 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("actor", Required = Required.Always)]
+        public Actor Actor { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("org", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Actor? Org { get; set; }
+
+        [JsonProperty("payload", Required = Required.Always)]
+        public Payload Payload { get; set; }
+
+        [JsonProperty("public", Required = Required.Always)]
+        public bool Public { get; set; }
+
+        [JsonProperty("repo", Required = Required.Always)]
+        public TopLevelRepo Repo { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record Actor
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("display_login", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DisplayLogin { get; set; }
+
+        [JsonProperty("gravatar_id", Required = Required.Always)]
+        public string GravatarId { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("login", Required = Required.Always)]
+        public string Login { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Payload
+    {
+        [JsonProperty("action", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Action { get; set; }
+
+        [JsonProperty("before", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Before { get; set; }
+
+        [JsonProperty("commits", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Commit[]? Commits { get; set; }
+
+        [JsonProperty("description")]
+        public string? Description { get; set; }
+
+        [JsonProperty("distinct_size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? DistinctSize { get; set; }
+
+        [JsonProperty("head", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Head { get; set; }
+
+        [JsonProperty("master_branch", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? MasterBranch { get; set; }
+
+        [JsonProperty("number", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Number { get; set; }
+
+        [JsonProperty("pull_request", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PullRequest? PullRequest { get; set; }
+
+        [JsonProperty("push_id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? PushId { get; set; }
+
+        [JsonProperty("pusher_type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? PusherType { get; set; }
+
+        [JsonProperty("ref", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Ref { get; set; }
+
+        [JsonProperty("ref_type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? RefType { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Size { get; set; }
+    }
+
+    public partial record Commit
+    {
+        [JsonProperty("author", Required = Required.Always)]
+        public Author Author { get; set; }
+
+        [JsonProperty("distinct", Required = Required.Always)]
+        public bool Distinct { get; set; }
+
+        [JsonProperty("message", Required = Required.Always)]
+        public string Message { get; set; }
+
+        [JsonProperty("sha", Required = Required.Always)]
+        public string Sha { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Author
+    {
+        [JsonProperty("email", Required = Required.Always)]
+        public string Email { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record PullRequest
+    {
+        [JsonProperty("additions", Required = Required.Always)]
+        public long Additions { get; set; }
+
+        [JsonProperty("assignee", Required = Required.AllowNull)]
+        public object Assignee { get; set; }
+
+        [JsonProperty("assignees", Required = Required.Always)]
+        public object[] Assignees { get; set; }
+
+        [JsonProperty("base", Required = Required.Always)]
+        public Base Base { get; set; }
+
+        [JsonProperty("body", Required = Required.Always)]
+        public string Body { get; set; }
+
+        [JsonProperty("changed_files", Required = Required.Always)]
+        public long ChangedFiles { get; set; }
+
+        [JsonProperty("closed_at", Required = Required.Always)]
+        public DateTimeOffset ClosedAt { get; set; }
+
+        [JsonProperty("comments", Required = Required.Always)]
+        public long Comments { get; set; }
+
+        [JsonProperty("comments_url", Required = Required.Always)]
+        public Uri CommentsUrl { get; set; }
+
+        [JsonProperty("commits", Required = Required.Always)]
+        public long Commits { get; set; }
+
+        [JsonProperty("commits_url", Required = Required.Always)]
+        public Uri CommitsUrl { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("deletions", Required = Required.Always)]
+        public long Deletions { get; set; }
+
+        [JsonProperty("diff_url", Required = Required.Always)]
+        public Uri DiffUrl { get; set; }
+
+        [JsonProperty("head", Required = Required.Always)]
+        public Base Head { get; set; }
+
+        [JsonProperty("html_url", Required = Required.Always)]
+        public Uri HtmlUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("issue_url", Required = Required.Always)]
+        public Uri IssueUrl { get; set; }
+
+        [JsonProperty("_links", Required = Required.Always)]
+        public Links Links { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("maintainer_can_modify", Required = Required.Always)]
+        public bool MaintainerCanModify { get; set; }
+
+        [JsonProperty("merge_commit_sha", Required = Required.Always)]
+        public string MergeCommitSha { get; set; }
+
+        [JsonProperty("mergeable", Required = Required.AllowNull)]
+        public object Mergeable { get; set; }
+
+        [JsonProperty("mergeable_state", Required = Required.Always)]
+        public string MergeableState { get; set; }
+
+        [JsonProperty("merged", Required = Required.Always)]
+        public bool Merged { get; set; }
+
+        [JsonProperty("merged_at", Required = Required.Always)]
+        public DateTimeOffset MergedAt { get; set; }
+
+        [JsonProperty("merged_by", Required = Required.Always)]
+        public MergedBy MergedBy { get; set; }
+
+        [JsonProperty("milestone", Required = Required.AllowNull)]
+        public object Milestone { get; set; }
+
+        [JsonProperty("number", Required = Required.Always)]
+        public long Number { get; set; }
+
+        [JsonProperty("patch_url", Required = Required.Always)]
+        public Uri PatchUrl { get; set; }
+
+        [JsonProperty("rebaseable", Required = Required.AllowNull)]
+        public object Rebaseable { get; set; }
+
+        [JsonProperty("requested_reviewers", Required = Required.Always)]
+        public object[] RequestedReviewers { get; set; }
+
+        [JsonProperty("review_comment_url", Required = Required.Always)]
+        public string ReviewCommentUrl { get; set; }
+
+        [JsonProperty("review_comments", Required = Required.Always)]
+        public long ReviewComments { get; set; }
+
+        [JsonProperty("review_comments_url", Required = Required.Always)]
+        public Uri ReviewCommentsUrl { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("statuses_url", Required = Required.Always)]
+        public Uri StatusesUrl { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.Always)]
+        public MergedBy User { get; set; }
+    }
+
+    public partial record Base
+    {
+        [JsonProperty("label", Required = Required.Always)]
+        public string Label { get; set; }
+
+        [JsonProperty("ref", Required = Required.Always)]
+        public string Ref { get; set; }
+
+        [JsonProperty("repo", Required = Required.Always)]
+        public BaseRepo Repo { get; set; }
+
+        [JsonProperty("sha", Required = Required.Always)]
+        public string Sha { get; set; }
+
+        [JsonProperty("user", Required = Required.Always)]
+        public MergedBy User { get; set; }
+    }
+
+    public partial record BaseRepo
+    {
+        [JsonProperty("archive_url", Required = Required.Always)]
+        public string ArchiveUrl { get; set; }
+
+        [JsonProperty("assignees_url", Required = Required.Always)]
+        public string AssigneesUrl { get; set; }
+
+        [JsonProperty("blobs_url", Required = Required.Always)]
+        public string BlobsUrl { get; set; }
+
+        [JsonProperty("branches_url", Required = Required.Always)]
+        public string BranchesUrl { get; set; }
+
+        [JsonProperty("clone_url", Required = Required.Always)]
+        public Uri CloneUrl { get; set; }
+
+        [JsonProperty("collaborators_url", Required = Required.Always)]
+        public string CollaboratorsUrl { get; set; }
+
+        [JsonProperty("comments_url", Required = Required.Always)]
+        public string CommentsUrl { get; set; }
+
+        [JsonProperty("commits_url", Required = Required.Always)]
+        public string CommitsUrl { get; set; }
+
+        [JsonProperty("compare_url", Required = Required.Always)]
+        public string CompareUrl { get; set; }
+
+        [JsonProperty("contents_url", Required = Required.Always)]
+        public string ContentsUrl { get; set; }
+
+        [JsonProperty("contributors_url", Required = Required.Always)]
+        public Uri ContributorsUrl { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("default_branch", Required = Required.Always)]
+        public string DefaultBranch { get; set; }
+
+        [JsonProperty("deployments_url", Required = Required.Always)]
+        public Uri DeploymentsUrl { get; set; }
+
+        [JsonProperty("description", Required = Required.AllowNull)]
+        public object Description { get; set; }
+
+        [JsonProperty("downloads_url", Required = Required.Always)]
+        public Uri DownloadsUrl { get; set; }
+
+        [JsonProperty("events_url", Required = Required.Always)]
+        public Uri EventsUrl { get; set; }
+
+        [JsonProperty("fork", Required = Required.Always)]
+        public bool Fork { get; set; }
+
+        [JsonProperty("forks", Required = Required.Always)]
+        public long Forks { get; set; }
+
+        [JsonProperty("forks_count", Required = Required.Always)]
+        public long ForksCount { get; set; }
+
+        [JsonProperty("forks_url", Required = Required.Always)]
+        public Uri ForksUrl { get; set; }
+
+        [JsonProperty("full_name", Required = Required.Always)]
+        public string FullName { get; set; }
+
+        [JsonProperty("git_commits_url", Required = Required.Always)]
+        public string GitCommitsUrl { get; set; }
+
+        [JsonProperty("git_refs_url", Required = Required.Always)]
+        public string GitRefsUrl { get; set; }
+
+        [JsonProperty("git_tags_url", Required = Required.Always)]
+        public string GitTagsUrl { get; set; }
+
+        [JsonProperty("git_url", Required = Required.Always)]
+        public string GitUrl { get; set; }
+
+        [JsonProperty("has_downloads", Required = Required.Always)]
+        public bool HasDownloads { get; set; }
+
+        [JsonProperty("has_issues", Required = Required.Always)]
+        public bool HasIssues { get; set; }
+
+        [JsonProperty("has_pages", Required = Required.Always)]
+        public bool HasPages { get; set; }
+
+        [JsonProperty("has_projects", Required = Required.Always)]
+        public bool HasProjects { get; set; }
+
+        [JsonProperty("has_wiki", Required = Required.Always)]
+        public bool HasWiki { get; set; }
+
+        [JsonProperty("homepage", Required = Required.AllowNull)]
+        public object Homepage { get; set; }
+
+        [JsonProperty("hooks_url", Required = Required.Always)]
+        public Uri HooksUrl { get; set; }
+
+        [JsonProperty("html_url", Required = Required.Always)]
+        public Uri HtmlUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("issue_comment_url", Required = Required.Always)]
+        public string IssueCommentUrl { get; set; }
+
+        [JsonProperty("issue_events_url", Required = Required.Always)]
+        public string IssueEventsUrl { get; set; }
+
+        [JsonProperty("issues_url", Required = Required.Always)]
+        public string IssuesUrl { get; set; }
+
+        [JsonProperty("keys_url", Required = Required.Always)]
+        public string KeysUrl { get; set; }
+
+        [JsonProperty("labels_url", Required = Required.Always)]
+        public string LabelsUrl { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("languages_url", Required = Required.Always)]
+        public Uri LanguagesUrl { get; set; }
+
+        [JsonProperty("merges_url", Required = Required.Always)]
+        public Uri MergesUrl { get; set; }
+
+        [JsonProperty("milestones_url", Required = Required.Always)]
+        public string MilestonesUrl { get; set; }
+
+        [JsonProperty("mirror_url", Required = Required.AllowNull)]
+        public object MirrorUrl { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("notifications_url", Required = Required.Always)]
+        public string NotificationsUrl { get; set; }
+
+        [JsonProperty("open_issues", Required = Required.Always)]
+        public long OpenIssues { get; set; }
+
+        [JsonProperty("open_issues_count", Required = Required.Always)]
+        public long OpenIssuesCount { get; set; }
+
+        [JsonProperty("owner", Required = Required.Always)]
+        public MergedBy Owner { get; set; }
+
+        [JsonProperty("private", Required = Required.Always)]
+        public bool Private { get; set; }
+
+        [JsonProperty("pulls_url", Required = Required.Always)]
+        public string PullsUrl { get; set; }
+
+        [JsonProperty("pushed_at", Required = Required.Always)]
+        public DateTimeOffset PushedAt { get; set; }
+
+        [JsonProperty("releases_url", Required = Required.Always)]
+        public string ReleasesUrl { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        public long Size { get; set; }
+
+        [JsonProperty("ssh_url", Required = Required.Always)]
+        public string SshUrl { get; set; }
+
+        [JsonProperty("stargazers_count", Required = Required.Always)]
+        public long StargazersCount { get; set; }
+
+        [JsonProperty("stargazers_url", Required = Required.Always)]
+        public Uri StargazersUrl { get; set; }
+
+        [JsonProperty("statuses_url", Required = Required.Always)]
+        public string StatusesUrl { get; set; }
+
+        [JsonProperty("subscribers_url", Required = Required.Always)]
+        public Uri SubscribersUrl { get; set; }
+
+        [JsonProperty("subscription_url", Required = Required.Always)]
+        public Uri SubscriptionUrl { get; set; }
+
+        [JsonProperty("svn_url", Required = Required.Always)]
+        public Uri SvnUrl { get; set; }
+
+        [JsonProperty("tags_url", Required = Required.Always)]
+        public Uri TagsUrl { get; set; }
+
+        [JsonProperty("teams_url", Required = Required.Always)]
+        public Uri TeamsUrl { get; set; }
+
+        [JsonProperty("trees_url", Required = Required.Always)]
+        public string TreesUrl { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("watchers", Required = Required.Always)]
+        public long Watchers { get; set; }
+
+        [JsonProperty("watchers_count", Required = Required.Always)]
+        public long WatchersCount { get; set; }
+    }
+
+    public partial record MergedBy
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("events_url", Required = Required.Always)]
+        public string EventsUrl { get; set; }
+
+        [JsonProperty("followers_url", Required = Required.Always)]
+        public Uri FollowersUrl { get; set; }
+
+        [JsonProperty("following_url", Required = Required.Always)]
+        public string FollowingUrl { get; set; }
+
+        [JsonProperty("gists_url", Required = Required.Always)]
+        public string GistsUrl { get; set; }
+
+        [JsonProperty("gravatar_id", Required = Required.Always)]
+        public string GravatarId { get; set; }
+
+        [JsonProperty("html_url", Required = Required.Always)]
+        public Uri HtmlUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("login", Required = Required.Always)]
+        public string Login { get; set; }
+
+        [JsonProperty("organizations_url", Required = Required.Always)]
+        public Uri OrganizationsUrl { get; set; }
+
+        [JsonProperty("received_events_url", Required = Required.Always)]
+        public Uri ReceivedEventsUrl { get; set; }
+
+        [JsonProperty("repos_url", Required = Required.Always)]
+        public Uri ReposUrl { get; set; }
+
+        [JsonProperty("site_admin", Required = Required.Always)]
+        public bool SiteAdmin { get; set; }
+
+        [JsonProperty("starred_url", Required = Required.Always)]
+        public string StarredUrl { get; set; }
+
+        [JsonProperty("subscriptions_url", Required = Required.Always)]
+        public Uri SubscriptionsUrl { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Links
+    {
+        [JsonProperty("comments", Required = Required.Always)]
+        public Comments Comments { get; set; }
+
+        [JsonProperty("commits", Required = Required.Always)]
+        public Comments Commits { get; set; }
+
+        [JsonProperty("html", Required = Required.Always)]
+        public Comments Html { get; set; }
+
+        [JsonProperty("issue", Required = Required.Always)]
+        public Comments Issue { get; set; }
+
+        [JsonProperty("review_comment", Required = Required.Always)]
+        public Comments ReviewComment { get; set; }
+
+        [JsonProperty("review_comments", Required = Required.Always)]
+        public Comments ReviewComments { get; set; }
+
+        [JsonProperty("self", Required = Required.Always)]
+        public Comments Self { get; set; }
+
+        [JsonProperty("statuses", Required = Required.Always)]
+        public Comments Statuses { get; set; }
+    }
+
+    public partial record Comments
+    {
+        [JsonProperty("href", Required = Required.Always)]
+        public string Href { get; set; }
+    }
+
+    public partial record TopLevelRepo
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum TypeEnum { PushEvent, CreateEvent, WatchEvent, PullRequestEvent, DeleteEvent };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TypeEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "PushEvent":
+                    return TypeEnum.PushEvent;
+                case "CreateEvent":
+                    return TypeEnum.CreateEvent;
+                case "WatchEvent":
+                    return TypeEnum.WatchEvent;
+                case "PullRequestEvent":
+                    return TypeEnum.PullRequestEvent;
+                case "DeleteEvent":
+                    return TypeEnum.DeleteEvent;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            switch (value)
+            {
+                case TypeEnum.PushEvent:
+                    serializer.Serialize(writer, "PushEvent");
+                    return;
+                case TypeEnum.CreateEvent:
+                    serializer.Serialize(writer, "CreateEvent");
+                    return;
+                case TypeEnum.WatchEvent:
+                    serializer.Serialize(writer, "WatchEvent");
+                    return;
+                case TypeEnum.PullRequestEvent:
+                    serializer.Serialize(writer, "PullRequestEvent");
+                    return;
+                case TypeEnum.DeleteEvent:
+                    serializer.Serialize(writer, "DeleteEvent");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/0b91a.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/0b91a.json/default/QuickType.cs
new file mode 100644
index 0000000..02c29cc
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/0b91a.json/default/QuickType.cs
@@ -0,0 +1,185 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("metadata", Required = Required.Always)]
+        public Metadata Metadata { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Metadata
+    {
+        [JsonProperty("executionTime", Required = Required.Always)]
+        public double ExecutionTime { get; set; }
+
+        [JsonProperty("responseInfo", Required = Required.Always)]
+        public ResponseInfo ResponseInfo { get; set; }
+
+        [JsonProperty("resultset", Required = Required.Always)]
+        public Resultset Resultset { get; set; }
+    }
+
+    public partial record ResponseInfo
+    {
+        [JsonProperty("developerMessage", Required = Required.Always)]
+        public string DeveloperMessage { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Resultset
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("page", Required = Required.Always)]
+        public long Page { get; set; }
+
+        [JsonProperty("pagesize", Required = Required.Always)]
+        public long Pagesize { get; set; }
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("attachment", Required = Required.Always)]
+        public object[] Attachment { get; set; }
+
+        [JsonProperty("body", Required = Required.Always)]
+        public string Body { get; set; }
+
+        [JsonProperty("changed", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Changed { get; set; }
+
+        [JsonProperty("component", Required = Required.Always)]
+        public Component[] Component { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Created { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Date { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public object[] Image { get; set; }
+
+        [JsonProperty("number", Required = Required.AllowNull)]
+        public object Number { get; set; }
+
+        [JsonProperty("teaser", Required = Required.AllowNull)]
+        public object Teaser { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("topic", Required = Required.Always)]
+        public object[] Topic { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("uuid", Required = Required.Always)]
+        public Guid Uuid { get; set; }
+
+        [JsonProperty("vuuid", Required = Required.Always)]
+        public Guid Vuuid { get; set; }
+    }
+
+    public partial record Component
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("uuid", Required = Required.Always)]
+        public Guid Uuid { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/0cffa.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/0cffa.json/default/QuickType.cs
new file mode 100644
index 0000000..a011396
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/0cffa.json/default/QuickType.cs
@@ -0,0 +1,492 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("pagination", Required = Required.Always)]
+        public Pagination Pagination { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("bitly_gif_url", Required = Required.Always)]
+        public Uri BitlyGifUrl { get; set; }
+
+        [JsonProperty("bitly_url", Required = Required.Always)]
+        public Uri BitlyUrl { get; set; }
+
+        [JsonProperty("content_url", Required = Required.Always)]
+        public string ContentUrl { get; set; }
+
+        [JsonProperty("embed_url", Required = Required.Always)]
+        public Uri EmbedUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Images Images { get; set; }
+
+        [JsonProperty("import_datetime", Required = Required.Always)]
+        public string ImportDatetime { get; set; }
+
+        [JsonProperty("is_indexable", Required = Required.Always)]
+        public long IsIndexable { get; set; }
+
+        [JsonProperty("rating", Required = Required.Always)]
+        public Rating Rating { get; set; }
+
+        [JsonProperty("slug", Required = Required.Always)]
+        public string Slug { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public string Source { get; set; }
+
+        [JsonProperty("source_post_url", Required = Required.Always)]
+        public string SourcePostUrl { get; set; }
+
+        [JsonProperty("source_tld", Required = Required.Always)]
+        public string SourceTld { get; set; }
+
+        [JsonProperty("trending_datetime", Required = Required.Always)]
+        public string TrendingDatetime { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public User? User { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public Username Username { get; set; }
+    }
+
+    public partial record Images
+    {
+        [JsonProperty("downsized", Required = Required.Always)]
+        public The480_WStill Downsized { get; set; }
+
+        [JsonProperty("downsized_large", Required = Required.Always)]
+        public The480_WStill DownsizedLarge { get; set; }
+
+        [JsonProperty("downsized_medium", Required = Required.Always)]
+        public The480_WStill DownsizedMedium { get; set; }
+
+        [JsonProperty("downsized_small", Required = Required.Always)]
+        public DownsizedSmall DownsizedSmall { get; set; }
+
+        [JsonProperty("downsized_still", Required = Required.Always)]
+        public The480_WStill DownsizedStill { get; set; }
+
+        [JsonProperty("fixed_height", Required = Required.Always)]
+        public FixedHeight FixedHeight { get; set; }
+
+        [JsonProperty("fixed_height_downsampled", Required = Required.Always)]
+        public FixedHeight FixedHeightDownsampled { get; set; }
+
+        [JsonProperty("fixed_height_small", Required = Required.Always)]
+        public FixedHeight FixedHeightSmall { get; set; }
+
+        [JsonProperty("fixed_height_small_still", Required = Required.Always)]
+        public The480_WStill FixedHeightSmallStill { get; set; }
+
+        [JsonProperty("fixed_height_still", Required = Required.Always)]
+        public The480_WStill FixedHeightStill { get; set; }
+
+        [JsonProperty("fixed_width", Required = Required.Always)]
+        public FixedHeight FixedWidth { get; set; }
+
+        [JsonProperty("fixed_width_downsampled", Required = Required.Always)]
+        public FixedHeight FixedWidthDownsampled { get; set; }
+
+        [JsonProperty("fixed_width_small", Required = Required.Always)]
+        public FixedHeight FixedWidthSmall { get; set; }
+
+        [JsonProperty("fixed_width_small_still", Required = Required.Always)]
+        public The480_WStill FixedWidthSmallStill { get; set; }
+
+        [JsonProperty("fixed_width_still", Required = Required.Always)]
+        public The480_WStill FixedWidthStill { get; set; }
+
+        [JsonProperty("looping", Required = Required.Always)]
+        public Looping Looping { get; set; }
+
+        [JsonProperty("original", Required = Required.Always)]
+        public FixedHeight Original { get; set; }
+
+        [JsonProperty("original_mp4", Required = Required.Always)]
+        public DownsizedSmall OriginalMp4 { get; set; }
+
+        [JsonProperty("original_still", Required = Required.Always)]
+        public The480_WStill OriginalStill { get; set; }
+
+        [JsonProperty("preview", Required = Required.Always)]
+        public DownsizedSmall Preview { get; set; }
+
+        [JsonProperty("preview_gif", Required = Required.Always)]
+        public The480_WStill PreviewGif { get; set; }
+
+        [JsonProperty("preview_webp", Required = Required.Always)]
+        public The480_WStill PreviewWebp { get; set; }
+
+        [JsonProperty("480w_still", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public The480_WStill? The480WStill { get; set; }
+    }
+
+    public partial record The480_WStill
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record DownsizedSmall
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record FixedHeight
+    {
+        [JsonProperty("frames", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Frames { get; set; }
+
+        [JsonProperty("hash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Hash { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Uri? Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Mp4Size { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("webp", Required = Required.Always)]
+        public Uri Webp { get; set; }
+
+        [JsonProperty("webp_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long WebpSize { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Looping
+    {
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+    }
+
+    public partial record User
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("banner_url", Required = Required.Always)]
+        public Uri BannerUrl { get; set; }
+
+        [JsonProperty("display_name", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("profile_url", Required = Required.Always)]
+        public Uri ProfileUrl { get; set; }
+
+        [JsonProperty("twitter", Required = Required.Always)]
+        public string Twitter { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public Username Username { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("msg", Required = Required.Always)]
+        public string Msg { get; set; }
+
+        [JsonProperty("response_id", Required = Required.Always)]
+        public string ResponseId { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Pagination
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("total_count", Required = Required.Always)]
+        public long TotalCount { get; set; }
+    }
+
+    public enum Rating { G, Pg };
+
+    public enum TypeEnum { Gif };
+
+    public enum Username { Cheezburger, Empty, Natgeowild, Nowthis };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                RatingConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                UsernameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RatingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rating) || t == typeof(Rating?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "g":
+                    return Rating.G;
+                case "pg":
+                    return Rating.Pg;
+            }
+            throw new Exception("Cannot unmarshal type Rating");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Rating)untypedValue;
+            switch (value)
+            {
+                case Rating.G:
+                    serializer.Serialize(writer, "g");
+                    return;
+                case Rating.Pg:
+                    serializer.Serialize(writer, "pg");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Rating");
+        }
+
+        public static readonly RatingConverter Singleton = new RatingConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "gif")
+            {
+                return TypeEnum.Gif;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.Gif)
+            {
+                serializer.Serialize(writer, "gif");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+
+    internal class UsernameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Username) || t == typeof(Username?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "cheezburger":
+                    return Username.Cheezburger;
+                case "":
+                    return Username.Empty;
+                case "natgeowild":
+                    return Username.Natgeowild;
+                case "nowthis":
+                    return Username.Nowthis;
+            }
+            throw new Exception("Cannot unmarshal type Username");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Username)untypedValue;
+            switch (value)
+            {
+                case Username.Cheezburger:
+                    serializer.Serialize(writer, "cheezburger");
+                    return;
+                case Username.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Username.Natgeowild:
+                    serializer.Serialize(writer, "natgeowild");
+                    return;
+                case Username.Nowthis:
+                    serializer.Serialize(writer, "nowthis");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Username");
+        }
+
+        public static readonly UsernameConverter Singleton = new UsernameConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/0e0c2.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/0e0c2.json/default/QuickType.cs
new file mode 100644
index 0000000..189b669
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/0e0c2.json/default/QuickType.cs
@@ -0,0 +1,346 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("next", Required = Required.Always)]
+        public Uri Next { get; set; }
+
+        [JsonProperty("previous", Required = Required.AllowNull)]
+        public object Previous { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("active_screens", Required = Required.Always)]
+        public long ActiveScreens { get; set; }
+
+        [JsonProperty("collections", Required = Required.Always)]
+        public Collection[] Collections { get; set; }
+
+        [JsonProperty("details", Required = Required.Always)]
+        public Detail[] Details { get; set; }
+
+        [JsonProperty("duration", Required = Required.Always)]
+        public long Duration { get; set; }
+
+        [JsonProperty("fav_movie", Required = Required.Always)]
+        public FavMovie FavMovie { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Image[] Images { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public ResultLanguage Language { get; set; }
+
+        [JsonProperty("release_date", Required = Required.Always)]
+        public DateTimeOffset ReleaseDate { get; set; }
+
+        [JsonProperty("stars", Required = Required.Always)]
+        public long Stars { get; set; }
+
+        [JsonProperty("tags", Required = Required.AllowNull)]
+        public object[]? Tags { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("videos", Required = Required.Always)]
+        public Video[] Videos { get; set; }
+
+        [JsonProperty("vote_score", Required = Required.Always)]
+        public VoteScore VoteScore { get; set; }
+
+        [JsonProperty("watches", Required = Required.Always)]
+        public long Watches { get; set; }
+    }
+
+    public partial record Collection
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("movies", Required = Required.Always)]
+        public long[] Movies { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("slug", Required = Required.Always)]
+        public string Slug { get; set; }
+    }
+
+    public partial record Detail
+    {
+        [JsonProperty("cast", Required = Required.Always)]
+        public string Cast { get; set; }
+
+        [JsonProperty("director", Required = Required.Always)]
+        public string Director { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public DetailLanguage Language { get; set; }
+
+        [JsonProperty("storyline", Required = Required.Always)]
+        public string Storyline { get; set; }
+
+        [JsonProperty("tagline", Required = Required.Always)]
+        public string Tagline { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record FavMovie
+    {
+        [JsonProperty("follow", Required = Required.Always)]
+        public bool Follow { get; set; }
+
+        [JsonProperty("star", Required = Required.Always)]
+        public bool Star { get; set; }
+
+        [JsonProperty("watched", Required = Required.Always)]
+        public bool Watched { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("favs", Required = Required.Always)]
+        public long Favs { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public Uri Thumbnail { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Video
+    {
+        [JsonProperty("kind", Required = Required.Always)]
+        public string Kind { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public ResultLanguage Language { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public string Source { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record VoteScore
+    {
+        [JsonProperty("avg", Required = Required.Always)]
+        public long Avg { get; set; }
+
+        [JsonProperty("score", Required = Required.Always)]
+        public long Score { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+    }
+
+    public enum DetailLanguage { En, Th };
+
+    public enum TypeEnum { Poster, Backdrop };
+
+    public enum ResultLanguage { En, Empty };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DetailLanguageConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                ResultLanguageConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DetailLanguageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DetailLanguage) || t == typeof(DetailLanguage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "en":
+                    return DetailLanguage.En;
+                case "th":
+                    return DetailLanguage.Th;
+            }
+            throw new Exception("Cannot unmarshal type DetailLanguage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (DetailLanguage)untypedValue;
+            switch (value)
+            {
+                case DetailLanguage.En:
+                    serializer.Serialize(writer, "en");
+                    return;
+                case DetailLanguage.Th:
+                    serializer.Serialize(writer, "th");
+                    return;
+            }
+            throw new Exception("Cannot marshal type DetailLanguage");
+        }
+
+        public static readonly DetailLanguageConverter Singleton = new DetailLanguageConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Poster":
+                    return TypeEnum.Poster;
+                case "Backdrop":
+                    return TypeEnum.Backdrop;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            switch (value)
+            {
+                case TypeEnum.Poster:
+                    serializer.Serialize(writer, "Poster");
+                    return;
+                case TypeEnum.Backdrop:
+                    serializer.Serialize(writer, "Backdrop");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+
+    internal class ResultLanguageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ResultLanguage) || t == typeof(ResultLanguage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "en":
+                    return ResultLanguage.En;
+                case "-":
+                    return ResultLanguage.Empty;
+            }
+            throw new Exception("Cannot unmarshal type ResultLanguage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ResultLanguage)untypedValue;
+            switch (value)
+            {
+                case ResultLanguage.En:
+                    serializer.Serialize(writer, "en");
+                    return;
+                case ResultLanguage.Empty:
+                    serializer.Serialize(writer, "-");
+                    return;
+            }
+            throw new Exception("Cannot marshal type ResultLanguage");
+        }
+
+        public static readonly ResultLanguageConverter Singleton = new ResultLanguageConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/0fecf.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/0fecf.json/default/QuickType.cs
new file mode 100644
index 0000000..3f9cc12
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/0fecf.json/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("countries", Required = Required.Always)]
+        public string[] Countries { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/10be4.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/10be4.json/default/QuickType.cs
new file mode 100644
index 0000000..911779e
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/10be4.json/default/QuickType.cs
@@ -0,0 +1,426 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identifiers", Required = Required.Always)]
+        public Identifier[] Identifiers { get; set; }
+
+        [JsonProperty("keywords", Required = Required.Always)]
+        public Keyword[] Keywords { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public Link[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("other_names", Required = Required.Always)]
+        public OtherName[] OtherNames { get; set; }
+
+        [JsonProperty("superseded_by", Required = Required.AllowNull)]
+        public string? SupersededBy { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text[] Text { get; set; }
+    }
+
+    public partial record Identifier
+    {
+        [JsonProperty("identifier", Required = Required.Always)]
+        public string IdentifierIdentifier { get; set; }
+
+        [JsonProperty("scheme", Required = Required.Always)]
+        public Scheme Scheme { get; set; }
+    }
+
+    public partial record Link
+    {
+        [JsonProperty("note", Required = Required.Always)]
+        public Note Note { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record OtherName
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("note", Required = Required.AllowNull)]
+        public string? Note { get; set; }
+    }
+
+    public partial record Text
+    {
+        [JsonProperty("media_type", Required = Required.Always)]
+        public MediaType MediaType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public Title Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum Scheme { Spdx, Trove, Dep5 };
+
+    public enum Keyword { OsiApproved, Discouraged, Redundant, Miscellaneous, NonReusable, Obsolete, Popular, Permissive, Retired, SpecialPurpose, Copyleft, International };
+
+    public enum Note { OsiPage, TlDrLegal, WikipediaPage, NoteWikipediaPage, MozillaPage, OsetFoundationPage };
+
+    public enum MediaType { TextHtml, TextPlain, ApplicationPdf };
+
+    public enum Title { Html, PlainText, Pdf };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                SchemeConverter.Singleton,
+                KeywordConverter.Singleton,
+                NoteConverter.Singleton,
+                MediaTypeConverter.Singleton,
+                TitleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class SchemeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scheme) || t == typeof(Scheme?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "SPDX":
+                    return Scheme.Spdx;
+                case "Trove":
+                    return Scheme.Trove;
+                case "DEP5":
+                    return Scheme.Dep5;
+            }
+            throw new Exception("Cannot unmarshal type Scheme");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Scheme)untypedValue;
+            switch (value)
+            {
+                case Scheme.Spdx:
+                    serializer.Serialize(writer, "SPDX");
+                    return;
+                case Scheme.Trove:
+                    serializer.Serialize(writer, "Trove");
+                    return;
+                case Scheme.Dep5:
+                    serializer.Serialize(writer, "DEP5");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Scheme");
+        }
+
+        public static readonly SchemeConverter Singleton = new SchemeConverter();
+    }
+
+    internal class KeywordConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Keyword) || t == typeof(Keyword?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "osi-approved":
+                    return Keyword.OsiApproved;
+                case "discouraged":
+                    return Keyword.Discouraged;
+                case "redundant":
+                    return Keyword.Redundant;
+                case "miscellaneous":
+                    return Keyword.Miscellaneous;
+                case "non-reusable":
+                    return Keyword.NonReusable;
+                case "obsolete":
+                    return Keyword.Obsolete;
+                case "popular":
+                    return Keyword.Popular;
+                case "permissive":
+                    return Keyword.Permissive;
+                case "retired":
+                    return Keyword.Retired;
+                case "special-purpose":
+                    return Keyword.SpecialPurpose;
+                case "copyleft":
+                    return Keyword.Copyleft;
+                case "international":
+                    return Keyword.International;
+            }
+            throw new Exception("Cannot unmarshal type Keyword");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Keyword)untypedValue;
+            switch (value)
+            {
+                case Keyword.OsiApproved:
+                    serializer.Serialize(writer, "osi-approved");
+                    return;
+                case Keyword.Discouraged:
+                    serializer.Serialize(writer, "discouraged");
+                    return;
+                case Keyword.Redundant:
+                    serializer.Serialize(writer, "redundant");
+                    return;
+                case Keyword.Miscellaneous:
+                    serializer.Serialize(writer, "miscellaneous");
+                    return;
+                case Keyword.NonReusable:
+                    serializer.Serialize(writer, "non-reusable");
+                    return;
+                case Keyword.Obsolete:
+                    serializer.Serialize(writer, "obsolete");
+                    return;
+                case Keyword.Popular:
+                    serializer.Serialize(writer, "popular");
+                    return;
+                case Keyword.Permissive:
+                    serializer.Serialize(writer, "permissive");
+                    return;
+                case Keyword.Retired:
+                    serializer.Serialize(writer, "retired");
+                    return;
+                case Keyword.SpecialPurpose:
+                    serializer.Serialize(writer, "special-purpose");
+                    return;
+                case Keyword.Copyleft:
+                    serializer.Serialize(writer, "copyleft");
+                    return;
+                case Keyword.International:
+                    serializer.Serialize(writer, "international");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Keyword");
+        }
+
+        public static readonly KeywordConverter Singleton = new KeywordConverter();
+    }
+
+    internal class NoteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Note) || t == typeof(Note?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "OSI Page":
+                    return Note.OsiPage;
+                case "tl;dr legal":
+                    return Note.TlDrLegal;
+                case "Wikipedia page":
+                    return Note.WikipediaPage;
+                case "Wikipedia Page":
+                    return Note.NoteWikipediaPage;
+                case "Mozilla Page":
+                    return Note.MozillaPage;
+                case "OSET Foundation Page":
+                    return Note.OsetFoundationPage;
+            }
+            throw new Exception("Cannot unmarshal type Note");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Note)untypedValue;
+            switch (value)
+            {
+                case Note.OsiPage:
+                    serializer.Serialize(writer, "OSI Page");
+                    return;
+                case Note.TlDrLegal:
+                    serializer.Serialize(writer, "tl;dr legal");
+                    return;
+                case Note.WikipediaPage:
+                    serializer.Serialize(writer, "Wikipedia page");
+                    return;
+                case Note.NoteWikipediaPage:
+                    serializer.Serialize(writer, "Wikipedia Page");
+                    return;
+                case Note.MozillaPage:
+                    serializer.Serialize(writer, "Mozilla Page");
+                    return;
+                case Note.OsetFoundationPage:
+                    serializer.Serialize(writer, "OSET Foundation Page");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Note");
+        }
+
+        public static readonly NoteConverter Singleton = new NoteConverter();
+    }
+
+    internal class MediaTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MediaType) || t == typeof(MediaType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "text/html":
+                    return MediaType.TextHtml;
+                case "text/plain":
+                    return MediaType.TextPlain;
+                case "application/pdf":
+                    return MediaType.ApplicationPdf;
+            }
+            throw new Exception("Cannot unmarshal type MediaType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (MediaType)untypedValue;
+            switch (value)
+            {
+                case MediaType.TextHtml:
+                    serializer.Serialize(writer, "text/html");
+                    return;
+                case MediaType.TextPlain:
+                    serializer.Serialize(writer, "text/plain");
+                    return;
+                case MediaType.ApplicationPdf:
+                    serializer.Serialize(writer, "application/pdf");
+                    return;
+            }
+            throw new Exception("Cannot marshal type MediaType");
+        }
+
+        public static readonly MediaTypeConverter Singleton = new MediaTypeConverter();
+    }
+
+    internal class TitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Title) || t == typeof(Title?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "HTML":
+                    return Title.Html;
+                case "Plain Text":
+                    return Title.PlainText;
+                case "PDF":
+                    return Title.Pdf;
+            }
+            throw new Exception("Cannot unmarshal type Title");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Title)untypedValue;
+            switch (value)
+            {
+                case Title.Html:
+                    serializer.Serialize(writer, "HTML");
+                    return;
+                case Title.PlainText:
+                    serializer.Serialize(writer, "Plain Text");
+                    return;
+                case Title.Pdf:
+                    serializer.Serialize(writer, "PDF");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Title");
+        }
+
+        public static readonly TitleConverter Singleton = new TitleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/112b5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/112b5.json/default/QuickType.cs
new file mode 100644
index 0000000..543b9bd
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/112b5.json/default/QuickType.cs
@@ -0,0 +1,89 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("args", Required = Required.Always)]
+        public Args Args { get; set; }
+
+        [JsonProperty("headers", Required = Required.Always)]
+        public Headers Headers { get; set; }
+
+        [JsonProperty("origin", Required = Required.Always)]
+        public string Origin { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Args
+    {
+    }
+
+    public partial record Headers
+    {
+        [JsonProperty("Accept-Encoding", Required = Required.Always)]
+        public string AcceptEncoding { get; set; }
+
+        [JsonProperty("Connection", Required = Required.Always)]
+        public string Connection { get; set; }
+
+        [JsonProperty("Host", Required = Required.Always)]
+        public string Host { get; set; }
+
+        [JsonProperty("User-Agent", Required = Required.Always)]
+        public string UserAgent { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/127a1.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/127a1.json/default/QuickType.cs
new file mode 100644
index 0000000..5f05e90
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/127a1.json/default/QuickType.cs
@@ -0,0 +1,485 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("pagination", Required = Required.Always)]
+        public Pagination Pagination { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("bitly_gif_url", Required = Required.Always)]
+        public Uri BitlyGifUrl { get; set; }
+
+        [JsonProperty("bitly_url", Required = Required.Always)]
+        public Uri BitlyUrl { get; set; }
+
+        [JsonProperty("content_url", Required = Required.Always)]
+        public string ContentUrl { get; set; }
+
+        [JsonProperty("embed_url", Required = Required.Always)]
+        public Uri EmbedUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Images Images { get; set; }
+
+        [JsonProperty("import_datetime", Required = Required.Always)]
+        public string ImportDatetime { get; set; }
+
+        [JsonProperty("is_indexable", Required = Required.Always)]
+        public long IsIndexable { get; set; }
+
+        [JsonProperty("rating", Required = Required.Always)]
+        public Rating Rating { get; set; }
+
+        [JsonProperty("slug", Required = Required.Always)]
+        public string Slug { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public string Source { get; set; }
+
+        [JsonProperty("source_post_url", Required = Required.Always)]
+        public string SourcePostUrl { get; set; }
+
+        [JsonProperty("source_tld", Required = Required.Always)]
+        public string SourceTld { get; set; }
+
+        [JsonProperty("trending_datetime", Required = Required.Always)]
+        public string TrendingDatetime { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public User? User { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public Username Username { get; set; }
+    }
+
+    public partial record Images
+    {
+        [JsonProperty("downsized", Required = Required.Always)]
+        public The480_WStill Downsized { get; set; }
+
+        [JsonProperty("downsized_large", Required = Required.Always)]
+        public The480_WStill DownsizedLarge { get; set; }
+
+        [JsonProperty("downsized_medium", Required = Required.Always)]
+        public The480_WStill DownsizedMedium { get; set; }
+
+        [JsonProperty("downsized_small", Required = Required.Always)]
+        public DownsizedSmall DownsizedSmall { get; set; }
+
+        [JsonProperty("downsized_still", Required = Required.Always)]
+        public The480_WStill DownsizedStill { get; set; }
+
+        [JsonProperty("fixed_height", Required = Required.Always)]
+        public FixedHeight FixedHeight { get; set; }
+
+        [JsonProperty("fixed_height_downsampled", Required = Required.Always)]
+        public FixedHeight FixedHeightDownsampled { get; set; }
+
+        [JsonProperty("fixed_height_small", Required = Required.Always)]
+        public FixedHeight FixedHeightSmall { get; set; }
+
+        [JsonProperty("fixed_height_small_still", Required = Required.Always)]
+        public The480_WStill FixedHeightSmallStill { get; set; }
+
+        [JsonProperty("fixed_height_still", Required = Required.Always)]
+        public The480_WStill FixedHeightStill { get; set; }
+
+        [JsonProperty("fixed_width", Required = Required.Always)]
+        public FixedHeight FixedWidth { get; set; }
+
+        [JsonProperty("fixed_width_downsampled", Required = Required.Always)]
+        public FixedHeight FixedWidthDownsampled { get; set; }
+
+        [JsonProperty("fixed_width_small", Required = Required.Always)]
+        public FixedHeight FixedWidthSmall { get; set; }
+
+        [JsonProperty("fixed_width_small_still", Required = Required.Always)]
+        public The480_WStill FixedWidthSmallStill { get; set; }
+
+        [JsonProperty("fixed_width_still", Required = Required.Always)]
+        public The480_WStill FixedWidthStill { get; set; }
+
+        [JsonProperty("looping", Required = Required.Always)]
+        public Looping Looping { get; set; }
+
+        [JsonProperty("original", Required = Required.Always)]
+        public FixedHeight Original { get; set; }
+
+        [JsonProperty("original_mp4", Required = Required.Always)]
+        public DownsizedSmall OriginalMp4 { get; set; }
+
+        [JsonProperty("original_still", Required = Required.Always)]
+        public The480_WStill OriginalStill { get; set; }
+
+        [JsonProperty("preview", Required = Required.Always)]
+        public DownsizedSmall Preview { get; set; }
+
+        [JsonProperty("preview_gif", Required = Required.Always)]
+        public The480_WStill PreviewGif { get; set; }
+
+        [JsonProperty("preview_webp", Required = Required.Always)]
+        public The480_WStill PreviewWebp { get; set; }
+
+        [JsonProperty("480w_still", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public The480_WStill? The480WStill { get; set; }
+    }
+
+    public partial record The480_WStill
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record DownsizedSmall
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record FixedHeight
+    {
+        [JsonProperty("frames", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Frames { get; set; }
+
+        [JsonProperty("hash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Hash { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Uri? Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Mp4Size { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("webp", Required = Required.Always)]
+        public Uri Webp { get; set; }
+
+        [JsonProperty("webp_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long WebpSize { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Looping
+    {
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+    }
+
+    public partial record User
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("banner_url", Required = Required.Always)]
+        public string BannerUrl { get; set; }
+
+        [JsonProperty("display_name", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("profile_url", Required = Required.Always)]
+        public Uri ProfileUrl { get; set; }
+
+        [JsonProperty("twitter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Twitter { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public Username Username { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("msg", Required = Required.Always)]
+        public string Msg { get; set; }
+
+        [JsonProperty("response_id", Required = Required.Always)]
+        public string ResponseId { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Pagination
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("total_count", Required = Required.Always)]
+        public long TotalCount { get; set; }
+    }
+
+    public enum Rating { G };
+
+    public enum TypeEnum { Gif };
+
+    public enum Username { Empty, Thedailyshow, Studiosoriginals, Disneyzootopia };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                RatingConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                UsernameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RatingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rating) || t == typeof(Rating?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "g")
+            {
+                return Rating.G;
+            }
+            throw new Exception("Cannot unmarshal type Rating");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Rating)untypedValue;
+            if (value == Rating.G)
+            {
+                serializer.Serialize(writer, "g");
+                return;
+            }
+            throw new Exception("Cannot marshal type Rating");
+        }
+
+        public static readonly RatingConverter Singleton = new RatingConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "gif")
+            {
+                return TypeEnum.Gif;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.Gif)
+            {
+                serializer.Serialize(writer, "gif");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+
+    internal class UsernameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Username) || t == typeof(Username?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Username.Empty;
+                case "thedailyshow":
+                    return Username.Thedailyshow;
+                case "studiosoriginals":
+                    return Username.Studiosoriginals;
+                case "disneyzootopia":
+                    return Username.Disneyzootopia;
+            }
+            throw new Exception("Cannot unmarshal type Username");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Username)untypedValue;
+            switch (value)
+            {
+                case Username.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Username.Thedailyshow:
+                    serializer.Serialize(writer, "thedailyshow");
+                    return;
+                case Username.Studiosoriginals:
+                    serializer.Serialize(writer, "studiosoriginals");
+                    return;
+                case Username.Disneyzootopia:
+                    serializer.Serialize(writer, "disneyzootopia");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Username");
+        }
+
+        public static readonly UsernameConverter Singleton = new UsernameConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/13d8d.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/13d8d.json/default/QuickType.cs
new file mode 100644
index 0000000..be2df3e
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/13d8d.json/default/QuickType.cs
@@ -0,0 +1,115 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("category", Required = Required.Always)]
+        public string Category { get; set; }
+
+        [JsonProperty("context", Required = Required.Always)]
+        public string Context { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("location_subtype", Required = Required.Always)]
+        public string LocationSubtype { get; set; }
+
+        [JsonProperty("location_type", Required = Required.Always)]
+        public string LocationType { get; set; }
+
+        [JsonProperty("month", Required = Required.Always)]
+        public string Month { get; set; }
+
+        [JsonProperty("outcome_status", Required = Required.Always)]
+        public OutcomeStatus OutcomeStatus { get; set; }
+
+        [JsonProperty("persistent_id", Required = Required.Always)]
+        public string PersistentId { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("latitude", Required = Required.Always)]
+        public string Latitude { get; set; }
+
+        [JsonProperty("longitude", Required = Required.Always)]
+        public string Longitude { get; set; }
+
+        [JsonProperty("street", Required = Required.Always)]
+        public Street Street { get; set; }
+    }
+
+    public partial record Street
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record OutcomeStatus
+    {
+        [JsonProperty("category", Required = Required.Always)]
+        public string Category { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/14d38.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/14d38.json/default/QuickType.cs
new file mode 100644
index 0000000..d34e42f
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/14d38.json/default/QuickType.cs
@@ -0,0 +1,76 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("headers", Required = Required.Always)]
+        public Headers Headers { get; set; }
+    }
+
+    public partial record Headers
+    {
+        [JsonProperty("Accept-Encoding", Required = Required.Always)]
+        public string AcceptEncoding { get; set; }
+
+        [JsonProperty("Connection", Required = Required.Always)]
+        public string Connection { get; set; }
+
+        [JsonProperty("Host", Required = Required.Always)]
+        public string Host { get; set; }
+
+        [JsonProperty("User-Agent", Required = Required.Always)]
+        public string UserAgent { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/167d6.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/167d6.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/167d6.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/16bc5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/16bc5.json/default/QuickType.cs
new file mode 100644
index 0000000..1069da3
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/16bc5.json/default/QuickType.cs
@@ -0,0 +1,354 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/176f1.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/176f1.json/default/QuickType.cs
new file mode 100644
index 0000000..b48ff5b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/176f1.json/default/QuickType.cs
@@ -0,0 +1,144 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("message", Required = Required.Always)]
+        public object[] Message { get; set; }
+
+        [JsonProperty("responseTime", Required = Required.Always)]
+        public long ResponseTime { get; set; }
+
+        [JsonProperty("Results", Required = Required.Always)]
+        public Results Results { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public string Status { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("series", Required = Required.Always)]
+        public Series[] Series { get; set; }
+    }
+
+    public partial record Series
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[] Data { get; set; }
+
+        [JsonProperty("seriesID", Required = Required.Always)]
+        public string SeriesId { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("footnotes", Required = Required.Always)]
+        public Footnote[] Footnotes { get; set; }
+
+        [JsonProperty("period", Required = Required.Always)]
+        public string Period { get; set; }
+
+        [JsonProperty("periodName", Required = Required.Always)]
+        public string PeriodName { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+
+        [JsonProperty("year", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Year { get; set; }
+    }
+
+    public partial record Footnote
+    {
+        [JsonProperty("code", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Code { get; set; }
+
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/1a7f5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/1a7f5.json/default/QuickType.cs
new file mode 100644
index 0000000..80f8e48
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/1a7f5.json/default/QuickType.cs
@@ -0,0 +1,113 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("age", Required = Required.Always)]
+        public long Age { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("females", Required = Required.Always)]
+        public long Females { get; set; }
+
+        [JsonProperty("males", Required = Required.Always)]
+        public long Males { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+
+        [JsonProperty("year", Required = Required.Always)]
+        public long Year { get; set; }
+    }
+
+    public enum Country { UnitedStates };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CountryConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CountryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Country) || t == typeof(Country?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "United States")
+            {
+                return Country.UnitedStates;
+            }
+            throw new Exception("Cannot unmarshal type Country");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Country)untypedValue;
+            if (value == Country.UnitedStates)
+            {
+                serializer.Serialize(writer, "United States");
+                return;
+            }
+            throw new Exception("Cannot marshal type Country");
+        }
+
+        public static readonly CountryConverter Singleton = new CountryConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/1b28c.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/1b28c.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/1b28c.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/1b409.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/1b409.json/default/QuickType.cs
new file mode 100644
index 0000000..07aeee1
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/1b409.json/default/QuickType.cs
@@ -0,0 +1,570 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("objects", Required = Required.Always)]
+        public Object[] Objects { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("limit", Required = Required.Always)]
+        public long Limit { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("total_count", Required = Required.Always)]
+        public long TotalCount { get; set; }
+    }
+
+    public partial record Object
+    {
+        [JsonProperty("caucus", Required = Required.AllowNull)]
+        public object Caucus { get; set; }
+
+        [JsonProperty("congress_numbers", Required = Required.Always)]
+        public long[] CongressNumbers { get; set; }
+
+        [JsonProperty("current", Required = Required.Always)]
+        public bool Current { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("district", Required = Required.Always)]
+        public long District { get; set; }
+
+        [JsonProperty("enddate", Required = Required.Always)]
+        public DateTimeOffset Enddate { get; set; }
+
+        [JsonProperty("extra", Required = Required.Always)]
+        public Extra Extra { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("leadership_title", Required = Required.AllowNull)]
+        public string? LeadershipTitle { get; set; }
+
+        [JsonProperty("party", Required = Required.Always)]
+        public Party Party { get; set; }
+
+        [JsonProperty("person", Required = Required.Always)]
+        public Person Person { get; set; }
+
+        [JsonProperty("phone", Required = Required.Always)]
+        public string Phone { get; set; }
+
+        [JsonProperty("role_type", Required = Required.Always)]
+        public RoleType RoleType { get; set; }
+
+        [JsonProperty("role_type_label", Required = Required.Always)]
+        public RoleTypeLabel RoleTypeLabel { get; set; }
+
+        [JsonProperty("senator_class", Required = Required.AllowNull)]
+        public object SenatorClass { get; set; }
+
+        [JsonProperty("senator_rank", Required = Required.AllowNull)]
+        public object SenatorRank { get; set; }
+
+        [JsonProperty("startdate", Required = Required.Always)]
+        public DateTimeOffset Startdate { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public Title Title { get; set; }
+
+        [JsonProperty("title_long", Required = Required.Always)]
+        public RoleTypeLabel TitleLong { get; set; }
+
+        [JsonProperty("website", Required = Required.Always)]
+        public Uri Website { get; set; }
+    }
+
+    public partial record Extra
+    {
+        [JsonProperty("address", Required = Required.Always)]
+        public string Address { get; set; }
+
+        [JsonProperty("contact_form", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Uri? ContactForm { get; set; }
+
+        [JsonProperty("fax")]
+        public string? Fax { get; set; }
+
+        [JsonProperty("office", Required = Required.Always)]
+        public string Office { get; set; }
+
+        [JsonProperty("rss_url", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? RssUrl { get; set; }
+    }
+
+    public partial record Person
+    {
+        [JsonProperty("bioguideid", Required = Required.Always)]
+        public string Bioguideid { get; set; }
+
+        [JsonProperty("birthday", Required = Required.Always)]
+        public DateTimeOffset Birthday { get; set; }
+
+        [JsonProperty("cspanid", Required = Required.Always)]
+        public long Cspanid { get; set; }
+
+        [JsonProperty("firstname", Required = Required.Always)]
+        public string Firstname { get; set; }
+
+        [JsonProperty("gender", Required = Required.Always)]
+        public Gender Gender { get; set; }
+
+        [JsonProperty("gender_label", Required = Required.Always)]
+        public GenderLabel GenderLabel { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("lastname", Required = Required.Always)]
+        public string Lastname { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("middlename", Required = Required.Always)]
+        public string Middlename { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("namemod", Required = Required.Always)]
+        public Namemod Namemod { get; set; }
+
+        [JsonProperty("nickname", Required = Required.Always)]
+        public string Nickname { get; set; }
+
+        [JsonProperty("osid", Required = Required.Always)]
+        public string Osid { get; set; }
+
+        [JsonProperty("pvsid", Required = Required.AllowNull)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Pvsid { get; set; }
+
+        [JsonProperty("sortname", Required = Required.Always)]
+        public string Sortname { get; set; }
+
+        [JsonProperty("twitterid", Required = Required.AllowNull)]
+        public string? Twitterid { get; set; }
+
+        [JsonProperty("youtubeid", Required = Required.AllowNull)]
+        public string? Youtubeid { get; set; }
+    }
+
+    public enum Party { Republican, Democrat };
+
+    public enum Gender { Male, Female };
+
+    public enum GenderLabel { Male, Female };
+
+    public enum Namemod { Empty, Jr, Ii, Iii, Iv };
+
+    public enum RoleType { Representative };
+
+    public enum RoleTypeLabel { Representative, Delegate, ResidentCommissioner };
+
+    public enum Title { Rep, Commish };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                PartyConverter.Singleton,
+                GenderConverter.Singleton,
+                GenderLabelConverter.Singleton,
+                NamemodConverter.Singleton,
+                RoleTypeConverter.Singleton,
+                RoleTypeLabelConverter.Singleton,
+                TitleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PartyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Party) || t == typeof(Party?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Republican":
+                    return Party.Republican;
+                case "Democrat":
+                    return Party.Democrat;
+            }
+            throw new Exception("Cannot unmarshal type Party");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Party)untypedValue;
+            switch (value)
+            {
+                case Party.Republican:
+                    serializer.Serialize(writer, "Republican");
+                    return;
+                case Party.Democrat:
+                    serializer.Serialize(writer, "Democrat");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Party");
+        }
+
+        public static readonly PartyConverter Singleton = new PartyConverter();
+    }
+
+    internal class GenderConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gender) || t == typeof(Gender?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "male":
+                    return Gender.Male;
+                case "female":
+                    return Gender.Female;
+            }
+            throw new Exception("Cannot unmarshal type Gender");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Gender)untypedValue;
+            switch (value)
+            {
+                case Gender.Male:
+                    serializer.Serialize(writer, "male");
+                    return;
+                case Gender.Female:
+                    serializer.Serialize(writer, "female");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Gender");
+        }
+
+        public static readonly GenderConverter Singleton = new GenderConverter();
+    }
+
+    internal class GenderLabelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GenderLabel) || t == typeof(GenderLabel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Male":
+                    return GenderLabel.Male;
+                case "Female":
+                    return GenderLabel.Female;
+            }
+            throw new Exception("Cannot unmarshal type GenderLabel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GenderLabel)untypedValue;
+            switch (value)
+            {
+                case GenderLabel.Male:
+                    serializer.Serialize(writer, "Male");
+                    return;
+                case GenderLabel.Female:
+                    serializer.Serialize(writer, "Female");
+                    return;
+            }
+            throw new Exception("Cannot marshal type GenderLabel");
+        }
+
+        public static readonly GenderLabelConverter Singleton = new GenderLabelConverter();
+    }
+
+    internal class NamemodConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Namemod) || t == typeof(Namemod?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Namemod.Empty;
+                case "Jr.":
+                    return Namemod.Jr;
+                case "II":
+                    return Namemod.Ii;
+                case "III":
+                    return Namemod.Iii;
+                case "IV":
+                    return Namemod.Iv;
+            }
+            throw new Exception("Cannot unmarshal type Namemod");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Namemod)untypedValue;
+            switch (value)
+            {
+                case Namemod.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Namemod.Jr:
+                    serializer.Serialize(writer, "Jr.");
+                    return;
+                case Namemod.Ii:
+                    serializer.Serialize(writer, "II");
+                    return;
+                case Namemod.Iii:
+                    serializer.Serialize(writer, "III");
+                    return;
+                case Namemod.Iv:
+                    serializer.Serialize(writer, "IV");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Namemod");
+        }
+
+        public static readonly NamemodConverter Singleton = new NamemodConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RoleTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RoleType) || t == typeof(RoleType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "representative")
+            {
+                return RoleType.Representative;
+            }
+            throw new Exception("Cannot unmarshal type RoleType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (RoleType)untypedValue;
+            if (value == RoleType.Representative)
+            {
+                serializer.Serialize(writer, "representative");
+                return;
+            }
+            throw new Exception("Cannot marshal type RoleType");
+        }
+
+        public static readonly RoleTypeConverter Singleton = new RoleTypeConverter();
+    }
+
+    internal class RoleTypeLabelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RoleTypeLabel) || t == typeof(RoleTypeLabel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Representative":
+                    return RoleTypeLabel.Representative;
+                case "Delegate":
+                    return RoleTypeLabel.Delegate;
+                case "Resident Commissioner":
+                    return RoleTypeLabel.ResidentCommissioner;
+            }
+            throw new Exception("Cannot unmarshal type RoleTypeLabel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (RoleTypeLabel)untypedValue;
+            switch (value)
+            {
+                case RoleTypeLabel.Representative:
+                    serializer.Serialize(writer, "Representative");
+                    return;
+                case RoleTypeLabel.Delegate:
+                    serializer.Serialize(writer, "Delegate");
+                    return;
+                case RoleTypeLabel.ResidentCommissioner:
+                    serializer.Serialize(writer, "Resident Commissioner");
+                    return;
+            }
+            throw new Exception("Cannot marshal type RoleTypeLabel");
+        }
+
+        public static readonly RoleTypeLabelConverter Singleton = new RoleTypeLabelConverter();
+    }
+
+    internal class TitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Title) || t == typeof(Title?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Rep.":
+                    return Title.Rep;
+                case "Commish.":
+                    return Title.Commish;
+            }
+            throw new Exception("Cannot unmarshal type Title");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Title)untypedValue;
+            switch (value)
+            {
+                case Title.Rep:
+                    serializer.Serialize(writer, "Rep.");
+                    return;
+                case Title.Commish:
+                    serializer.Serialize(writer, "Commish.");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Title");
+        }
+
+        public static readonly TitleConverter Singleton = new TitleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/2465e.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/2465e.json/default/QuickType.cs
new file mode 100644
index 0000000..8aa49e7
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/2465e.json/default/QuickType.cs
@@ -0,0 +1,208 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("basePath", Required = Required.Always)]
+        public string BasePath { get; set; }
+
+        [JsonProperty("definitions", Required = Required.Always)]
+        public Definitions Definitions { get; set; }
+
+        [JsonProperty("host", Required = Required.Always)]
+        public string Host { get; set; }
+
+        [JsonProperty("info", Required = Required.Always)]
+        public Info Info { get; set; }
+
+        [JsonProperty("paths", Required = Required.Always)]
+        public Paths Paths { get; set; }
+
+        [JsonProperty("produces", Required = Required.Always)]
+        public string[] Produces { get; set; }
+
+        [JsonProperty("schemes", Required = Required.Always)]
+        public string[] Schemes { get; set; }
+
+        [JsonProperty("swagger", Required = Required.Always)]
+        public string Swagger { get; set; }
+    }
+
+    public partial record Definitions
+    {
+        [JsonProperty("Taxonomy", Required = Required.Always)]
+        public Taxonomy Taxonomy { get; set; }
+    }
+
+    public partial record Taxonomy
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public Properties Properties { get; set; }
+    }
+
+    public partial record Properties
+    {
+        [JsonProperty("annotations", Required = Required.Always)]
+        public Annotations Annotations { get; set; }
+
+        [JsonProperty("datatype_properties", Required = Required.Always)]
+        public Annotations DatatypeProperties { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public Annotations Id { get; set; }
+
+        [JsonProperty("label", Required = Required.Always)]
+        public Annotations Label { get; set; }
+
+        [JsonProperty("sub_class_of", Required = Required.Always)]
+        public Annotations SubClassOf { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public Annotations Type { get; set; }
+    }
+
+    public partial record Annotations
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Info
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("version", Required = Required.Always)]
+        public string Version { get; set; }
+    }
+
+    public partial record Paths
+    {
+        [JsonProperty("/ita_taxonomies/search", Required = Required.Always)]
+        public ItaTaxonomiesSearch ItaTaxonomiesSearch { get; set; }
+    }
+
+    public partial record ItaTaxonomiesSearch
+    {
+        [JsonProperty("get", Required = Required.Always)]
+        public Get Get { get; set; }
+    }
+
+    public partial record Get
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("parameters", Required = Required.Always)]
+        public Parameter[] Parameters { get; set; }
+
+        [JsonProperty("responses", Required = Required.Always)]
+        public Responses Responses { get; set; }
+
+        [JsonProperty("summary", Required = Required.Always)]
+        public string Summary { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+    }
+
+    public partial record Parameter
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public string Format { get; set; }
+
+        [JsonProperty("in", Required = Required.Always)]
+        public string In { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("required", Required = Required.Always)]
+        public bool ParameterRequired { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Responses
+    {
+        [JsonProperty("200", Required = Required.Always)]
+        public The200 The200 { get; set; }
+    }
+
+    public partial record The200
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("schema", Required = Required.Always)]
+        public Schema Schema { get; set; }
+    }
+
+    public partial record Schema
+    {
+        [JsonProperty("$ref", Required = Required.Always)]
+        public string Ref { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/24f52.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/24f52.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/24f52.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/262f0.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/262f0.json/default/QuickType.cs
new file mode 100644
index 0000000..5f528bc
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/262f0.json/default/QuickType.cs
@@ -0,0 +1,403 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public enum Text { MostlyCloudy, Rain, PartlyCloudy };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class TextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Text) || t == typeof(Text?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Mostly Cloudy":
+                    return Text.MostlyCloudy;
+                case "Rain":
+                    return Text.Rain;
+                case "Partly Cloudy":
+                    return Text.PartlyCloudy;
+            }
+            throw new Exception("Cannot unmarshal type Text");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Text)untypedValue;
+            switch (value)
+            {
+                case Text.MostlyCloudy:
+                    serializer.Serialize(writer, "Mostly Cloudy");
+                    return;
+                case Text.Rain:
+                    serializer.Serialize(writer, "Rain");
+                    return;
+                case Text.PartlyCloudy:
+                    serializer.Serialize(writer, "Partly Cloudy");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Text");
+        }
+
+        public static readonly TextConverter Singleton = new TextConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/26b49.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/26b49.json/default/QuickType.cs
new file mode 100644
index 0000000..e27f98b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/26b49.json/default/QuickType.cs
@@ -0,0 +1,451 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("pagination", Required = Required.Always)]
+        public Pagination Pagination { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("bitly_gif_url", Required = Required.Always)]
+        public string BitlyGifUrl { get; set; }
+
+        [JsonProperty("bitly_url", Required = Required.Always)]
+        public string BitlyUrl { get; set; }
+
+        [JsonProperty("content_url", Required = Required.Always)]
+        public string ContentUrl { get; set; }
+
+        [JsonProperty("embed_url", Required = Required.Always)]
+        public Uri EmbedUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Images Images { get; set; }
+
+        [JsonProperty("import_datetime", Required = Required.Always)]
+        public string ImportDatetime { get; set; }
+
+        [JsonProperty("is_indexable", Required = Required.Always)]
+        public long IsIndexable { get; set; }
+
+        [JsonProperty("rating", Required = Required.Always)]
+        public Rating Rating { get; set; }
+
+        [JsonProperty("slug", Required = Required.Always)]
+        public string Slug { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public string Source { get; set; }
+
+        [JsonProperty("source_post_url", Required = Required.Always)]
+        public string SourcePostUrl { get; set; }
+
+        [JsonProperty("source_tld", Required = Required.Always)]
+        public string SourceTld { get; set; }
+
+        [JsonProperty("trending_datetime", Required = Required.Always)]
+        public string TrendingDatetime { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public User? User { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public string Username { get; set; }
+    }
+
+    public partial record Images
+    {
+        [JsonProperty("downsized", Required = Required.Always)]
+        public The480_WStill Downsized { get; set; }
+
+        [JsonProperty("downsized_large", Required = Required.Always)]
+        public The480_WStill DownsizedLarge { get; set; }
+
+        [JsonProperty("downsized_medium", Required = Required.Always)]
+        public The480_WStill DownsizedMedium { get; set; }
+
+        [JsonProperty("downsized_small", Required = Required.Always)]
+        public DownsizedSmall DownsizedSmall { get; set; }
+
+        [JsonProperty("downsized_still", Required = Required.Always)]
+        public The480_WStill DownsizedStill { get; set; }
+
+        [JsonProperty("fixed_height", Required = Required.Always)]
+        public FixedHeight FixedHeight { get; set; }
+
+        [JsonProperty("fixed_height_downsampled", Required = Required.Always)]
+        public FixedHeight FixedHeightDownsampled { get; set; }
+
+        [JsonProperty("fixed_height_small", Required = Required.Always)]
+        public FixedHeight FixedHeightSmall { get; set; }
+
+        [JsonProperty("fixed_height_small_still", Required = Required.Always)]
+        public The480_WStill FixedHeightSmallStill { get; set; }
+
+        [JsonProperty("fixed_height_still", Required = Required.Always)]
+        public The480_WStill FixedHeightStill { get; set; }
+
+        [JsonProperty("fixed_width", Required = Required.Always)]
+        public FixedHeight FixedWidth { get; set; }
+
+        [JsonProperty("fixed_width_downsampled", Required = Required.Always)]
+        public FixedHeight FixedWidthDownsampled { get; set; }
+
+        [JsonProperty("fixed_width_small", Required = Required.Always)]
+        public FixedHeight FixedWidthSmall { get; set; }
+
+        [JsonProperty("fixed_width_small_still", Required = Required.Always)]
+        public The480_WStill FixedWidthSmallStill { get; set; }
+
+        [JsonProperty("fixed_width_still", Required = Required.Always)]
+        public The480_WStill FixedWidthStill { get; set; }
+
+        [JsonProperty("hd", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DownsizedSmall? Hd { get; set; }
+
+        [JsonProperty("looping", Required = Required.Always)]
+        public Looping Looping { get; set; }
+
+        [JsonProperty("original", Required = Required.Always)]
+        public FixedHeight Original { get; set; }
+
+        [JsonProperty("original_mp4", Required = Required.Always)]
+        public DownsizedSmall OriginalMp4 { get; set; }
+
+        [JsonProperty("original_still", Required = Required.Always)]
+        public The480_WStill OriginalStill { get; set; }
+
+        [JsonProperty("preview", Required = Required.Always)]
+        public DownsizedSmall Preview { get; set; }
+
+        [JsonProperty("preview_gif", Required = Required.Always)]
+        public The480_WStill PreviewGif { get; set; }
+
+        [JsonProperty("preview_webp", Required = Required.Always)]
+        public The480_WStill PreviewWebp { get; set; }
+
+        [JsonProperty("480w_still", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public The480_WStill? The480WStill { get; set; }
+    }
+
+    public partial record The480_WStill
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record DownsizedSmall
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record FixedHeight
+    {
+        [JsonProperty("frames", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Frames { get; set; }
+
+        [JsonProperty("hash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Hash { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Uri? Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Mp4Size { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("webp", Required = Required.Always)]
+        public Uri Webp { get; set; }
+
+        [JsonProperty("webp_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long WebpSize { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Looping
+    {
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+    }
+
+    public partial record User
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("banner_url", Required = Required.Always)]
+        public string BannerUrl { get; set; }
+
+        [JsonProperty("display_name", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("profile_url", Required = Required.Always)]
+        public Uri ProfileUrl { get; set; }
+
+        [JsonProperty("twitter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Twitter { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public string Username { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("msg", Required = Required.Always)]
+        public string Msg { get; set; }
+
+        [JsonProperty("response_id", Required = Required.Always)]
+        public string ResponseId { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Pagination
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("total_count", Required = Required.Always)]
+        public long TotalCount { get; set; }
+    }
+
+    public enum Rating { Pg, G, Pg13, Y };
+
+    public enum TypeEnum { Gif };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                RatingConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RatingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rating) || t == typeof(Rating?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "pg":
+                    return Rating.Pg;
+                case "g":
+                    return Rating.G;
+                case "pg-13":
+                    return Rating.Pg13;
+                case "y":
+                    return Rating.Y;
+            }
+            throw new Exception("Cannot unmarshal type Rating");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Rating)untypedValue;
+            switch (value)
+            {
+                case Rating.Pg:
+                    serializer.Serialize(writer, "pg");
+                    return;
+                case Rating.G:
+                    serializer.Serialize(writer, "g");
+                    return;
+                case Rating.Pg13:
+                    serializer.Serialize(writer, "pg-13");
+                    return;
+                case Rating.Y:
+                    serializer.Serialize(writer, "y");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Rating");
+        }
+
+        public static readonly RatingConverter Singleton = new RatingConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "gif")
+            {
+                return TypeEnum.Gif;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.Gif)
+            {
+                serializer.Serialize(writer, "gif");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/26c9c.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/26c9c.json/default/QuickType.cs
new file mode 100644
index 0000000..5dead51
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/26c9c.json/default/QuickType.cs
@@ -0,0 +1,600 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[][] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("view", Required = Required.Always)]
+        public View View { get; set; }
+    }
+
+    public partial record View
+    {
+        [JsonProperty("attribution", Required = Required.Always)]
+        public string Attribution { get; set; }
+
+        [JsonProperty("attributionLink", Required = Required.Always)]
+        public Uri AttributionLink { get; set; }
+
+        [JsonProperty("averageRating", Required = Required.Always)]
+        public long AverageRating { get; set; }
+
+        [JsonProperty("category", Required = Required.Always)]
+        public string Category { get; set; }
+
+        [JsonProperty("columns", Required = Required.Always)]
+        public Column[] Columns { get; set; }
+
+        [JsonProperty("createdAt", Required = Required.Always)]
+        public long CreatedAt { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("displayType", Required = Required.Always)]
+        public string DisplayType { get; set; }
+
+        [JsonProperty("downloadCount", Required = Required.Always)]
+        public long DownloadCount { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("grants", Required = Required.Always)]
+        public Grant[] Grants { get; set; }
+
+        [JsonProperty("hideFromCatalog", Required = Required.Always)]
+        public bool HideFromCatalog { get; set; }
+
+        [JsonProperty("hideFromDataJson", Required = Required.Always)]
+        public bool HideFromDataJson { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("indexUpdatedAt", Required = Required.Always)]
+        public long IndexUpdatedAt { get; set; }
+
+        [JsonProperty("locale", Required = Required.Always)]
+        public string Locale { get; set; }
+
+        [JsonProperty("metadata", Required = Required.Always)]
+        public Metadata Metadata { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("newBackend", Required = Required.Always)]
+        public bool NewBackend { get; set; }
+
+        [JsonProperty("numberOfComments", Required = Required.Always)]
+        public long NumberOfComments { get; set; }
+
+        [JsonProperty("oid", Required = Required.Always)]
+        public long Oid { get; set; }
+
+        [JsonProperty("owner", Required = Required.Always)]
+        public Owner Owner { get; set; }
+
+        [JsonProperty("provenance", Required = Required.Always)]
+        public string Provenance { get; set; }
+
+        [JsonProperty("publicationAppendEnabled", Required = Required.Always)]
+        public bool PublicationAppendEnabled { get; set; }
+
+        [JsonProperty("publicationDate", Required = Required.Always)]
+        public long PublicationDate { get; set; }
+
+        [JsonProperty("publicationGroup", Required = Required.Always)]
+        public long PublicationGroup { get; set; }
+
+        [JsonProperty("publicationStage", Required = Required.Always)]
+        public string PublicationStage { get; set; }
+
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public string[] Rights { get; set; }
+
+        [JsonProperty("rowsUpdatedAt", Required = Required.Always)]
+        public long RowsUpdatedAt { get; set; }
+
+        [JsonProperty("rowsUpdatedBy", Required = Required.Always)]
+        public string RowsUpdatedBy { get; set; }
+
+        [JsonProperty("tableAuthor", Required = Required.Always)]
+        public Owner TableAuthor { get; set; }
+
+        [JsonProperty("tableId", Required = Required.Always)]
+        public long TableId { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+
+        [JsonProperty("totalTimesRated", Required = Required.Always)]
+        public long TotalTimesRated { get; set; }
+
+        [JsonProperty("viewCount", Required = Required.Always)]
+        public long ViewCount { get; set; }
+
+        [JsonProperty("viewLastModified", Required = Required.Always)]
+        public long ViewLastModified { get; set; }
+
+        [JsonProperty("viewType", Required = Required.Always)]
+        public string ViewType { get; set; }
+    }
+
+    public partial record Column
+    {
+        [JsonProperty("cachedContents", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public CachedContents? CachedContents { get; set; }
+
+        [JsonProperty("dataTypeName", Required = Required.Always)]
+        public string DataTypeName { get; set; }
+
+        [JsonProperty("fieldName", Required = Required.Always)]
+        public string FieldName { get; set; }
+
+        [JsonProperty("flags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Flags { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public Format Format { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("position", Required = Required.Always)]
+        public long Position { get; set; }
+
+        [JsonProperty("renderTypeName", Required = Required.Always)]
+        public string RenderTypeName { get; set; }
+
+        [JsonProperty("tableColumnId", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? TableColumnId { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Width { get; set; }
+    }
+
+    public partial record CachedContents
+    {
+        [JsonProperty("average", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Average { get; set; }
+
+        [JsonProperty("largest", Required = Required.Always)]
+        public string Largest { get; set; }
+
+        [JsonProperty("non_null", Required = Required.Always)]
+        public long NonNull { get; set; }
+
+        [JsonProperty("null", Required = Required.Always)]
+        public long Null { get; set; }
+
+        [JsonProperty("smallest", Required = Required.Always)]
+        public string Smallest { get; set; }
+
+        [JsonProperty("sum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long? Sum { get; set; }
+
+        [JsonProperty("top", Required = Required.Always)]
+        public Top[] Top { get; set; }
+    }
+
+    public partial record Top
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public string Item { get; set; }
+    }
+
+    public partial record Format
+    {
+        [JsonProperty("align", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Align { get; set; }
+
+        [JsonProperty("noCommas", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool? NoCommas { get; set; }
+
+        [JsonProperty("precisionStyle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? PrecisionStyle { get; set; }
+
+        [JsonProperty("view", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? View { get; set; }
+    }
+
+    public partial record Grant
+    {
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("inherited", Required = Required.Always)]
+        public bool Inherited { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Metadata
+    {
+        [JsonProperty("attachments", Required = Required.Always)]
+        public Attachment[] Attachments { get; set; }
+
+        [JsonProperty("availableDisplayTypes", Required = Required.Always)]
+        public string[] AvailableDisplayTypes { get; set; }
+
+        [JsonProperty("custom_fields", Required = Required.Always)]
+        public CustomFields CustomFields { get; set; }
+
+        [JsonProperty("jsonQuery", Required = Required.Always)]
+        public JsonQuery JsonQuery { get; set; }
+
+        [JsonProperty("rdfSubject", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long RdfSubject { get; set; }
+
+        [JsonProperty("renderTypeConfig", Required = Required.Always)]
+        public RenderTypeConfig RenderTypeConfig { get; set; }
+    }
+
+    public partial record Attachment
+    {
+        [JsonProperty("assetId", Required = Required.Always)]
+        public string AssetId { get; set; }
+
+        [JsonProperty("blobId", Required = Required.Always)]
+        public string BlobId { get; set; }
+
+        [JsonProperty("filename", Required = Required.Always)]
+        public string Filename { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record CustomFields
+    {
+        [JsonProperty("Additional Resources", Required = Required.Always)]
+        public AdditionalResources AdditionalResources { get; set; }
+
+        [JsonProperty("Common Core", Required = Required.Always)]
+        public CommonCore CommonCore { get; set; }
+
+        [JsonProperty("Dataset Information", Required = Required.Always)]
+        public DatasetInformation DatasetInformation { get; set; }
+
+        [JsonProperty("Dataset Summary", Required = Required.Always)]
+        public DatasetSummary DatasetSummary { get; set; }
+
+        [JsonProperty("Notes", Required = Required.Always)]
+        public Notes Notes { get; set; }
+    }
+
+    public partial record AdditionalResources
+    {
+        [JsonProperty("See Also ", Required = Required.Always)]
+        public Uri AdditionalResourcesSeeAlso { get; set; }
+
+        [JsonProperty("See Also", Required = Required.Always)]
+        public Uri SeeAlso { get; set; }
+    }
+
+    public partial record CommonCore
+    {
+        [JsonProperty("Contact Email", Required = Required.Always)]
+        public string ContactEmail { get; set; }
+
+        [JsonProperty("Contact Name", Required = Required.Always)]
+        public string ContactName { get; set; }
+
+        [JsonProperty("Publisher", Required = Required.Always)]
+        public string Publisher { get; set; }
+    }
+
+    public partial record DatasetInformation
+    {
+        [JsonProperty("Agency", Required = Required.Always)]
+        public string Agency { get; set; }
+    }
+
+    public partial record DatasetSummary
+    {
+        [JsonProperty("Contact Information", Required = Required.Always)]
+        public string ContactInformation { get; set; }
+
+        [JsonProperty("Coverage", Required = Required.Always)]
+        public string Coverage { get; set; }
+
+        [JsonProperty("Data Frequency", Required = Required.Always)]
+        public string DataFrequency { get; set; }
+
+        [JsonProperty("Dataset Owner", Required = Required.Always)]
+        public string DatasetOwner { get; set; }
+
+        [JsonProperty("Granularity", Required = Required.Always)]
+        public string Granularity { get; set; }
+
+        [JsonProperty("Organization", Required = Required.Always)]
+        public string Organization { get; set; }
+
+        [JsonProperty("Posting Frequency", Required = Required.Always)]
+        public string PostingFrequency { get; set; }
+
+        [JsonProperty("Time Period", Required = Required.Always)]
+        public string TimePeriod { get; set; }
+
+        [JsonProperty("Units", Required = Required.Always)]
+        public string Units { get; set; }
+    }
+
+    public partial record Notes
+    {
+        [JsonProperty("Notes", Required = Required.Always)]
+        public string NotesNotes { get; set; }
+    }
+
+    public partial record JsonQuery
+    {
+        [JsonProperty("order", Required = Required.Always)]
+        public Order[] Order { get; set; }
+    }
+
+    public partial record Order
+    {
+        [JsonProperty("ascending", Required = Required.Always)]
+        public bool Ascending { get; set; }
+
+        [JsonProperty("columnFieldName", Required = Required.Always)]
+        public string ColumnFieldName { get; set; }
+    }
+
+    public partial record RenderTypeConfig
+    {
+        [JsonProperty("visible", Required = Required.Always)]
+        public Visible Visible { get; set; }
+    }
+
+    public partial record Visible
+    {
+        [JsonProperty("table", Required = Required.Always)]
+        public bool Table { get; set; }
+    }
+
+    public partial record Owner
+    {
+        [JsonProperty("displayName", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("profileImageUrlLarge", Required = Required.Always)]
+        public string ProfileImageUrlLarge { get; set; }
+
+        [JsonProperty("profileImageUrlMedium", Required = Required.Always)]
+        public string ProfileImageUrlMedium { get; set; }
+
+        [JsonProperty("profileImageUrlSmall", Required = Required.Always)]
+        public string ProfileImageUrlSmall { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public string[] Rights { get; set; }
+
+        [JsonProperty("roleName", Required = Required.Always)]
+        public string RoleName { get; set; }
+
+        [JsonProperty("screenName", Required = Required.Always)]
+        public string ScreenName { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("orderBys", Required = Required.Always)]
+        public OrderBy[] OrderBys { get; set; }
+    }
+
+    public partial record OrderBy
+    {
+        [JsonProperty("ascending", Required = Required.Always)]
+        public bool Ascending { get; set; }
+
+        [JsonProperty("expression", Required = Required.Always)]
+        public Expression Expression { get; set; }
+    }
+
+    public partial record Expression
+    {
+        [JsonProperty("columnId", Required = Required.Always)]
+        public long ColumnId { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial struct Datum
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Datum(long Integer) => new Datum { Integer = Integer };
+        public static implicit operator Datum(string String) => new Datum { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DatumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DatumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Datum) || t == typeof(Datum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Datum { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Datum { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Datum { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Datum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Datum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Datum");
+        }
+
+        public static readonly DatumConverter Singleton = new DatumConverter();
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/27332.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/27332.json/default/QuickType.cs
new file mode 100644
index 0000000..a45b9db
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/27332.json/default/QuickType.cs
@@ -0,0 +1,701 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public TopLevelData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public string Kind { get; set; }
+    }
+
+    public partial record TopLevelData
+    {
+        [JsonProperty("after", Required = Required.Always)]
+        public string After { get; set; }
+
+        [JsonProperty("before", Required = Required.AllowNull)]
+        public object Before { get; set; }
+
+        [JsonProperty("children", Required = Required.Always)]
+        public Child[] Children { get; set; }
+
+        [JsonProperty("modhash", Required = Required.Always)]
+        public string Modhash { get; set; }
+    }
+
+    public partial record Child
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public ChildData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    public partial record ChildData
+    {
+        [JsonProperty("approved_at_utc", Required = Required.AllowNull)]
+        public object ApprovedAtUtc { get; set; }
+
+        [JsonProperty("approved_by", Required = Required.AllowNull)]
+        public object ApprovedBy { get; set; }
+
+        [JsonProperty("archived", Required = Required.Always)]
+        public bool Archived { get; set; }
+
+        [JsonProperty("author", Required = Required.Always)]
+        public string Author { get; set; }
+
+        [JsonProperty("author_flair_css_class", Required = Required.AllowNull)]
+        public string? AuthorFlairCssClass { get; set; }
+
+        [JsonProperty("author_flair_text", Required = Required.AllowNull)]
+        public string? AuthorFlairText { get; set; }
+
+        [JsonProperty("banned_at_utc", Required = Required.AllowNull)]
+        public object BannedAtUtc { get; set; }
+
+        [JsonProperty("banned_by", Required = Required.AllowNull)]
+        public object BannedBy { get; set; }
+
+        [JsonProperty("brand_safe", Required = Required.Always)]
+        public bool BrandSafe { get; set; }
+
+        [JsonProperty("can_gild", Required = Required.Always)]
+        public bool CanGild { get; set; }
+
+        [JsonProperty("can_mod_post", Required = Required.Always)]
+        public bool CanModPost { get; set; }
+
+        [JsonProperty("clicked", Required = Required.Always)]
+        public bool Clicked { get; set; }
+
+        [JsonProperty("contest_mode", Required = Required.Always)]
+        public bool ContestMode { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public double Created { get; set; }
+
+        [JsonProperty("created_utc", Required = Required.Always)]
+        public double CreatedUtc { get; set; }
+
+        [JsonProperty("distinguished", Required = Required.AllowNull)]
+        public string? Distinguished { get; set; }
+
+        [JsonProperty("domain", Required = Required.Always)]
+        public Domain Domain { get; set; }
+
+        [JsonProperty("downs", Required = Required.Always)]
+        public long Downs { get; set; }
+
+        [JsonProperty("edited", Required = Required.Always)]
+        public bool Edited { get; set; }
+
+        [JsonProperty("gilded", Required = Required.Always)]
+        public long Gilded { get; set; }
+
+        [JsonProperty("hidden", Required = Required.Always)]
+        public bool Hidden { get; set; }
+
+        [JsonProperty("hide_score", Required = Required.Always)]
+        public bool HideScore { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("is_self", Required = Required.Always)]
+        public bool IsSelf { get; set; }
+
+        [JsonProperty("is_video", Required = Required.Always)]
+        public bool IsVideo { get; set; }
+
+        [JsonProperty("likes", Required = Required.AllowNull)]
+        public object Likes { get; set; }
+
+        [JsonProperty("link_flair_css_class", Required = Required.AllowNull)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? LinkFlairCssClass { get; set; }
+
+        [JsonProperty("link_flair_text", Required = Required.AllowNull)]
+        public string? LinkFlairText { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("media", Required = Required.AllowNull)]
+        public Media? Media { get; set; }
+
+        [JsonProperty("media_embed", Required = Required.Always)]
+        public MediaEmbed MediaEmbed { get; set; }
+
+        [JsonProperty("mod_reports", Required = Required.Always)]
+        public object[] ModReports { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("num_comments", Required = Required.Always)]
+        public long NumComments { get; set; }
+
+        [JsonProperty("num_reports", Required = Required.AllowNull)]
+        public object NumReports { get; set; }
+
+        [JsonProperty("over_18", Required = Required.Always)]
+        public bool Over18 { get; set; }
+
+        [JsonProperty("permalink", Required = Required.Always)]
+        public string Permalink { get; set; }
+
+        [JsonProperty("post_hint", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PostHint? PostHint { get; set; }
+
+        [JsonProperty("preview", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Preview? Preview { get; set; }
+
+        [JsonProperty("quarantine", Required = Required.Always)]
+        public bool Quarantine { get; set; }
+
+        [JsonProperty("removal_reason", Required = Required.AllowNull)]
+        public object RemovalReason { get; set; }
+
+        [JsonProperty("report_reasons", Required = Required.AllowNull)]
+        public object ReportReasons { get; set; }
+
+        [JsonProperty("saved", Required = Required.Always)]
+        public bool Saved { get; set; }
+
+        [JsonProperty("score", Required = Required.Always)]
+        public long Score { get; set; }
+
+        [JsonProperty("secure_media", Required = Required.AllowNull)]
+        public Media? SecureMedia { get; set; }
+
+        [JsonProperty("secure_media_embed", Required = Required.Always)]
+        public MediaEmbed SecureMediaEmbed { get; set; }
+
+        [JsonProperty("selftext", Required = Required.Always)]
+        public string Selftext { get; set; }
+
+        [JsonProperty("selftext_html", Required = Required.AllowNull)]
+        public string? SelftextHtml { get; set; }
+
+        [JsonProperty("spoiler", Required = Required.Always)]
+        public bool Spoiler { get; set; }
+
+        [JsonProperty("stickied", Required = Required.Always)]
+        public bool Stickied { get; set; }
+
+        [JsonProperty("subreddit", Required = Required.Always)]
+        public Subreddit Subreddit { get; set; }
+
+        [JsonProperty("subreddit_id", Required = Required.Always)]
+        public SubredditId SubredditId { get; set; }
+
+        [JsonProperty("subreddit_name_prefixed", Required = Required.Always)]
+        public SubredditNamePrefixed SubredditNamePrefixed { get; set; }
+
+        [JsonProperty("subreddit_type", Required = Required.Always)]
+        public SubredditType SubredditType { get; set; }
+
+        [JsonProperty("suggested_sort", Required = Required.AllowNull)]
+        public object SuggestedSort { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public string Thumbnail { get; set; }
+
+        [JsonProperty("thumbnail_height", Required = Required.AllowNull)]
+        public long? ThumbnailHeight { get; set; }
+
+        [JsonProperty("thumbnail_width", Required = Required.AllowNull)]
+        public long? ThumbnailWidth { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ups", Required = Required.Always)]
+        public long Ups { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user_reports", Required = Required.Always)]
+        public object[] UserReports { get; set; }
+
+        [JsonProperty("view_count", Required = Required.AllowNull)]
+        public object ViewCount { get; set; }
+
+        [JsonProperty("visited", Required = Required.Always)]
+        public bool Visited { get; set; }
+    }
+
+    public partial record Media
+    {
+        [JsonProperty("oembed", Required = Required.Always)]
+        public Oembed Oembed { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public Domain Type { get; set; }
+    }
+
+    public partial record Oembed
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("html", Required = Required.Always)]
+        public string Html { get; set; }
+
+        [JsonProperty("provider_name", Required = Required.Always)]
+        public string ProviderName { get; set; }
+
+        [JsonProperty("provider_url", Required = Required.Always)]
+        public Uri ProviderUrl { get; set; }
+
+        [JsonProperty("thumbnail_height", Required = Required.Always)]
+        public long ThumbnailHeight { get; set; }
+
+        [JsonProperty("thumbnail_url", Required = Required.Always)]
+        public Uri ThumbnailUrl { get; set; }
+
+        [JsonProperty("thumbnail_width", Required = Required.Always)]
+        public long ThumbnailWidth { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("version", Required = Required.Always)]
+        public string Version { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record MediaEmbed
+    {
+        [JsonProperty("content", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Content { get; set; }
+
+        [JsonProperty("height", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Height { get; set; }
+
+        [JsonProperty("scrolling", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Scrolling { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Width { get; set; }
+    }
+
+    public partial record Preview
+    {
+        [JsonProperty("enabled", Required = Required.Always)]
+        public bool Enabled { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Image[] Images { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("resolutions", Required = Required.Always)]
+        public Source[] Resolutions { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public Source Source { get; set; }
+
+        [JsonProperty("variants", Required = Required.Always)]
+        public Variants Variants { get; set; }
+    }
+
+    public partial record Source
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record Variants
+    {
+    }
+
+    public enum Domain { SelfPics, ImgurCom, IImgurCom, IReddIt };
+
+    public enum PostHint { Link, Image };
+
+    public enum Subreddit { Pics };
+
+    public enum SubredditId { T52Qh0U };
+
+    public enum SubredditNamePrefixed { RPics };
+
+    public enum SubredditType { Public };
+
+    public enum Kind { T3 };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DomainConverter.Singleton,
+                PostHintConverter.Singleton,
+                SubredditConverter.Singleton,
+                SubredditIdConverter.Singleton,
+                SubredditNamePrefixedConverter.Singleton,
+                SubredditTypeConverter.Singleton,
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DomainConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Domain) || t == typeof(Domain?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "self.pics":
+                    return Domain.SelfPics;
+                case "imgur.com":
+                    return Domain.ImgurCom;
+                case "i.imgur.com":
+                    return Domain.IImgurCom;
+                case "i.redd.it":
+                    return Domain.IReddIt;
+            }
+            throw new Exception("Cannot unmarshal type Domain");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Domain)untypedValue;
+            switch (value)
+            {
+                case Domain.SelfPics:
+                    serializer.Serialize(writer, "self.pics");
+                    return;
+                case Domain.ImgurCom:
+                    serializer.Serialize(writer, "imgur.com");
+                    return;
+                case Domain.IImgurCom:
+                    serializer.Serialize(writer, "i.imgur.com");
+                    return;
+                case Domain.IReddIt:
+                    serializer.Serialize(writer, "i.redd.it");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Domain");
+        }
+
+        public static readonly DomainConverter Singleton = new DomainConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class PostHintConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PostHint) || t == typeof(PostHint?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "link":
+                    return PostHint.Link;
+                case "image":
+                    return PostHint.Image;
+            }
+            throw new Exception("Cannot unmarshal type PostHint");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PostHint)untypedValue;
+            switch (value)
+            {
+                case PostHint.Link:
+                    serializer.Serialize(writer, "link");
+                    return;
+                case PostHint.Image:
+                    serializer.Serialize(writer, "image");
+                    return;
+            }
+            throw new Exception("Cannot marshal type PostHint");
+        }
+
+        public static readonly PostHintConverter Singleton = new PostHintConverter();
+    }
+
+    internal class SubredditConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Subreddit) || t == typeof(Subreddit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "pics")
+            {
+                return Subreddit.Pics;
+            }
+            throw new Exception("Cannot unmarshal type Subreddit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Subreddit)untypedValue;
+            if (value == Subreddit.Pics)
+            {
+                serializer.Serialize(writer, "pics");
+                return;
+            }
+            throw new Exception("Cannot marshal type Subreddit");
+        }
+
+        public static readonly SubredditConverter Singleton = new SubredditConverter();
+    }
+
+    internal class SubredditIdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditId) || t == typeof(SubredditId?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t5_2qh0u")
+            {
+                return SubredditId.T52Qh0U;
+            }
+            throw new Exception("Cannot unmarshal type SubredditId");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditId)untypedValue;
+            if (value == SubredditId.T52Qh0U)
+            {
+                serializer.Serialize(writer, "t5_2qh0u");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditId");
+        }
+
+        public static readonly SubredditIdConverter Singleton = new SubredditIdConverter();
+    }
+
+    internal class SubredditNamePrefixedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditNamePrefixed) || t == typeof(SubredditNamePrefixed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "r/pics")
+            {
+                return SubredditNamePrefixed.RPics;
+            }
+            throw new Exception("Cannot unmarshal type SubredditNamePrefixed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditNamePrefixed)untypedValue;
+            if (value == SubredditNamePrefixed.RPics)
+            {
+                serializer.Serialize(writer, "r/pics");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditNamePrefixed");
+        }
+
+        public static readonly SubredditNamePrefixedConverter Singleton = new SubredditNamePrefixedConverter();
+    }
+
+    internal class SubredditTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditType) || t == typeof(SubredditType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "public")
+            {
+                return SubredditType.Public;
+            }
+            throw new Exception("Cannot unmarshal type SubredditType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditType)untypedValue;
+            if (value == SubredditType.Public)
+            {
+                serializer.Serialize(writer, "public");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditType");
+        }
+
+        public static readonly SubredditTypeConverter Singleton = new SubredditTypeConverter();
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t3")
+            {
+                return Kind.T3;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.T3)
+            {
+                serializer.Serialize(writer, "t3");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/29f47.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/29f47.json/default/QuickType.cs
new file mode 100644
index 0000000..d13da03
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/29f47.json/default/QuickType.cs
@@ -0,0 +1,764 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public TopLevelData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public string Kind { get; set; }
+    }
+
+    public partial record TopLevelData
+    {
+        [JsonProperty("after", Required = Required.Always)]
+        public string After { get; set; }
+
+        [JsonProperty("before", Required = Required.AllowNull)]
+        public object Before { get; set; }
+
+        [JsonProperty("children", Required = Required.Always)]
+        public Child[] Children { get; set; }
+
+        [JsonProperty("modhash", Required = Required.Always)]
+        public string Modhash { get; set; }
+    }
+
+    public partial record Child
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public ChildData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    public partial record ChildData
+    {
+        [JsonProperty("approved_at_utc", Required = Required.AllowNull)]
+        public object ApprovedAtUtc { get; set; }
+
+        [JsonProperty("approved_by", Required = Required.AllowNull)]
+        public object ApprovedBy { get; set; }
+
+        [JsonProperty("archived", Required = Required.Always)]
+        public bool Archived { get; set; }
+
+        [JsonProperty("author", Required = Required.Always)]
+        public string Author { get; set; }
+
+        [JsonProperty("author_flair_css_class", Required = Required.AllowNull)]
+        public object AuthorFlairCssClass { get; set; }
+
+        [JsonProperty("author_flair_text", Required = Required.AllowNull)]
+        public object AuthorFlairText { get; set; }
+
+        [JsonProperty("banned_at_utc", Required = Required.AllowNull)]
+        public object BannedAtUtc { get; set; }
+
+        [JsonProperty("banned_by", Required = Required.AllowNull)]
+        public object BannedBy { get; set; }
+
+        [JsonProperty("brand_safe", Required = Required.Always)]
+        public bool BrandSafe { get; set; }
+
+        [JsonProperty("can_gild", Required = Required.Always)]
+        public bool CanGild { get; set; }
+
+        [JsonProperty("can_mod_post", Required = Required.Always)]
+        public bool CanModPost { get; set; }
+
+        [JsonProperty("clicked", Required = Required.Always)]
+        public bool Clicked { get; set; }
+
+        [JsonProperty("contest_mode", Required = Required.Always)]
+        public bool ContestMode { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public double Created { get; set; }
+
+        [JsonProperty("created_utc", Required = Required.Always)]
+        public double CreatedUtc { get; set; }
+
+        [JsonProperty("distinguished", Required = Required.Always)]
+        public Distinguished Distinguished { get; set; }
+
+        [JsonProperty("domain", Required = Required.Always)]
+        public Domain Domain { get; set; }
+
+        [JsonProperty("downs", Required = Required.Always)]
+        public long Downs { get; set; }
+
+        [JsonProperty("edited", Required = Required.Always)]
+        public Edited Edited { get; set; }
+
+        [JsonProperty("gilded", Required = Required.Always)]
+        public long Gilded { get; set; }
+
+        [JsonProperty("hidden", Required = Required.Always)]
+        public bool Hidden { get; set; }
+
+        [JsonProperty("hide_score", Required = Required.Always)]
+        public bool HideScore { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("is_self", Required = Required.Always)]
+        public bool IsSelf { get; set; }
+
+        [JsonProperty("is_video", Required = Required.Always)]
+        public bool IsVideo { get; set; }
+
+        [JsonProperty("likes", Required = Required.AllowNull)]
+        public object Likes { get; set; }
+
+        [JsonProperty("link_flair_css_class", Required = Required.AllowNull)]
+        public object LinkFlairCssClass { get; set; }
+
+        [JsonProperty("link_flair_text", Required = Required.AllowNull)]
+        public object LinkFlairText { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("media", Required = Required.AllowNull)]
+        public object Media { get; set; }
+
+        [JsonProperty("media_embed", Required = Required.Always)]
+        public MediaEmbed MediaEmbed { get; set; }
+
+        [JsonProperty("mod_reports", Required = Required.Always)]
+        public object[] ModReports { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("num_comments", Required = Required.Always)]
+        public long NumComments { get; set; }
+
+        [JsonProperty("num_reports", Required = Required.AllowNull)]
+        public object NumReports { get; set; }
+
+        [JsonProperty("over_18", Required = Required.Always)]
+        public bool Over18 { get; set; }
+
+        [JsonProperty("permalink", Required = Required.Always)]
+        public string Permalink { get; set; }
+
+        [JsonProperty("post_hint", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PostHint? PostHint { get; set; }
+
+        [JsonProperty("preview", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Preview? Preview { get; set; }
+
+        [JsonProperty("quarantine", Required = Required.Always)]
+        public bool Quarantine { get; set; }
+
+        [JsonProperty("removal_reason", Required = Required.AllowNull)]
+        public object RemovalReason { get; set; }
+
+        [JsonProperty("report_reasons", Required = Required.AllowNull)]
+        public object ReportReasons { get; set; }
+
+        [JsonProperty("saved", Required = Required.Always)]
+        public bool Saved { get; set; }
+
+        [JsonProperty("score", Required = Required.Always)]
+        public long Score { get; set; }
+
+        [JsonProperty("secure_media", Required = Required.AllowNull)]
+        public object SecureMedia { get; set; }
+
+        [JsonProperty("secure_media_embed", Required = Required.Always)]
+        public MediaEmbed SecureMediaEmbed { get; set; }
+
+        [JsonProperty("selftext", Required = Required.Always)]
+        public string Selftext { get; set; }
+
+        [JsonProperty("selftext_html", Required = Required.AllowNull)]
+        public string? SelftextHtml { get; set; }
+
+        [JsonProperty("spoiler", Required = Required.Always)]
+        public bool Spoiler { get; set; }
+
+        [JsonProperty("stickied", Required = Required.Always)]
+        public bool Stickied { get; set; }
+
+        [JsonProperty("subreddit", Required = Required.Always)]
+        public Subreddit Subreddit { get; set; }
+
+        [JsonProperty("subreddit_id", Required = Required.Always)]
+        public SubredditId SubredditId { get; set; }
+
+        [JsonProperty("subreddit_name_prefixed", Required = Required.Always)]
+        public SubredditNamePrefixed SubredditNamePrefixed { get; set; }
+
+        [JsonProperty("subreddit_type", Required = Required.Always)]
+        public SubredditType SubredditType { get; set; }
+
+        [JsonProperty("suggested_sort", Required = Required.AllowNull)]
+        public string? SuggestedSort { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public Thumbnail Thumbnail { get; set; }
+
+        [JsonProperty("thumbnail_height", Required = Required.AllowNull)]
+        public long? ThumbnailHeight { get; set; }
+
+        [JsonProperty("thumbnail_width", Required = Required.AllowNull)]
+        public long? ThumbnailWidth { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ups", Required = Required.Always)]
+        public long Ups { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user_reports", Required = Required.Always)]
+        public object[] UserReports { get; set; }
+
+        [JsonProperty("view_count", Required = Required.AllowNull)]
+        public object ViewCount { get; set; }
+
+        [JsonProperty("visited", Required = Required.Always)]
+        public bool Visited { get; set; }
+    }
+
+    public partial record MediaEmbed
+    {
+    }
+
+    public partial record Preview
+    {
+        [JsonProperty("enabled", Required = Required.Always)]
+        public bool Enabled { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Image[] Images { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("resolutions", Required = Required.Always)]
+        public Source[] Resolutions { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public Source Source { get; set; }
+
+        [JsonProperty("variants", Required = Required.Always)]
+        public Variants Variants { get; set; }
+    }
+
+    public partial record Source
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record Variants
+    {
+        [JsonProperty("gif", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Gif? Gif { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Gif? Mp4 { get; set; }
+    }
+
+    public partial record Gif
+    {
+        [JsonProperty("resolutions", Required = Required.Always)]
+        public Source[] Resolutions { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public Source Source { get; set; }
+    }
+
+    public enum Distinguished { Admin };
+
+    public enum Domain { SelfAnnouncements, IReddIt };
+
+    public enum PostHint { Self, Image };
+
+    public enum Subreddit { Announcements };
+
+    public enum SubredditId { T52R0Ij };
+
+    public enum SubredditNamePrefixed { RAnnouncements };
+
+    public enum SubredditType { Restricted };
+
+    public enum Kind { T3 };
+
+    public partial struct Edited
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Edited(bool Bool) => new Edited { Bool = Bool };
+        public static implicit operator Edited(double Double) => new Edited { Double = Double };
+    }
+
+    public partial struct Thumbnail
+    {
+        public PostHint? Enum;
+        public Uri? PurpleUri;
+
+        public static implicit operator Thumbnail(PostHint Enum) => new Thumbnail { Enum = Enum };
+        public static implicit operator Thumbnail(Uri PurpleUri) => new Thumbnail { PurpleUri = PurpleUri };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DistinguishedConverter.Singleton,
+                DomainConverter.Singleton,
+                EditedConverter.Singleton,
+                PostHintConverter.Singleton,
+                SubredditConverter.Singleton,
+                SubredditIdConverter.Singleton,
+                SubredditNamePrefixedConverter.Singleton,
+                SubredditTypeConverter.Singleton,
+                ThumbnailConverter.Singleton,
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DistinguishedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Distinguished) || t == typeof(Distinguished?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "admin")
+            {
+                return Distinguished.Admin;
+            }
+            throw new Exception("Cannot unmarshal type Distinguished");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Distinguished)untypedValue;
+            if (value == Distinguished.Admin)
+            {
+                serializer.Serialize(writer, "admin");
+                return;
+            }
+            throw new Exception("Cannot marshal type Distinguished");
+        }
+
+        public static readonly DistinguishedConverter Singleton = new DistinguishedConverter();
+    }
+
+    internal class DomainConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Domain) || t == typeof(Domain?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "self.announcements":
+                    return Domain.SelfAnnouncements;
+                case "i.redd.it":
+                    return Domain.IReddIt;
+            }
+            throw new Exception("Cannot unmarshal type Domain");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Domain)untypedValue;
+            switch (value)
+            {
+                case Domain.SelfAnnouncements:
+                    serializer.Serialize(writer, "self.announcements");
+                    return;
+                case Domain.IReddIt:
+                    serializer.Serialize(writer, "i.redd.it");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Domain");
+        }
+
+        public static readonly DomainConverter Singleton = new DomainConverter();
+    }
+
+    internal class EditedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Edited) || t == typeof(Edited?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Edited { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Edited { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Edited");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Edited)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Edited");
+        }
+
+        public static readonly EditedConverter Singleton = new EditedConverter();
+    }
+
+    internal class PostHintConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PostHint) || t == typeof(PostHint?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "self":
+                    return PostHint.Self;
+                case "image":
+                    return PostHint.Image;
+            }
+            throw new Exception("Cannot unmarshal type PostHint");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PostHint)untypedValue;
+            switch (value)
+            {
+                case PostHint.Self:
+                    serializer.Serialize(writer, "self");
+                    return;
+                case PostHint.Image:
+                    serializer.Serialize(writer, "image");
+                    return;
+            }
+            throw new Exception("Cannot marshal type PostHint");
+        }
+
+        public static readonly PostHintConverter Singleton = new PostHintConverter();
+    }
+
+    internal class SubredditConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Subreddit) || t == typeof(Subreddit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "announcements")
+            {
+                return Subreddit.Announcements;
+            }
+            throw new Exception("Cannot unmarshal type Subreddit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Subreddit)untypedValue;
+            if (value == Subreddit.Announcements)
+            {
+                serializer.Serialize(writer, "announcements");
+                return;
+            }
+            throw new Exception("Cannot marshal type Subreddit");
+        }
+
+        public static readonly SubredditConverter Singleton = new SubredditConverter();
+    }
+
+    internal class SubredditIdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditId) || t == typeof(SubredditId?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t5_2r0ij")
+            {
+                return SubredditId.T52R0Ij;
+            }
+            throw new Exception("Cannot unmarshal type SubredditId");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditId)untypedValue;
+            if (value == SubredditId.T52R0Ij)
+            {
+                serializer.Serialize(writer, "t5_2r0ij");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditId");
+        }
+
+        public static readonly SubredditIdConverter Singleton = new SubredditIdConverter();
+    }
+
+    internal class SubredditNamePrefixedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditNamePrefixed) || t == typeof(SubredditNamePrefixed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "r/announcements")
+            {
+                return SubredditNamePrefixed.RAnnouncements;
+            }
+            throw new Exception("Cannot unmarshal type SubredditNamePrefixed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditNamePrefixed)untypedValue;
+            if (value == SubredditNamePrefixed.RAnnouncements)
+            {
+                serializer.Serialize(writer, "r/announcements");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditNamePrefixed");
+        }
+
+        public static readonly SubredditNamePrefixedConverter Singleton = new SubredditNamePrefixedConverter();
+    }
+
+    internal class SubredditTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditType) || t == typeof(SubredditType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "restricted")
+            {
+                return SubredditType.Restricted;
+            }
+            throw new Exception("Cannot unmarshal type SubredditType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditType)untypedValue;
+            if (value == SubredditType.Restricted)
+            {
+                serializer.Serialize(writer, "restricted");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditType");
+        }
+
+        public static readonly SubredditTypeConverter Singleton = new SubredditTypeConverter();
+    }
+
+    internal class ThumbnailConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Thumbnail) || t == typeof(Thumbnail?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    switch (stringValue)
+                    {
+                        case "self":
+                            return new Thumbnail { Enum = PostHint.Self };
+                        case "image":
+                            return new Thumbnail { Enum = PostHint.Image };
+                    }
+                    try
+                    {
+                        var uri = new Uri(stringValue);
+                        return new Thumbnail { PurpleUri = uri };
+                    }
+                    catch (UriFormatException) {}
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type Thumbnail");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Thumbnail)untypedValue;
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case PostHint.Self:
+                        serializer.Serialize(writer, "self");
+                        return;
+                    case PostHint.Image:
+                        serializer.Serialize(writer, "image");
+                        return;
+                }
+            }
+            if (value.PurpleUri != null)
+            {
+                serializer.Serialize(writer, value.PurpleUri.ToString());
+                return;
+            }
+            throw new Exception("Cannot marshal type Thumbnail");
+        }
+
+        public static readonly ThumbnailConverter Singleton = new ThumbnailConverter();
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t3")
+            {
+                return Kind.T3;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.T3)
+            {
+                serializer.Serialize(writer, "t3");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/2d4e2.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/2d4e2.json/default/QuickType.cs
new file mode 100644
index 0000000..859e487
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/2d4e2.json/default/QuickType.cs
@@ -0,0 +1,738 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("objects", Required = Required.Always)]
+        public Object[] Objects { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("limit", Required = Required.Always)]
+        public long Limit { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("total_count", Required = Required.Always)]
+        public long TotalCount { get; set; }
+    }
+
+    public partial record Object
+    {
+        [JsonProperty("caucus", Required = Required.AllowNull)]
+        public Party? Caucus { get; set; }
+
+        [JsonProperty("congress_numbers", Required = Required.Always)]
+        public long[] CongressNumbers { get; set; }
+
+        [JsonProperty("current", Required = Required.Always)]
+        public bool Current { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("district", Required = Required.AllowNull)]
+        public object District { get; set; }
+
+        [JsonProperty("enddate", Required = Required.Always)]
+        public DateTimeOffset Enddate { get; set; }
+
+        [JsonProperty("extra", Required = Required.Always)]
+        public Extra Extra { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("leadership_title", Required = Required.AllowNull)]
+        public string? LeadershipTitle { get; set; }
+
+        [JsonProperty("party", Required = Required.Always)]
+        public Party Party { get; set; }
+
+        [JsonProperty("person", Required = Required.Always)]
+        public Person Person { get; set; }
+
+        [JsonProperty("phone", Required = Required.Always)]
+        public string Phone { get; set; }
+
+        [JsonProperty("role_type", Required = Required.Always)]
+        public RoleType RoleType { get; set; }
+
+        [JsonProperty("role_type_label", Required = Required.Always)]
+        public RoleTypeLabel RoleTypeLabel { get; set; }
+
+        [JsonProperty("senator_class", Required = Required.Always)]
+        public SenatorClass SenatorClass { get; set; }
+
+        [JsonProperty("senator_class_label", Required = Required.Always)]
+        public SenatorClassLabel SenatorClassLabel { get; set; }
+
+        [JsonProperty("senator_rank", Required = Required.Always)]
+        public SenatorRank SenatorRank { get; set; }
+
+        [JsonProperty("senator_rank_label", Required = Required.Always)]
+        public SenatorRankLabel SenatorRankLabel { get; set; }
+
+        [JsonProperty("startdate", Required = Required.Always)]
+        public DateTimeOffset Startdate { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public Title Title { get; set; }
+
+        [JsonProperty("title_long", Required = Required.Always)]
+        public RoleTypeLabel TitleLong { get; set; }
+
+        [JsonProperty("website", Required = Required.Always)]
+        public Uri Website { get; set; }
+    }
+
+    public partial record Extra
+    {
+        [JsonProperty("address", Required = Required.Always)]
+        public string Address { get; set; }
+
+        [JsonProperty("contact_form", Required = Required.Always)]
+        public Uri ContactForm { get; set; }
+
+        [JsonProperty("fax", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Fax { get; set; }
+
+        [JsonProperty("office", Required = Required.Always)]
+        public string Office { get; set; }
+
+        [JsonProperty("rss_url", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Uri? RssUrl { get; set; }
+    }
+
+    public partial record Person
+    {
+        [JsonProperty("bioguideid", Required = Required.Always)]
+        public string Bioguideid { get; set; }
+
+        [JsonProperty("birthday", Required = Required.Always)]
+        public DateTimeOffset Birthday { get; set; }
+
+        [JsonProperty("cspanid", Required = Required.Always)]
+        public long Cspanid { get; set; }
+
+        [JsonProperty("firstname", Required = Required.Always)]
+        public string Firstname { get; set; }
+
+        [JsonProperty("gender", Required = Required.Always)]
+        public Gender Gender { get; set; }
+
+        [JsonProperty("gender_label", Required = Required.Always)]
+        public GenderLabel GenderLabel { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("lastname", Required = Required.Always)]
+        public string Lastname { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("middlename", Required = Required.Always)]
+        public string Middlename { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("namemod", Required = Required.Always)]
+        public Namemod Namemod { get; set; }
+
+        [JsonProperty("nickname", Required = Required.Always)]
+        public string Nickname { get; set; }
+
+        [JsonProperty("osid", Required = Required.Always)]
+        public string Osid { get; set; }
+
+        [JsonProperty("pvsid", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Pvsid { get; set; }
+
+        [JsonProperty("sortname", Required = Required.Always)]
+        public string Sortname { get; set; }
+
+        [JsonProperty("twitterid", Required = Required.AllowNull)]
+        public string? Twitterid { get; set; }
+
+        [JsonProperty("youtubeid", Required = Required.AllowNull)]
+        public string? Youtubeid { get; set; }
+    }
+
+    public enum Party { Republican, Democrat, Independent };
+
+    public enum Gender { Male, Female };
+
+    public enum GenderLabel { Male, Female };
+
+    public enum Namemod { Empty, Iii, Jr };
+
+    public enum RoleType { Senator };
+
+    public enum RoleTypeLabel { Senator };
+
+    public enum SenatorClass { Class2, Class1, Class3 };
+
+    public enum SenatorClassLabel { Class2, Class1, Class3 };
+
+    public enum SenatorRank { Senior, Junior };
+
+    public enum SenatorRankLabel { Senior, Junior };
+
+    public enum Title { Sen };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                PartyConverter.Singleton,
+                GenderConverter.Singleton,
+                GenderLabelConverter.Singleton,
+                NamemodConverter.Singleton,
+                RoleTypeConverter.Singleton,
+                RoleTypeLabelConverter.Singleton,
+                SenatorClassConverter.Singleton,
+                SenatorClassLabelConverter.Singleton,
+                SenatorRankConverter.Singleton,
+                SenatorRankLabelConverter.Singleton,
+                TitleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PartyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Party) || t == typeof(Party?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Republican":
+                    return Party.Republican;
+                case "Democrat":
+                    return Party.Democrat;
+                case "Independent":
+                    return Party.Independent;
+            }
+            throw new Exception("Cannot unmarshal type Party");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Party)untypedValue;
+            switch (value)
+            {
+                case Party.Republican:
+                    serializer.Serialize(writer, "Republican");
+                    return;
+                case Party.Democrat:
+                    serializer.Serialize(writer, "Democrat");
+                    return;
+                case Party.Independent:
+                    serializer.Serialize(writer, "Independent");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Party");
+        }
+
+        public static readonly PartyConverter Singleton = new PartyConverter();
+    }
+
+    internal class GenderConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gender) || t == typeof(Gender?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "male":
+                    return Gender.Male;
+                case "female":
+                    return Gender.Female;
+            }
+            throw new Exception("Cannot unmarshal type Gender");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Gender)untypedValue;
+            switch (value)
+            {
+                case Gender.Male:
+                    serializer.Serialize(writer, "male");
+                    return;
+                case Gender.Female:
+                    serializer.Serialize(writer, "female");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Gender");
+        }
+
+        public static readonly GenderConverter Singleton = new GenderConverter();
+    }
+
+    internal class GenderLabelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GenderLabel) || t == typeof(GenderLabel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Male":
+                    return GenderLabel.Male;
+                case "Female":
+                    return GenderLabel.Female;
+            }
+            throw new Exception("Cannot unmarshal type GenderLabel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GenderLabel)untypedValue;
+            switch (value)
+            {
+                case GenderLabel.Male:
+                    serializer.Serialize(writer, "Male");
+                    return;
+                case GenderLabel.Female:
+                    serializer.Serialize(writer, "Female");
+                    return;
+            }
+            throw new Exception("Cannot marshal type GenderLabel");
+        }
+
+        public static readonly GenderLabelConverter Singleton = new GenderLabelConverter();
+    }
+
+    internal class NamemodConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Namemod) || t == typeof(Namemod?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Namemod.Empty;
+                case "III":
+                    return Namemod.Iii;
+                case "Jr.":
+                    return Namemod.Jr;
+            }
+            throw new Exception("Cannot unmarshal type Namemod");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Namemod)untypedValue;
+            switch (value)
+            {
+                case Namemod.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Namemod.Iii:
+                    serializer.Serialize(writer, "III");
+                    return;
+                case Namemod.Jr:
+                    serializer.Serialize(writer, "Jr.");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Namemod");
+        }
+
+        public static readonly NamemodConverter Singleton = new NamemodConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RoleTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RoleType) || t == typeof(RoleType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "senator")
+            {
+                return RoleType.Senator;
+            }
+            throw new Exception("Cannot unmarshal type RoleType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (RoleType)untypedValue;
+            if (value == RoleType.Senator)
+            {
+                serializer.Serialize(writer, "senator");
+                return;
+            }
+            throw new Exception("Cannot marshal type RoleType");
+        }
+
+        public static readonly RoleTypeConverter Singleton = new RoleTypeConverter();
+    }
+
+    internal class RoleTypeLabelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RoleTypeLabel) || t == typeof(RoleTypeLabel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Senator")
+            {
+                return RoleTypeLabel.Senator;
+            }
+            throw new Exception("Cannot unmarshal type RoleTypeLabel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (RoleTypeLabel)untypedValue;
+            if (value == RoleTypeLabel.Senator)
+            {
+                serializer.Serialize(writer, "Senator");
+                return;
+            }
+            throw new Exception("Cannot marshal type RoleTypeLabel");
+        }
+
+        public static readonly RoleTypeLabelConverter Singleton = new RoleTypeLabelConverter();
+    }
+
+    internal class SenatorClassConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SenatorClass) || t == typeof(SenatorClass?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "class2":
+                    return SenatorClass.Class2;
+                case "class1":
+                    return SenatorClass.Class1;
+                case "class3":
+                    return SenatorClass.Class3;
+            }
+            throw new Exception("Cannot unmarshal type SenatorClass");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SenatorClass)untypedValue;
+            switch (value)
+            {
+                case SenatorClass.Class2:
+                    serializer.Serialize(writer, "class2");
+                    return;
+                case SenatorClass.Class1:
+                    serializer.Serialize(writer, "class1");
+                    return;
+                case SenatorClass.Class3:
+                    serializer.Serialize(writer, "class3");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SenatorClass");
+        }
+
+        public static readonly SenatorClassConverter Singleton = new SenatorClassConverter();
+    }
+
+    internal class SenatorClassLabelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SenatorClassLabel) || t == typeof(SenatorClassLabel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Class 2":
+                    return SenatorClassLabel.Class2;
+                case "Class 1":
+                    return SenatorClassLabel.Class1;
+                case "Class 3":
+                    return SenatorClassLabel.Class3;
+            }
+            throw new Exception("Cannot unmarshal type SenatorClassLabel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SenatorClassLabel)untypedValue;
+            switch (value)
+            {
+                case SenatorClassLabel.Class2:
+                    serializer.Serialize(writer, "Class 2");
+                    return;
+                case SenatorClassLabel.Class1:
+                    serializer.Serialize(writer, "Class 1");
+                    return;
+                case SenatorClassLabel.Class3:
+                    serializer.Serialize(writer, "Class 3");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SenatorClassLabel");
+        }
+
+        public static readonly SenatorClassLabelConverter Singleton = new SenatorClassLabelConverter();
+    }
+
+    internal class SenatorRankConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SenatorRank) || t == typeof(SenatorRank?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "senior":
+                    return SenatorRank.Senior;
+                case "junior":
+                    return SenatorRank.Junior;
+            }
+            throw new Exception("Cannot unmarshal type SenatorRank");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SenatorRank)untypedValue;
+            switch (value)
+            {
+                case SenatorRank.Senior:
+                    serializer.Serialize(writer, "senior");
+                    return;
+                case SenatorRank.Junior:
+                    serializer.Serialize(writer, "junior");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SenatorRank");
+        }
+
+        public static readonly SenatorRankConverter Singleton = new SenatorRankConverter();
+    }
+
+    internal class SenatorRankLabelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SenatorRankLabel) || t == typeof(SenatorRankLabel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Senior":
+                    return SenatorRankLabel.Senior;
+                case "Junior":
+                    return SenatorRankLabel.Junior;
+            }
+            throw new Exception("Cannot unmarshal type SenatorRankLabel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SenatorRankLabel)untypedValue;
+            switch (value)
+            {
+                case SenatorRankLabel.Senior:
+                    serializer.Serialize(writer, "Senior");
+                    return;
+                case SenatorRankLabel.Junior:
+                    serializer.Serialize(writer, "Junior");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SenatorRankLabel");
+        }
+
+        public static readonly SenatorRankLabelConverter Singleton = new SenatorRankLabelConverter();
+    }
+
+    internal class TitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Title) || t == typeof(Title?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Sen.")
+            {
+                return Title.Sen;
+            }
+            throw new Exception("Cannot unmarshal type Title");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Title)untypedValue;
+            if (value == Title.Sen)
+            {
+                serializer.Serialize(writer, "Sen.");
+                return;
+            }
+            throw new Exception("Cannot marshal type Title");
+        }
+
+        public static readonly TitleConverter Singleton = new TitleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/2df80.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/2df80.json/default/QuickType.cs
new file mode 100644
index 0000000..634e013
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/2df80.json/default/QuickType.cs
@@ -0,0 +1,479 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record PurpleTopLevel
+    {
+        [JsonProperty("adminregion", Required = Required.Always)]
+        public Adminregion Adminregion { get; set; }
+
+        [JsonProperty("capitalCity", Required = Required.Always)]
+        public string CapitalCity { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("incomeLevel", Required = Required.Always)]
+        public Adminregion IncomeLevel { get; set; }
+
+        [JsonProperty("iso2Code", Required = Required.Always)]
+        public string Iso2Code { get; set; }
+
+        [JsonProperty("latitude", Required = Required.Always)]
+        public string Latitude { get; set; }
+
+        [JsonProperty("lendingType", Required = Required.Always)]
+        public Adminregion LendingType { get; set; }
+
+        [JsonProperty("longitude", Required = Required.Always)]
+        public string Longitude { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public Adminregion Region { get; set; }
+    }
+
+    public partial record Adminregion
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public Id Id { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public Value Value { get; set; }
+    }
+
+    public partial record FluffyTopLevel
+    {
+        [JsonProperty("page", Required = Required.Always)]
+        public long Page { get; set; }
+
+        [JsonProperty("pages", Required = Required.Always)]
+        public long Pages { get; set; }
+
+        [JsonProperty("per_page", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long PerPage { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+    }
+
+    public enum Id { Empty, Sas, Ssa, Eca, Lac, Eap, Mna, Hic, Lic, Na, Lmc, Umc, Lnx, Idx, Ibd, Idb, Lcn, Ssf, Ecs, Mea, Eas, Nac };
+
+    public enum Value { Empty, SouthAsia, SubSaharanAfricaExcludingHighIncome, EuropeCentralAsiaExcludingHighIncome, LatinAmericaCaribbeanExcludingHighIncome, EastAsiaPacificExcludingHighIncome, MiddleEastNorthAfricaExcludingHighIncome, HighIncome, LowIncome, Aggregates, LowerMiddleIncome, UpperMiddleIncome, NotClassified, Ida, Ibrd, Blend, LatinAmericaCaribbean, SubSaharanAfrica, EuropeCentralAsia, MiddleEastNorthAfrica, EastAsiaPacific, NorthAmerica };
+
+    public partial struct TopLevelUnion
+    {
+        public FluffyTopLevel? FluffyTopLevel;
+        public PurpleTopLevel[]? PurpleTopLevelArray;
+
+        public static implicit operator TopLevelUnion(FluffyTopLevel FluffyTopLevel) => new TopLevelUnion { FluffyTopLevel = FluffyTopLevel };
+        public static implicit operator TopLevelUnion(PurpleTopLevel[] PurpleTopLevelArray) => new TopLevelUnion { PurpleTopLevelArray = PurpleTopLevelArray };
+    }
+
+    public class TopLevel
+    {
+        public static TopLevelUnion[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevelUnion[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevelUnion[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TopLevelUnionConverter.Singleton,
+                IdConverter.Singleton,
+                ValueConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TopLevelUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TopLevelUnion) || t == typeof(TopLevelUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FluffyTopLevel>(reader);
+                    return new TopLevelUnion { FluffyTopLevel = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<PurpleTopLevel[]>(reader);
+                    return new TopLevelUnion { PurpleTopLevelArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type TopLevelUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TopLevelUnion)untypedValue;
+            if (value.PurpleTopLevelArray != null)
+            {
+                serializer.Serialize(writer, value.PurpleTopLevelArray);
+                return;
+            }
+            if (value.FluffyTopLevel != null)
+            {
+                serializer.Serialize(writer, value.FluffyTopLevel);
+                return;
+            }
+            throw new Exception("Cannot marshal type TopLevelUnion");
+        }
+
+        public static readonly TopLevelUnionConverter Singleton = new TopLevelUnionConverter();
+    }
+
+    internal class IdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Id) || t == typeof(Id?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Id.Empty;
+                case "SAS":
+                    return Id.Sas;
+                case "SSA":
+                    return Id.Ssa;
+                case "ECA":
+                    return Id.Eca;
+                case "LAC":
+                    return Id.Lac;
+                case "EAP":
+                    return Id.Eap;
+                case "MNA":
+                    return Id.Mna;
+                case "HIC":
+                    return Id.Hic;
+                case "LIC":
+                    return Id.Lic;
+                case "NA":
+                    return Id.Na;
+                case "LMC":
+                    return Id.Lmc;
+                case "UMC":
+                    return Id.Umc;
+                case "LNX":
+                    return Id.Lnx;
+                case "IDX":
+                    return Id.Idx;
+                case "IBD":
+                    return Id.Ibd;
+                case "IDB":
+                    return Id.Idb;
+                case "LCN":
+                    return Id.Lcn;
+                case "SSF":
+                    return Id.Ssf;
+                case "ECS":
+                    return Id.Ecs;
+                case "MEA":
+                    return Id.Mea;
+                case "EAS":
+                    return Id.Eas;
+                case "NAC":
+                    return Id.Nac;
+            }
+            throw new Exception("Cannot unmarshal type Id");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Id)untypedValue;
+            switch (value)
+            {
+                case Id.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Id.Sas:
+                    serializer.Serialize(writer, "SAS");
+                    return;
+                case Id.Ssa:
+                    serializer.Serialize(writer, "SSA");
+                    return;
+                case Id.Eca:
+                    serializer.Serialize(writer, "ECA");
+                    return;
+                case Id.Lac:
+                    serializer.Serialize(writer, "LAC");
+                    return;
+                case Id.Eap:
+                    serializer.Serialize(writer, "EAP");
+                    return;
+                case Id.Mna:
+                    serializer.Serialize(writer, "MNA");
+                    return;
+                case Id.Hic:
+                    serializer.Serialize(writer, "HIC");
+                    return;
+                case Id.Lic:
+                    serializer.Serialize(writer, "LIC");
+                    return;
+                case Id.Na:
+                    serializer.Serialize(writer, "NA");
+                    return;
+                case Id.Lmc:
+                    serializer.Serialize(writer, "LMC");
+                    return;
+                case Id.Umc:
+                    serializer.Serialize(writer, "UMC");
+                    return;
+                case Id.Lnx:
+                    serializer.Serialize(writer, "LNX");
+                    return;
+                case Id.Idx:
+                    serializer.Serialize(writer, "IDX");
+                    return;
+                case Id.Ibd:
+                    serializer.Serialize(writer, "IBD");
+                    return;
+                case Id.Idb:
+                    serializer.Serialize(writer, "IDB");
+                    return;
+                case Id.Lcn:
+                    serializer.Serialize(writer, "LCN");
+                    return;
+                case Id.Ssf:
+                    serializer.Serialize(writer, "SSF");
+                    return;
+                case Id.Ecs:
+                    serializer.Serialize(writer, "ECS");
+                    return;
+                case Id.Mea:
+                    serializer.Serialize(writer, "MEA");
+                    return;
+                case Id.Eas:
+                    serializer.Serialize(writer, "EAS");
+                    return;
+                case Id.Nac:
+                    serializer.Serialize(writer, "NAC");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Id");
+        }
+
+        public static readonly IdConverter Singleton = new IdConverter();
+    }
+
+    internal class ValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Value) || t == typeof(Value?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Value.Empty;
+                case "South Asia":
+                    return Value.SouthAsia;
+                case "Sub-Saharan Africa (excluding high income)":
+                    return Value.SubSaharanAfricaExcludingHighIncome;
+                case "Europe & Central Asia (excluding high income)":
+                    return Value.EuropeCentralAsiaExcludingHighIncome;
+                case "Latin America & Caribbean (excluding high income)":
+                    return Value.LatinAmericaCaribbeanExcludingHighIncome;
+                case "East Asia & Pacific (excluding high income)":
+                    return Value.EastAsiaPacificExcludingHighIncome;
+                case "Middle East & North Africa (excluding high income)":
+                    return Value.MiddleEastNorthAfricaExcludingHighIncome;
+                case "High income":
+                    return Value.HighIncome;
+                case "Low income":
+                    return Value.LowIncome;
+                case "Aggregates":
+                    return Value.Aggregates;
+                case "Lower middle income":
+                    return Value.LowerMiddleIncome;
+                case "Upper middle income":
+                    return Value.UpperMiddleIncome;
+                case "Not classified":
+                    return Value.NotClassified;
+                case "IDA":
+                    return Value.Ida;
+                case "IBRD":
+                    return Value.Ibrd;
+                case "Blend":
+                    return Value.Blend;
+                case "Latin America & Caribbean ":
+                    return Value.LatinAmericaCaribbean;
+                case "Sub-Saharan Africa ":
+                    return Value.SubSaharanAfrica;
+                case "Europe & Central Asia":
+                    return Value.EuropeCentralAsia;
+                case "Middle East & North Africa":
+                    return Value.MiddleEastNorthAfrica;
+                case "East Asia & Pacific":
+                    return Value.EastAsiaPacific;
+                case "North America":
+                    return Value.NorthAmerica;
+            }
+            throw new Exception("Cannot unmarshal type Value");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Value)untypedValue;
+            switch (value)
+            {
+                case Value.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Value.SouthAsia:
+                    serializer.Serialize(writer, "South Asia");
+                    return;
+                case Value.SubSaharanAfricaExcludingHighIncome:
+                    serializer.Serialize(writer, "Sub-Saharan Africa (excluding high income)");
+                    return;
+                case Value.EuropeCentralAsiaExcludingHighIncome:
+                    serializer.Serialize(writer, "Europe & Central Asia (excluding high income)");
+                    return;
+                case Value.LatinAmericaCaribbeanExcludingHighIncome:
+                    serializer.Serialize(writer, "Latin America & Caribbean (excluding high income)");
+                    return;
+                case Value.EastAsiaPacificExcludingHighIncome:
+                    serializer.Serialize(writer, "East Asia & Pacific (excluding high income)");
+                    return;
+                case Value.MiddleEastNorthAfricaExcludingHighIncome:
+                    serializer.Serialize(writer, "Middle East & North Africa (excluding high income)");
+                    return;
+                case Value.HighIncome:
+                    serializer.Serialize(writer, "High income");
+                    return;
+                case Value.LowIncome:
+                    serializer.Serialize(writer, "Low income");
+                    return;
+                case Value.Aggregates:
+                    serializer.Serialize(writer, "Aggregates");
+                    return;
+                case Value.LowerMiddleIncome:
+                    serializer.Serialize(writer, "Lower middle income");
+                    return;
+                case Value.UpperMiddleIncome:
+                    serializer.Serialize(writer, "Upper middle income");
+                    return;
+                case Value.NotClassified:
+                    serializer.Serialize(writer, "Not classified");
+                    return;
+                case Value.Ida:
+                    serializer.Serialize(writer, "IDA");
+                    return;
+                case Value.Ibrd:
+                    serializer.Serialize(writer, "IBRD");
+                    return;
+                case Value.Blend:
+                    serializer.Serialize(writer, "Blend");
+                    return;
+                case Value.LatinAmericaCaribbean:
+                    serializer.Serialize(writer, "Latin America & Caribbean ");
+                    return;
+                case Value.SubSaharanAfrica:
+                    serializer.Serialize(writer, "Sub-Saharan Africa ");
+                    return;
+                case Value.EuropeCentralAsia:
+                    serializer.Serialize(writer, "Europe & Central Asia");
+                    return;
+                case Value.MiddleEastNorthAfrica:
+                    serializer.Serialize(writer, "Middle East & North Africa");
+                    return;
+                case Value.EastAsiaPacific:
+                    serializer.Serialize(writer, "East Asia & Pacific");
+                    return;
+                case Value.NorthAmerica:
+                    serializer.Serialize(writer, "North America");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Value");
+        }
+
+        public static readonly ValueConverter Singleton = new ValueConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/32431.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/32431.json/default/QuickType.cs
new file mode 100644
index 0000000..115a77c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/32431.json/default/QuickType.cs
@@ -0,0 +1,400 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("bbox", Required = Required.Always)]
+        public double[] Bbox { get; set; }
+
+        [JsonProperty("features", Required = Required.Always)]
+        public Feature[] Features { get; set; }
+
+        [JsonProperty("metadata", Required = Required.Always)]
+        public Metadata Metadata { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Feature
+    {
+        [JsonProperty("geometry", Required = Required.Always)]
+        public Geometry Geometry { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("properties", Required = Required.Always)]
+        public Properties Properties { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public FeatureType Type { get; set; }
+    }
+
+    public partial record Geometry
+    {
+        [JsonProperty("coordinates", Required = Required.Always)]
+        public double[] Coordinates { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public GeometryType Type { get; set; }
+    }
+
+    public partial record Properties
+    {
+        [JsonProperty("alert", Required = Required.AllowNull)]
+        public object Alert { get; set; }
+
+        [JsonProperty("cdi", Required = Required.AllowNull)]
+        public object Cdi { get; set; }
+
+        [JsonProperty("code", Required = Required.Always)]
+        public string Code { get; set; }
+
+        [JsonProperty("detail", Required = Required.Always)]
+        public Uri Detail { get; set; }
+
+        [JsonProperty("dmin", Required = Required.AllowNull)]
+        public double? Dmin { get; set; }
+
+        [JsonProperty("felt", Required = Required.AllowNull)]
+        public object Felt { get; set; }
+
+        [JsonProperty("gap", Required = Required.AllowNull)]
+        public long? Gap { get; set; }
+
+        [JsonProperty("ids", Required = Required.Always)]
+        public string Ids { get; set; }
+
+        [JsonProperty("mag", Required = Required.Always)]
+        public double Mag { get; set; }
+
+        [JsonProperty("magType", Required = Required.Always)]
+        public MagType MagType { get; set; }
+
+        [JsonProperty("mmi", Required = Required.AllowNull)]
+        public object Mmi { get; set; }
+
+        [JsonProperty("net", Required = Required.Always)]
+        public string Net { get; set; }
+
+        [JsonProperty("nst", Required = Required.AllowNull)]
+        public long? Nst { get; set; }
+
+        [JsonProperty("place", Required = Required.Always)]
+        public string Place { get; set; }
+
+        [JsonProperty("rms", Required = Required.Always)]
+        public double Rms { get; set; }
+
+        [JsonProperty("sig", Required = Required.Always)]
+        public long Sig { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public string Sources { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("time", Required = Required.Always)]
+        public long Time { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("tsunami", Required = Required.Always)]
+        public long Tsunami { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public PropertiesType Type { get; set; }
+
+        [JsonProperty("types", Required = Required.Always)]
+        public string Types { get; set; }
+
+        [JsonProperty("tz", Required = Required.Always)]
+        public long Tz { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public long Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Metadata
+    {
+        [JsonProperty("api", Required = Required.Always)]
+        public string Api { get; set; }
+
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("generated", Required = Required.Always)]
+        public long Generated { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum GeometryType { Point };
+
+    public enum MagType { Md, Ml, Mb };
+
+    public enum Status { Automatic, Reviewed };
+
+    public enum PropertiesType { Earthquake };
+
+    public enum FeatureType { Feature };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                GeometryTypeConverter.Singleton,
+                MagTypeConverter.Singleton,
+                StatusConverter.Singleton,
+                PropertiesTypeConverter.Singleton,
+                FeatureTypeConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class GeometryTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GeometryType) || t == typeof(GeometryType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Point")
+            {
+                return GeometryType.Point;
+            }
+            throw new Exception("Cannot unmarshal type GeometryType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GeometryType)untypedValue;
+            if (value == GeometryType.Point)
+            {
+                serializer.Serialize(writer, "Point");
+                return;
+            }
+            throw new Exception("Cannot marshal type GeometryType");
+        }
+
+        public static readonly GeometryTypeConverter Singleton = new GeometryTypeConverter();
+    }
+
+    internal class MagTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MagType) || t == typeof(MagType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "md":
+                    return MagType.Md;
+                case "ml":
+                    return MagType.Ml;
+                case "mb":
+                    return MagType.Mb;
+            }
+            throw new Exception("Cannot unmarshal type MagType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (MagType)untypedValue;
+            switch (value)
+            {
+                case MagType.Md:
+                    serializer.Serialize(writer, "md");
+                    return;
+                case MagType.Ml:
+                    serializer.Serialize(writer, "ml");
+                    return;
+                case MagType.Mb:
+                    serializer.Serialize(writer, "mb");
+                    return;
+            }
+            throw new Exception("Cannot marshal type MagType");
+        }
+
+        public static readonly MagTypeConverter Singleton = new MagTypeConverter();
+    }
+
+    internal class StatusConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Status) || t == typeof(Status?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "automatic":
+                    return Status.Automatic;
+                case "reviewed":
+                    return Status.Reviewed;
+            }
+            throw new Exception("Cannot unmarshal type Status");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Status)untypedValue;
+            switch (value)
+            {
+                case Status.Automatic:
+                    serializer.Serialize(writer, "automatic");
+                    return;
+                case Status.Reviewed:
+                    serializer.Serialize(writer, "reviewed");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Status");
+        }
+
+        public static readonly StatusConverter Singleton = new StatusConverter();
+    }
+
+    internal class PropertiesTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PropertiesType) || t == typeof(PropertiesType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "earthquake")
+            {
+                return PropertiesType.Earthquake;
+            }
+            throw new Exception("Cannot unmarshal type PropertiesType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PropertiesType)untypedValue;
+            if (value == PropertiesType.Earthquake)
+            {
+                serializer.Serialize(writer, "earthquake");
+                return;
+            }
+            throw new Exception("Cannot marshal type PropertiesType");
+        }
+
+        public static readonly PropertiesTypeConverter Singleton = new PropertiesTypeConverter();
+    }
+
+    internal class FeatureTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FeatureType) || t == typeof(FeatureType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Feature")
+            {
+                return FeatureType.Feature;
+            }
+            throw new Exception("Cannot unmarshal type FeatureType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FeatureType)untypedValue;
+            if (value == FeatureType.Feature)
+            {
+                serializer.Serialize(writer, "Feature");
+                return;
+            }
+            throw new Exception("Cannot marshal type FeatureType");
+        }
+
+        public static readonly FeatureTypeConverter Singleton = new FeatureTypeConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/32d5c.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/32d5c.json/default/QuickType.cs
new file mode 100644
index 0000000..3669f77
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/32d5c.json/default/QuickType.cs
@@ -0,0 +1,82 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("BirthDate", Required = Required.AllowNull)]
+        public DateTimeOffset? BirthDate { get; set; }
+
+        [JsonProperty("BirthDateIsProtected", Required = Required.Always)]
+        public bool BirthDateIsProtected { get; set; }
+
+        [JsonProperty("GenderTypeID", Required = Required.Always)]
+        public long GenderTypeId { get; set; }
+
+        [JsonProperty("Notes", Required = Required.Always)]
+        public string Notes { get; set; }
+
+        [JsonProperty("ParliamentaryName", Required = Required.Always)]
+        public string ParliamentaryName { get; set; }
+
+        [JsonProperty("PersonID", Required = Required.Always)]
+        public long PersonId { get; set; }
+
+        [JsonProperty("PhotoURL", Required = Required.Always)]
+        public string PhotoUrl { get; set; }
+
+        [JsonProperty("PreferredName", Required = Required.Always)]
+        public string PreferredName { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/337ed.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/337ed.json/default/QuickType.cs
new file mode 100644
index 0000000..7152cf0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/337ed.json/default/QuickType.cs
@@ -0,0 +1,346 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("facets", Required = Required.Always)]
+        public Facets Facets { get; set; }
+
+        [JsonProperty("limit", Required = Required.Always)]
+        public long Limit { get; set; }
+
+        [JsonProperty("next", Required = Required.Always)]
+        public Uri Next { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("previous", Required = Required.Always)]
+        public bool Previous { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Facets
+    {
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("cost_absolute", Required = Required.AllowNull)]
+        public long? CostAbsolute { get; set; }
+
+        [JsonProperty("cost_max", Required = Required.AllowNull)]
+        public long? CostMax { get; set; }
+
+        [JsonProperty("cost_min", Required = Required.AllowNull)]
+        public long? CostMin { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("customIncomes", Required = Required.Always)]
+        public CustomIncome[] CustomIncomes { get; set; }
+
+        [JsonProperty("direct_rep_costs_max", Required = Required.AllowNull)]
+        public object DirectRepCostsMax { get; set; }
+
+        [JsonProperty("direct_rep_costs_min", Required = Required.AllowNull)]
+        public object DirectRepCostsMin { get; set; }
+
+        [JsonProperty("end_date", Required = Required.Always)]
+        public DateTimeOffset EndDate { get; set; }
+
+        [JsonProperty("eur_sources_grants", Required = Required.Always)]
+        public long EurSourcesGrants { get; set; }
+
+        [JsonProperty("eur_sources_grants_src", Required = Required.AllowNull)]
+        public string? EurSourcesGrantsSrc { get; set; }
+
+        [JsonProperty("eur_sources_procurement", Required = Required.Always)]
+        public long EurSourcesProcurement { get; set; }
+
+        [JsonProperty("eur_sources_procurement_src", Required = Required.AllowNull)]
+        public string? EurSourcesProcurementSrc { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("new_organisation", Required = Required.AllowNull)]
+        public object NewOrganisation { get; set; }
+
+        [JsonProperty("no_clients", Required = Required.AllowNull)]
+        public string? NoClients { get; set; }
+
+        [JsonProperty("other_financial_information", Required = Required.AllowNull)]
+        public string? OtherFinancialInformation { get; set; }
+
+        [JsonProperty("other_sources_contributions", Required = Required.AllowNull)]
+        public long? OtherSourcesContributions { get; set; }
+
+        [JsonProperty("other_sources_donation", Required = Required.AllowNull)]
+        public long? OtherSourcesDonation { get; set; }
+
+        [JsonProperty("other_sources_total", Required = Required.AllowNull)]
+        public long? OtherSourcesTotal { get; set; }
+
+        [JsonProperty("public_financing_infranational", Required = Required.AllowNull)]
+        public long? PublicFinancingInfranational { get; set; }
+
+        [JsonProperty("public_financing_national", Required = Required.AllowNull)]
+        public long? PublicFinancingNational { get; set; }
+
+        [JsonProperty("public_financing_total", Required = Required.AllowNull)]
+        public long? PublicFinancingTotal { get; set; }
+
+        [JsonProperty("representative", Required = Required.Always)]
+        public string Representative { get; set; }
+
+        [JsonProperty("start_date", Required = Required.Always)]
+        public DateTimeOffset StartDate { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("total_budget", Required = Required.AllowNull)]
+        public long? TotalBudget { get; set; }
+
+        [JsonProperty("turnover_absolute", Required = Required.AllowNull)]
+        public long? TurnoverAbsolute { get; set; }
+
+        [JsonProperty("turnover_max", Required = Required.AllowNull)]
+        public long? TurnoverMax { get; set; }
+
+        [JsonProperty("turnover_min", Required = Required.AllowNull)]
+        public long? TurnoverMin { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public ResultType Type { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("uri", Required = Required.Always)]
+        public Uri Uri { get; set; }
+    }
+
+    public partial record CustomIncome
+    {
+        [JsonProperty("amount", Required = Required.Always)]
+        public long Amount { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public CustomIncomeType Type { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("uri", Required = Required.Always)]
+        public Uri Uri { get; set; }
+    }
+
+    public enum Status { Active, Inactive };
+
+    public enum CustomIncomeType { Public, Other };
+
+    public enum ResultType { FinancialDataNgo, FinancialDataLawyer, FinancialDataTradeAssociation };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                StatusConverter.Singleton,
+                CustomIncomeTypeConverter.Singleton,
+                ResultTypeConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class StatusConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Status) || t == typeof(Status?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "active":
+                    return Status.Active;
+                case "inactive":
+                    return Status.Inactive;
+            }
+            throw new Exception("Cannot unmarshal type Status");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Status)untypedValue;
+            switch (value)
+            {
+                case Status.Active:
+                    serializer.Serialize(writer, "active");
+                    return;
+                case Status.Inactive:
+                    serializer.Serialize(writer, "inactive");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Status");
+        }
+
+        public static readonly StatusConverter Singleton = new StatusConverter();
+    }
+
+    internal class CustomIncomeTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CustomIncomeType) || t == typeof(CustomIncomeType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "public":
+                    return CustomIncomeType.Public;
+                case "other":
+                    return CustomIncomeType.Other;
+            }
+            throw new Exception("Cannot unmarshal type CustomIncomeType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (CustomIncomeType)untypedValue;
+            switch (value)
+            {
+                case CustomIncomeType.Public:
+                    serializer.Serialize(writer, "public");
+                    return;
+                case CustomIncomeType.Other:
+                    serializer.Serialize(writer, "other");
+                    return;
+            }
+            throw new Exception("Cannot marshal type CustomIncomeType");
+        }
+
+        public static readonly CustomIncomeTypeConverter Singleton = new CustomIncomeTypeConverter();
+    }
+
+    internal class ResultTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ResultType) || t == typeof(ResultType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "FinancialDataNGO":
+                    return ResultType.FinancialDataNgo;
+                case "FinancialDataLawyer":
+                    return ResultType.FinancialDataLawyer;
+                case "FinancialDataTradeAssociation":
+                    return ResultType.FinancialDataTradeAssociation;
+            }
+            throw new Exception("Cannot unmarshal type ResultType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ResultType)untypedValue;
+            switch (value)
+            {
+                case ResultType.FinancialDataNgo:
+                    serializer.Serialize(writer, "FinancialDataNGO");
+                    return;
+                case ResultType.FinancialDataLawyer:
+                    serializer.Serialize(writer, "FinancialDataLawyer");
+                    return;
+                case ResultType.FinancialDataTradeAssociation:
+                    serializer.Serialize(writer, "FinancialDataTradeAssociation");
+                    return;
+            }
+            throw new Exception("Cannot marshal type ResultType");
+        }
+
+        public static readonly ResultTypeConverter Singleton = new ResultTypeConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/33d2e.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/33d2e.json/default/QuickType.cs
new file mode 100644
index 0000000..3077438
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/33d2e.json/default/QuickType.cs
@@ -0,0 +1,448 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("laureates", Required = Required.Always)]
+        public Laureate[] Laureates { get; set; }
+    }
+
+    public partial record Laureate
+    {
+        [JsonProperty("born", Required = Required.Always)]
+        public BornUnion Born { get; set; }
+
+        [JsonProperty("bornCity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? BornCity { get; set; }
+
+        [JsonProperty("bornCountry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? BornCountry { get; set; }
+
+        [JsonProperty("bornCountryCode", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? BornCountryCode { get; set; }
+
+        [JsonProperty("died", Required = Required.Always)]
+        public BornUnion Died { get; set; }
+
+        [JsonProperty("diedCity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DiedCity { get; set; }
+
+        [JsonProperty("diedCountry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DiedCountry { get; set; }
+
+        [JsonProperty("diedCountryCode", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DiedCountryCode { get; set; }
+
+        [JsonProperty("firstname", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Firstname { get; set; }
+
+        [JsonProperty("gender", Required = Required.Always)]
+        public Gender Gender { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Id { get; set; }
+
+        [JsonProperty("prizes", Required = Required.Always)]
+        public Prize[] Prizes { get; set; }
+
+        [JsonProperty("surname", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Surname { get; set; }
+    }
+
+    public partial record Prize
+    {
+        [JsonProperty("affiliations", Required = Required.Always)]
+        public AffiliationElement[] Affiliations { get; set; }
+
+        [JsonProperty("category", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Category? Category { get; set; }
+
+        [JsonProperty("motivation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Motivation { get; set; }
+
+        [JsonProperty("overallMotivation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? OverallMotivation { get; set; }
+
+        [JsonProperty("share", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Share { get; set; }
+
+        [JsonProperty("year", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Year { get; set; }
+    }
+
+    public partial record AffiliationClass
+    {
+        [JsonProperty("city", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? City { get; set; }
+
+        [JsonProperty("country", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Country { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Name { get; set; }
+    }
+
+    public enum BornEnum { The00000000, The18980000, The19430000 };
+
+    public enum Gender { Male, Female, Org };
+
+    public enum Category { Physics, Chemistry, Peace, Medicine, Literature, Economics };
+
+    public partial struct BornUnion
+    {
+        public DateTimeOffset? DateTime;
+        public BornEnum? Enum;
+
+        public static implicit operator BornUnion(DateTimeOffset DateTime) => new BornUnion { DateTime = DateTime };
+        public static implicit operator BornUnion(BornEnum Enum) => new BornUnion { Enum = Enum };
+    }
+
+    public partial struct AffiliationElement
+    {
+        public AffiliationClass? AffiliationClass;
+        public object[]? AnythingArray;
+
+        public static implicit operator AffiliationElement(AffiliationClass AffiliationClass) => new AffiliationElement { AffiliationClass = AffiliationClass };
+        public static implicit operator AffiliationElement(object[] AnythingArray) => new AffiliationElement { AnythingArray = AnythingArray };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                BornUnionConverter.Singleton,
+                BornEnumConverter.Singleton,
+                GenderConverter.Singleton,
+                AffiliationElementConverter.Singleton,
+                CategoryConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class BornUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(BornUnion) || t == typeof(BornUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    DateTimeOffset dt;
+                    if (DateTimeOffset.TryParse(stringValue, out dt))
+                    {
+                        return new BornUnion { DateTime = dt };
+                    }
+                    switch (stringValue)
+                    {
+                        case "0000-00-00":
+                            return new BornUnion { Enum = BornEnum.The00000000 };
+                        case "1898-00-00":
+                            return new BornUnion { Enum = BornEnum.The18980000 };
+                        case "1943-00-00":
+                            return new BornUnion { Enum = BornEnum.The19430000 };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type BornUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (BornUnion)untypedValue;
+            if (value.DateTime != null)
+            {
+                serializer.Serialize(writer, value.DateTime.Value.ToString("o", System.Globalization.CultureInfo.InvariantCulture));
+                return;
+            }
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case BornEnum.The00000000:
+                        serializer.Serialize(writer, "0000-00-00");
+                        return;
+                    case BornEnum.The18980000:
+                        serializer.Serialize(writer, "1898-00-00");
+                        return;
+                    case BornEnum.The19430000:
+                        serializer.Serialize(writer, "1943-00-00");
+                        return;
+                }
+            }
+            throw new Exception("Cannot marshal type BornUnion");
+        }
+
+        public static readonly BornUnionConverter Singleton = new BornUnionConverter();
+    }
+
+    internal class BornEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(BornEnum) || t == typeof(BornEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "0000-00-00":
+                    return BornEnum.The00000000;
+                case "1898-00-00":
+                    return BornEnum.The18980000;
+                case "1943-00-00":
+                    return BornEnum.The19430000;
+            }
+            throw new Exception("Cannot unmarshal type BornEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (BornEnum)untypedValue;
+            switch (value)
+            {
+                case BornEnum.The00000000:
+                    serializer.Serialize(writer, "0000-00-00");
+                    return;
+                case BornEnum.The18980000:
+                    serializer.Serialize(writer, "1898-00-00");
+                    return;
+                case BornEnum.The19430000:
+                    serializer.Serialize(writer, "1943-00-00");
+                    return;
+            }
+            throw new Exception("Cannot marshal type BornEnum");
+        }
+
+        public static readonly BornEnumConverter Singleton = new BornEnumConverter();
+    }
+
+    internal class GenderConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gender) || t == typeof(Gender?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "male":
+                    return Gender.Male;
+                case "female":
+                    return Gender.Female;
+                case "org":
+                    return Gender.Org;
+            }
+            throw new Exception("Cannot unmarshal type Gender");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Gender)untypedValue;
+            switch (value)
+            {
+                case Gender.Male:
+                    serializer.Serialize(writer, "male");
+                    return;
+                case Gender.Female:
+                    serializer.Serialize(writer, "female");
+                    return;
+                case Gender.Org:
+                    serializer.Serialize(writer, "org");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Gender");
+        }
+
+        public static readonly GenderConverter Singleton = new GenderConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class AffiliationElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AffiliationElement) || t == typeof(AffiliationElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AffiliationClass>(reader);
+                    return new AffiliationElement { AffiliationClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new AffiliationElement { AnythingArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AffiliationElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AffiliationElement)untypedValue;
+            if (value.AnythingArray != null)
+            {
+                serializer.Serialize(writer, value.AnythingArray);
+                return;
+            }
+            if (value.AffiliationClass != null)
+            {
+                serializer.Serialize(writer, value.AffiliationClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AffiliationElement");
+        }
+
+        public static readonly AffiliationElementConverter Singleton = new AffiliationElementConverter();
+    }
+
+    internal class CategoryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Category) || t == typeof(Category?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "physics":
+                    return Category.Physics;
+                case "chemistry":
+                    return Category.Chemistry;
+                case "peace":
+                    return Category.Peace;
+                case "medicine":
+                    return Category.Medicine;
+                case "literature":
+                    return Category.Literature;
+                case "economics":
+                    return Category.Economics;
+            }
+            throw new Exception("Cannot unmarshal type Category");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Category)untypedValue;
+            switch (value)
+            {
+                case Category.Physics:
+                    serializer.Serialize(writer, "physics");
+                    return;
+                case Category.Chemistry:
+                    serializer.Serialize(writer, "chemistry");
+                    return;
+                case Category.Peace:
+                    serializer.Serialize(writer, "peace");
+                    return;
+                case Category.Medicine:
+                    serializer.Serialize(writer, "medicine");
+                    return;
+                case Category.Literature:
+                    serializer.Serialize(writer, "literature");
+                    return;
+                case Category.Economics:
+                    serializer.Serialize(writer, "economics");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Category");
+        }
+
+        public static readonly CategoryConverter Singleton = new CategoryConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/34702.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/34702.json/default/QuickType.cs
new file mode 100644
index 0000000..b1854aa
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/34702.json/default/QuickType.cs
@@ -0,0 +1,555 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("crs", Required = Required.Always)]
+        public Crs Crs { get; set; }
+
+        [JsonProperty("features", Required = Required.Always)]
+        public Feature[] Features { get; set; }
+
+        [JsonProperty("totalFeatures", Required = Required.Always)]
+        public long TotalFeatures { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Crs
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public CrsProperties Properties { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record CrsProperties
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record Feature
+    {
+        [JsonProperty("geometry", Required = Required.Always)]
+        public Geometry Geometry { get; set; }
+
+        [JsonProperty("geometry_name", Required = Required.Always)]
+        public GeometryName GeometryName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("properties", Required = Required.Always)]
+        public FeatureProperties Properties { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public FeatureType Type { get; set; }
+    }
+
+    public partial record Geometry
+    {
+        [JsonProperty("coordinates", Required = Required.Always)]
+        public double[] Coordinates { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public GeometryType Type { get; set; }
+    }
+
+    public partial record FeatureProperties
+    {
+        [JsonProperty("division", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Division { get; set; }
+
+        [JsonProperty("fax", Required = Required.Always)]
+        public double Fax { get; set; }
+
+        [JsonProperty("fire_ban_r", Required = Required.AllowNull)]
+        public FireBanR? FireBanR { get; set; }
+
+        [JsonProperty("latitude", Required = Required.Always)]
+        public double Latitude { get; set; }
+
+        [JsonProperty("local_govt", Required = Required.Always)]
+        public string LocalGovt { get; set; }
+
+        [JsonProperty("longitude", Required = Required.Always)]
+        public double Longitude { get; set; }
+
+        [JsonProperty("no", Required = Required.AllowNull)]
+        public string? No { get; set; }
+
+        [JsonProperty("phone", Required = Required.Always)]
+        public double Phone { get; set; }
+
+        [JsonProperty("postcode", Required = Required.Always)]
+        public long Postcode { get; set; }
+
+        [JsonProperty("psa", Required = Required.Always)]
+        public string Psa { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public Region Region { get; set; }
+
+        [JsonProperty("station", Required = Required.Always)]
+        public string Station { get; set; }
+
+        [JsonProperty("street", Required = Required.Always)]
+        public string Street { get; set; }
+
+        [JsonProperty("suburb", Required = Required.Always)]
+        public string Suburb { get; set; }
+
+        [JsonProperty("type", Required = Required.AllowNull)]
+        public PropertiesType? Type { get; set; }
+    }
+
+    public enum GeometryType { Point };
+
+    public enum GeometryName { Geom };
+
+    public enum FireBanR { NorthCentral, Central, SouthWest, Wimmera, NorthernCountry, EastGippsland, NorthEast, Mallee, WestSouthGippsland, Ballarat };
+
+    public enum Region { Eastern, NorthernMetro, Western, SouthernMetro };
+
+    public enum PropertiesType { Street, Avenue, Road, Highway, Boulevard, Court, Way, Drive, South, Hill, Lane, Close, Parade, TypeRoad, Place, Rd };
+
+    public enum FeatureType { Feature };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                GeometryTypeConverter.Singleton,
+                GeometryNameConverter.Singleton,
+                FireBanRConverter.Singleton,
+                RegionConverter.Singleton,
+                PropertiesTypeConverter.Singleton,
+                FeatureTypeConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class GeometryTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GeometryType) || t == typeof(GeometryType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Point")
+            {
+                return GeometryType.Point;
+            }
+            throw new Exception("Cannot unmarshal type GeometryType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GeometryType)untypedValue;
+            if (value == GeometryType.Point)
+            {
+                serializer.Serialize(writer, "Point");
+                return;
+            }
+            throw new Exception("Cannot marshal type GeometryType");
+        }
+
+        public static readonly GeometryTypeConverter Singleton = new GeometryTypeConverter();
+    }
+
+    internal class GeometryNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GeometryName) || t == typeof(GeometryName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "geom")
+            {
+                return GeometryName.Geom;
+            }
+            throw new Exception("Cannot unmarshal type GeometryName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GeometryName)untypedValue;
+            if (value == GeometryName.Geom)
+            {
+                serializer.Serialize(writer, "geom");
+                return;
+            }
+            throw new Exception("Cannot marshal type GeometryName");
+        }
+
+        public static readonly GeometryNameConverter Singleton = new GeometryNameConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class FireBanRConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FireBanR) || t == typeof(FireBanR?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "North Central":
+                    return FireBanR.NorthCentral;
+                case "Central":
+                    return FireBanR.Central;
+                case "South West":
+                    return FireBanR.SouthWest;
+                case "Wimmera":
+                    return FireBanR.Wimmera;
+                case "Northern Country":
+                    return FireBanR.NorthernCountry;
+                case "East Gippsland":
+                    return FireBanR.EastGippsland;
+                case "North East":
+                    return FireBanR.NorthEast;
+                case "Mallee":
+                    return FireBanR.Mallee;
+                case "West &South Gippsland":
+                    return FireBanR.WestSouthGippsland;
+                case "Ballarat":
+                    return FireBanR.Ballarat;
+            }
+            throw new Exception("Cannot unmarshal type FireBanR");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FireBanR)untypedValue;
+            switch (value)
+            {
+                case FireBanR.NorthCentral:
+                    serializer.Serialize(writer, "North Central");
+                    return;
+                case FireBanR.Central:
+                    serializer.Serialize(writer, "Central");
+                    return;
+                case FireBanR.SouthWest:
+                    serializer.Serialize(writer, "South West");
+                    return;
+                case FireBanR.Wimmera:
+                    serializer.Serialize(writer, "Wimmera");
+                    return;
+                case FireBanR.NorthernCountry:
+                    serializer.Serialize(writer, "Northern Country");
+                    return;
+                case FireBanR.EastGippsland:
+                    serializer.Serialize(writer, "East Gippsland");
+                    return;
+                case FireBanR.NorthEast:
+                    serializer.Serialize(writer, "North East");
+                    return;
+                case FireBanR.Mallee:
+                    serializer.Serialize(writer, "Mallee");
+                    return;
+                case FireBanR.WestSouthGippsland:
+                    serializer.Serialize(writer, "West &South Gippsland");
+                    return;
+                case FireBanR.Ballarat:
+                    serializer.Serialize(writer, "Ballarat");
+                    return;
+            }
+            throw new Exception("Cannot marshal type FireBanR");
+        }
+
+        public static readonly FireBanRConverter Singleton = new FireBanRConverter();
+    }
+
+    internal class RegionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Region) || t == typeof(Region?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Eastern":
+                    return Region.Eastern;
+                case "Northern Metro":
+                    return Region.NorthernMetro;
+                case "Western":
+                    return Region.Western;
+                case "Southern Metro":
+                    return Region.SouthernMetro;
+            }
+            throw new Exception("Cannot unmarshal type Region");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Region)untypedValue;
+            switch (value)
+            {
+                case Region.Eastern:
+                    serializer.Serialize(writer, "Eastern");
+                    return;
+                case Region.NorthernMetro:
+                    serializer.Serialize(writer, "Northern Metro");
+                    return;
+                case Region.Western:
+                    serializer.Serialize(writer, "Western");
+                    return;
+                case Region.SouthernMetro:
+                    serializer.Serialize(writer, "Southern Metro");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Region");
+        }
+
+        public static readonly RegionConverter Singleton = new RegionConverter();
+    }
+
+    internal class PropertiesTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PropertiesType) || t == typeof(PropertiesType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "STREET":
+                    return PropertiesType.Street;
+                case "AVENUE":
+                    return PropertiesType.Avenue;
+                case "ROAD":
+                    return PropertiesType.Road;
+                case "HIGHWAY":
+                    return PropertiesType.Highway;
+                case "BOULEVARD":
+                    return PropertiesType.Boulevard;
+                case "COURT":
+                    return PropertiesType.Court;
+                case "WAY":
+                    return PropertiesType.Way;
+                case "DRIVE":
+                    return PropertiesType.Drive;
+                case "SOUTH":
+                    return PropertiesType.South;
+                case "HILL":
+                    return PropertiesType.Hill;
+                case "LANE":
+                    return PropertiesType.Lane;
+                case "CLOSE":
+                    return PropertiesType.Close;
+                case "PARADE":
+                    return PropertiesType.Parade;
+                case "Road":
+                    return PropertiesType.TypeRoad;
+                case "PLACE":
+                    return PropertiesType.Place;
+                case "RD":
+                    return PropertiesType.Rd;
+            }
+            throw new Exception("Cannot unmarshal type PropertiesType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PropertiesType)untypedValue;
+            switch (value)
+            {
+                case PropertiesType.Street:
+                    serializer.Serialize(writer, "STREET");
+                    return;
+                case PropertiesType.Avenue:
+                    serializer.Serialize(writer, "AVENUE");
+                    return;
+                case PropertiesType.Road:
+                    serializer.Serialize(writer, "ROAD");
+                    return;
+                case PropertiesType.Highway:
+                    serializer.Serialize(writer, "HIGHWAY");
+                    return;
+                case PropertiesType.Boulevard:
+                    serializer.Serialize(writer, "BOULEVARD");
+                    return;
+                case PropertiesType.Court:
+                    serializer.Serialize(writer, "COURT");
+                    return;
+                case PropertiesType.Way:
+                    serializer.Serialize(writer, "WAY");
+                    return;
+                case PropertiesType.Drive:
+                    serializer.Serialize(writer, "DRIVE");
+                    return;
+                case PropertiesType.South:
+                    serializer.Serialize(writer, "SOUTH");
+                    return;
+                case PropertiesType.Hill:
+                    serializer.Serialize(writer, "HILL");
+                    return;
+                case PropertiesType.Lane:
+                    serializer.Serialize(writer, "LANE");
+                    return;
+                case PropertiesType.Close:
+                    serializer.Serialize(writer, "CLOSE");
+                    return;
+                case PropertiesType.Parade:
+                    serializer.Serialize(writer, "PARADE");
+                    return;
+                case PropertiesType.TypeRoad:
+                    serializer.Serialize(writer, "Road");
+                    return;
+                case PropertiesType.Place:
+                    serializer.Serialize(writer, "PLACE");
+                    return;
+                case PropertiesType.Rd:
+                    serializer.Serialize(writer, "RD");
+                    return;
+            }
+            throw new Exception("Cannot marshal type PropertiesType");
+        }
+
+        public static readonly PropertiesTypeConverter Singleton = new PropertiesTypeConverter();
+    }
+
+    internal class FeatureTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FeatureType) || t == typeof(FeatureType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Feature")
+            {
+                return FeatureType.Feature;
+            }
+            throw new Exception("Cannot unmarshal type FeatureType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FeatureType)untypedValue;
+            if (value == FeatureType.Feature)
+            {
+                serializer.Serialize(writer, "Feature");
+                return;
+            }
+            throw new Exception("Cannot marshal type FeatureType");
+        }
+
+        public static readonly FeatureTypeConverter Singleton = new FeatureTypeConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/3536b.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/3536b.json/default/QuickType.cs
new file mode 100644
index 0000000..d6e6da4
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/3536b.json/default/QuickType.cs
@@ -0,0 +1,210 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identifiers", Required = Required.Always)]
+        public Identifier[] Identifiers { get; set; }
+
+        [JsonProperty("keywords", Required = Required.Always)]
+        public Keyword[] Keywords { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public Link[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("other_names", Required = Required.Always)]
+        public object[] OtherNames { get; set; }
+
+        [JsonProperty("superseded_by", Required = Required.Always)]
+        public string SupersededBy { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text[] Text { get; set; }
+    }
+
+    public partial record Identifier
+    {
+        [JsonProperty("identifier", Required = Required.Always)]
+        public string IdentifierIdentifier { get; set; }
+
+        [JsonProperty("scheme", Required = Required.Always)]
+        public Scheme Scheme { get; set; }
+    }
+
+    public partial record Link
+    {
+        [JsonProperty("note", Required = Required.Always)]
+        public string Note { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Text
+    {
+        [JsonProperty("media_type", Required = Required.Always)]
+        public string MediaType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum Scheme { Spdx, Dep5, Trove };
+
+    public enum Keyword { Discouraged, Obsolete, OsiApproved };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                SchemeConverter.Singleton,
+                KeywordConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class SchemeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scheme) || t == typeof(Scheme?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "SPDX":
+                    return Scheme.Spdx;
+                case "DEP5":
+                    return Scheme.Dep5;
+                case "Trove":
+                    return Scheme.Trove;
+            }
+            throw new Exception("Cannot unmarshal type Scheme");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Scheme)untypedValue;
+            switch (value)
+            {
+                case Scheme.Spdx:
+                    serializer.Serialize(writer, "SPDX");
+                    return;
+                case Scheme.Dep5:
+                    serializer.Serialize(writer, "DEP5");
+                    return;
+                case Scheme.Trove:
+                    serializer.Serialize(writer, "Trove");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Scheme");
+        }
+
+        public static readonly SchemeConverter Singleton = new SchemeConverter();
+    }
+
+    internal class KeywordConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Keyword) || t == typeof(Keyword?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "discouraged":
+                    return Keyword.Discouraged;
+                case "obsolete":
+                    return Keyword.Obsolete;
+                case "osi-approved":
+                    return Keyword.OsiApproved;
+            }
+            throw new Exception("Cannot unmarshal type Keyword");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Keyword)untypedValue;
+            switch (value)
+            {
+                case Keyword.Discouraged:
+                    serializer.Serialize(writer, "discouraged");
+                    return;
+                case Keyword.Obsolete:
+                    serializer.Serialize(writer, "obsolete");
+                    return;
+                case Keyword.OsiApproved:
+                    serializer.Serialize(writer, "osi-approved");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Keyword");
+        }
+
+        public static readonly KeywordConverter Singleton = new KeywordConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/3659d.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/3659d.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/3659d.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/36d5d.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/36d5d.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/36d5d.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/3a6b3.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/3a6b3.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/3a6b3.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/3e9a3.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/3e9a3.json/default/QuickType.cs
new file mode 100644
index 0000000..b48ff5b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/3e9a3.json/default/QuickType.cs
@@ -0,0 +1,144 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("message", Required = Required.Always)]
+        public object[] Message { get; set; }
+
+        [JsonProperty("responseTime", Required = Required.Always)]
+        public long ResponseTime { get; set; }
+
+        [JsonProperty("Results", Required = Required.Always)]
+        public Results Results { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public string Status { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("series", Required = Required.Always)]
+        public Series[] Series { get; set; }
+    }
+
+    public partial record Series
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[] Data { get; set; }
+
+        [JsonProperty("seriesID", Required = Required.Always)]
+        public string SeriesId { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("footnotes", Required = Required.Always)]
+        public Footnote[] Footnotes { get; set; }
+
+        [JsonProperty("period", Required = Required.Always)]
+        public string Period { get; set; }
+
+        [JsonProperty("periodName", Required = Required.Always)]
+        public string PeriodName { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+
+        [JsonProperty("year", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Year { get; set; }
+    }
+
+    public partial record Footnote
+    {
+        [JsonProperty("code", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Code { get; set; }
+
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/3f1ce.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/3f1ce.json/default/QuickType.cs
new file mode 100644
index 0000000..ea27352
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/3f1ce.json/default/QuickType.cs
@@ -0,0 +1,391 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public enum Text { Thunderstorms };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class TextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Text) || t == typeof(Text?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Thunderstorms")
+            {
+                return Text.Thunderstorms;
+            }
+            throw new Exception("Cannot unmarshal type Text");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Text)untypedValue;
+            if (value == Text.Thunderstorms)
+            {
+                serializer.Serialize(writer, "Thunderstorms");
+                return;
+            }
+            throw new Exception("Cannot marshal type Text");
+        }
+
+        public static readonly TextConverter Singleton = new TextConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/421d4.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/421d4.json/default/QuickType.cs
new file mode 100644
index 0000000..54eed80
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/421d4.json/default/QuickType.cs
@@ -0,0 +1,416 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[][] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("view", Required = Required.Always)]
+        public View View { get; set; }
+    }
+
+    public partial record View
+    {
+        [JsonProperty("attribution", Required = Required.Always)]
+        public string Attribution { get; set; }
+
+        [JsonProperty("averageRating", Required = Required.Always)]
+        public long AverageRating { get; set; }
+
+        [JsonProperty("category", Required = Required.Always)]
+        public string Category { get; set; }
+
+        [JsonProperty("columns", Required = Required.Always)]
+        public Column[] Columns { get; set; }
+
+        [JsonProperty("createdAt", Required = Required.Always)]
+        public long CreatedAt { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("displayType", Required = Required.Always)]
+        public string DisplayType { get; set; }
+
+        [JsonProperty("downloadCount", Required = Required.Always)]
+        public long DownloadCount { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("grants", Required = Required.Always)]
+        public Grant[] Grants { get; set; }
+
+        [JsonProperty("hideFromCatalog", Required = Required.Always)]
+        public bool HideFromCatalog { get; set; }
+
+        [JsonProperty("hideFromDataJson", Required = Required.Always)]
+        public bool HideFromDataJson { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("indexUpdatedAt", Required = Required.Always)]
+        public long IndexUpdatedAt { get; set; }
+
+        [JsonProperty("license", Required = Required.Always)]
+        public License License { get; set; }
+
+        [JsonProperty("licenseId", Required = Required.Always)]
+        public string LicenseId { get; set; }
+
+        [JsonProperty("locale", Required = Required.Always)]
+        public string Locale { get; set; }
+
+        [JsonProperty("metadata", Required = Required.Always)]
+        public Metadata Metadata { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("newBackend", Required = Required.Always)]
+        public bool NewBackend { get; set; }
+
+        [JsonProperty("numberOfComments", Required = Required.Always)]
+        public long NumberOfComments { get; set; }
+
+        [JsonProperty("oid", Required = Required.Always)]
+        public long Oid { get; set; }
+
+        [JsonProperty("owner", Required = Required.Always)]
+        public Owner Owner { get; set; }
+
+        [JsonProperty("provenance", Required = Required.Always)]
+        public string Provenance { get; set; }
+
+        [JsonProperty("publicationAppendEnabled", Required = Required.Always)]
+        public bool PublicationAppendEnabled { get; set; }
+
+        [JsonProperty("publicationDate", Required = Required.Always)]
+        public long PublicationDate { get; set; }
+
+        [JsonProperty("publicationGroup", Required = Required.Always)]
+        public long PublicationGroup { get; set; }
+
+        [JsonProperty("publicationStage", Required = Required.Always)]
+        public string PublicationStage { get; set; }
+
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public string[] Rights { get; set; }
+
+        [JsonProperty("rowClass", Required = Required.Always)]
+        public string RowClass { get; set; }
+
+        [JsonProperty("rowsUpdatedAt", Required = Required.Always)]
+        public long RowsUpdatedAt { get; set; }
+
+        [JsonProperty("rowsUpdatedBy", Required = Required.Always)]
+        public string RowsUpdatedBy { get; set; }
+
+        [JsonProperty("tableAuthor", Required = Required.Always)]
+        public Owner TableAuthor { get; set; }
+
+        [JsonProperty("tableId", Required = Required.Always)]
+        public long TableId { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+
+        [JsonProperty("totalTimesRated", Required = Required.Always)]
+        public long TotalTimesRated { get; set; }
+
+        [JsonProperty("viewCount", Required = Required.Always)]
+        public long ViewCount { get; set; }
+
+        [JsonProperty("viewLastModified", Required = Required.Always)]
+        public long ViewLastModified { get; set; }
+
+        [JsonProperty("viewType", Required = Required.Always)]
+        public string ViewType { get; set; }
+    }
+
+    public partial record Column
+    {
+        [JsonProperty("cachedContents", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public CachedContents? CachedContents { get; set; }
+
+        [JsonProperty("dataTypeName", Required = Required.Always)]
+        public string DataTypeName { get; set; }
+
+        [JsonProperty("fieldName", Required = Required.Always)]
+        public string FieldName { get; set; }
+
+        [JsonProperty("flags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Flags { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public Query Format { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("position", Required = Required.Always)]
+        public long Position { get; set; }
+
+        [JsonProperty("renderTypeName", Required = Required.Always)]
+        public string RenderTypeName { get; set; }
+
+        [JsonProperty("tableColumnId", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? TableColumnId { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Width { get; set; }
+    }
+
+    public partial record CachedContents
+    {
+        [JsonProperty("average", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Average { get; set; }
+
+        [JsonProperty("largest", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Largest { get; set; }
+
+        [JsonProperty("non_null", Required = Required.Always)]
+        public long NonNull { get; set; }
+
+        [JsonProperty("null", Required = Required.Always)]
+        public long Null { get; set; }
+
+        [JsonProperty("smallest", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Smallest { get; set; }
+
+        [JsonProperty("sum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Sum { get; set; }
+
+        [JsonProperty("top", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Top[]? Top { get; set; }
+    }
+
+    public partial record Top
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public string Item { get; set; }
+    }
+
+    public partial record Query
+    {
+    }
+
+    public partial record Grant
+    {
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("inherited", Required = Required.Always)]
+        public bool Inherited { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record License
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record Metadata
+    {
+        [JsonProperty("availableDisplayTypes", Required = Required.Always)]
+        public string[] AvailableDisplayTypes { get; set; }
+
+        [JsonProperty("rdfClass", Required = Required.Always)]
+        public string RdfClass { get; set; }
+
+        [JsonProperty("rdfSubject", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long RdfSubject { get; set; }
+
+        [JsonProperty("renderTypeConfig", Required = Required.Always)]
+        public RenderTypeConfig RenderTypeConfig { get; set; }
+
+        [JsonProperty("rowIdentifier", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long RowIdentifier { get; set; }
+    }
+
+    public partial record RenderTypeConfig
+    {
+        [JsonProperty("visible", Required = Required.Always)]
+        public Visible Visible { get; set; }
+    }
+
+    public partial record Visible
+    {
+        [JsonProperty("table", Required = Required.Always)]
+        public bool Table { get; set; }
+    }
+
+    public partial record Owner
+    {
+        [JsonProperty("displayName", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("screenName", Required = Required.Always)]
+        public string ScreenName { get; set; }
+    }
+
+    public partial struct Datum
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Datum(long Integer) => new Datum { Integer = Integer };
+        public static implicit operator Datum(string String) => new Datum { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DatumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DatumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Datum) || t == typeof(Datum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Datum { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Datum { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Datum { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Datum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Datum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Datum");
+        }
+
+        public static readonly DatumConverter Singleton = new DatumConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/437e7.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/437e7.json/default/QuickType.cs
new file mode 100644
index 0000000..a517b22
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/437e7.json/default/QuickType.cs
@@ -0,0 +1,442 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("pagination", Required = Required.Always)]
+        public Pagination Pagination { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("bitly_gif_url", Required = Required.Always)]
+        public Uri BitlyGifUrl { get; set; }
+
+        [JsonProperty("bitly_url", Required = Required.Always)]
+        public Uri BitlyUrl { get; set; }
+
+        [JsonProperty("content_url", Required = Required.Always)]
+        public string ContentUrl { get; set; }
+
+        [JsonProperty("embed_url", Required = Required.Always)]
+        public Uri EmbedUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Images Images { get; set; }
+
+        [JsonProperty("import_datetime", Required = Required.Always)]
+        public string ImportDatetime { get; set; }
+
+        [JsonProperty("is_indexable", Required = Required.Always)]
+        public long IsIndexable { get; set; }
+
+        [JsonProperty("rating", Required = Required.Always)]
+        public Rating Rating { get; set; }
+
+        [JsonProperty("slug", Required = Required.Always)]
+        public string Slug { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public string Source { get; set; }
+
+        [JsonProperty("source_post_url", Required = Required.Always)]
+        public string SourcePostUrl { get; set; }
+
+        [JsonProperty("source_tld", Required = Required.Always)]
+        public string SourceTld { get; set; }
+
+        [JsonProperty("trending_datetime", Required = Required.Always)]
+        public string TrendingDatetime { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public User? User { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public string Username { get; set; }
+    }
+
+    public partial record Images
+    {
+        [JsonProperty("downsized", Required = Required.Always)]
+        public Downsized Downsized { get; set; }
+
+        [JsonProperty("downsized_large", Required = Required.Always)]
+        public Downsized DownsizedLarge { get; set; }
+
+        [JsonProperty("downsized_medium", Required = Required.Always)]
+        public Downsized DownsizedMedium { get; set; }
+
+        [JsonProperty("downsized_small", Required = Required.Always)]
+        public DownsizedSmall DownsizedSmall { get; set; }
+
+        [JsonProperty("downsized_still", Required = Required.Always)]
+        public Downsized DownsizedStill { get; set; }
+
+        [JsonProperty("fixed_height", Required = Required.Always)]
+        public FixedHeight FixedHeight { get; set; }
+
+        [JsonProperty("fixed_height_downsampled", Required = Required.Always)]
+        public FixedHeight FixedHeightDownsampled { get; set; }
+
+        [JsonProperty("fixed_height_small", Required = Required.Always)]
+        public FixedHeight FixedHeightSmall { get; set; }
+
+        [JsonProperty("fixed_height_small_still", Required = Required.Always)]
+        public Downsized FixedHeightSmallStill { get; set; }
+
+        [JsonProperty("fixed_height_still", Required = Required.Always)]
+        public Downsized FixedHeightStill { get; set; }
+
+        [JsonProperty("fixed_width", Required = Required.Always)]
+        public FixedHeight FixedWidth { get; set; }
+
+        [JsonProperty("fixed_width_downsampled", Required = Required.Always)]
+        public FixedHeight FixedWidthDownsampled { get; set; }
+
+        [JsonProperty("fixed_width_small", Required = Required.Always)]
+        public FixedHeight FixedWidthSmall { get; set; }
+
+        [JsonProperty("fixed_width_small_still", Required = Required.Always)]
+        public Downsized FixedWidthSmallStill { get; set; }
+
+        [JsonProperty("fixed_width_still", Required = Required.Always)]
+        public Downsized FixedWidthStill { get; set; }
+
+        [JsonProperty("looping", Required = Required.Always)]
+        public Looping Looping { get; set; }
+
+        [JsonProperty("original", Required = Required.Always)]
+        public FixedHeight Original { get; set; }
+
+        [JsonProperty("original_mp4", Required = Required.Always)]
+        public DownsizedSmall OriginalMp4 { get; set; }
+
+        [JsonProperty("original_still", Required = Required.Always)]
+        public Downsized OriginalStill { get; set; }
+
+        [JsonProperty("preview", Required = Required.Always)]
+        public DownsizedSmall Preview { get; set; }
+
+        [JsonProperty("preview_gif", Required = Required.Always)]
+        public Downsized PreviewGif { get; set; }
+
+        [JsonProperty("preview_webp", Required = Required.Always)]
+        public Downsized PreviewWebp { get; set; }
+    }
+
+    public partial record Downsized
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record DownsizedSmall
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record FixedHeight
+    {
+        [JsonProperty("frames", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Frames { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Uri? Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Mp4Size { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("webp", Required = Required.Always)]
+        public Uri Webp { get; set; }
+
+        [JsonProperty("webp_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long WebpSize { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Looping
+    {
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+    }
+
+    public partial record User
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("banner_url", Required = Required.Always)]
+        public Uri BannerUrl { get; set; }
+
+        [JsonProperty("display_name", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("profile_url", Required = Required.Always)]
+        public Uri ProfileUrl { get; set; }
+
+        [JsonProperty("twitter", Required = Required.Always)]
+        public string Twitter { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public string Username { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("msg", Required = Required.Always)]
+        public string Msg { get; set; }
+
+        [JsonProperty("response_id", Required = Required.Always)]
+        public string ResponseId { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Pagination
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("total_count", Required = Required.Always)]
+        public long TotalCount { get; set; }
+    }
+
+    public enum Rating { G, Pg, Y, Pg13 };
+
+    public enum TypeEnum { Gif };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                RatingConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RatingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rating) || t == typeof(Rating?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "g":
+                    return Rating.G;
+                case "pg":
+                    return Rating.Pg;
+                case "y":
+                    return Rating.Y;
+                case "pg-13":
+                    return Rating.Pg13;
+            }
+            throw new Exception("Cannot unmarshal type Rating");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Rating)untypedValue;
+            switch (value)
+            {
+                case Rating.G:
+                    serializer.Serialize(writer, "g");
+                    return;
+                case Rating.Pg:
+                    serializer.Serialize(writer, "pg");
+                    return;
+                case Rating.Y:
+                    serializer.Serialize(writer, "y");
+                    return;
+                case Rating.Pg13:
+                    serializer.Serialize(writer, "pg-13");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Rating");
+        }
+
+        public static readonly RatingConverter Singleton = new RatingConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "gif")
+            {
+                return TypeEnum.Gif;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.Gif)
+            {
+                serializer.Serialize(writer, "gif");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/43970.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/43970.json/default/QuickType.cs
new file mode 100644
index 0000000..5621fc5
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/43970.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("ID", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("Name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("Notes", Required = Required.Always)]
+        public string Notes { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/43eaf.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/43eaf.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/43eaf.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/458db.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/458db.json/default/QuickType.cs
new file mode 100644
index 0000000..c54bd39
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/458db.json/default/QuickType.cs
@@ -0,0 +1,218 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("metadata", Required = Required.Always)]
+        public Metadata Metadata { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Metadata
+    {
+        [JsonProperty("executionTime", Required = Required.Always)]
+        public double ExecutionTime { get; set; }
+
+        [JsonProperty("responseInfo", Required = Required.Always)]
+        public ResponseInfo ResponseInfo { get; set; }
+
+        [JsonProperty("resultset", Required = Required.Always)]
+        public Resultset Resultset { get; set; }
+    }
+
+    public partial record ResponseInfo
+    {
+        [JsonProperty("developerMessage", Required = Required.Always)]
+        public string DeveloperMessage { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Resultset
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("page", Required = Required.Always)]
+        public long Page { get; set; }
+
+        [JsonProperty("pagesize", Required = Required.Always)]
+        public long Pagesize { get; set; }
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("attachments", Required = Required.Always)]
+        public object[] Attachments { get; set; }
+
+        [JsonProperty("body", Required = Required.Always)]
+        public string Body { get; set; }
+
+        [JsonProperty("changed", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Changed { get; set; }
+
+        [JsonProperty("component", Required = Required.Always)]
+        public Component[] Component { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Created { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public object[] Image { get; set; }
+
+        [JsonProperty("teaser", Required = Required.Always)]
+        public object[] Teaser { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("topic", Required = Required.Always)]
+        public object[] Topic { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("uuid", Required = Required.Always)]
+        public Guid Uuid { get; set; }
+
+        [JsonProperty("vuuid", Required = Required.Always)]
+        public Guid Vuuid { get; set; }
+    }
+
+    public partial record Component
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public Name Name { get; set; }
+
+        [JsonProperty("uuid", Required = Required.Always)]
+        public Guid Uuid { get; set; }
+    }
+
+    public enum Name { OfficeOnViolenceAgainstWomen };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                NameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class NameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Name) || t == typeof(Name?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Office on Violence Against Women")
+            {
+                return Name.OfficeOnViolenceAgainstWomen;
+            }
+            throw new Exception("Cannot unmarshal type Name");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Name)untypedValue;
+            if (value == Name.OfficeOnViolenceAgainstWomen)
+            {
+                serializer.Serialize(writer, "Office on Violence Against Women");
+                return;
+            }
+            throw new Exception("Cannot marshal type Name");
+        }
+
+        public static readonly NameConverter Singleton = new NameConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/4961a.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/4961a.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/4961a.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/4a0d7.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/4a0d7.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/4a0d7.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/4a455.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/4a455.json/default/QuickType.cs
new file mode 100644
index 0000000..0ba3a1b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/4a455.json/default/QuickType.cs
@@ -0,0 +1,244 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("crs", Required = Required.Always)]
+        public Crs Crs { get; set; }
+
+        [JsonProperty("features", Required = Required.Always)]
+        public Feature[] Features { get; set; }
+
+        [JsonProperty("totalFeatures", Required = Required.Always)]
+        public long TotalFeatures { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Crs
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public CrsProperties Properties { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record CrsProperties
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record Feature
+    {
+        [JsonProperty("geometry", Required = Required.Always)]
+        public Geometry Geometry { get; set; }
+
+        [JsonProperty("geometry_name", Required = Required.Always)]
+        public GeometryName GeometryName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("properties", Required = Required.Always)]
+        public FeatureProperties Properties { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public FeatureType Type { get; set; }
+    }
+
+    public partial record Geometry
+    {
+        [JsonProperty("coordinates", Required = Required.Always)]
+        public double[][] Coordinates { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public GeometryType Type { get; set; }
+    }
+
+    public partial record FeatureProperties
+    {
+        [JsonProperty("facebookaccount", Required = Required.Always)]
+        public string Facebookaccount { get; set; }
+
+        [JsonProperty("frequencyfinderurl", Required = Required.Always)]
+        public Uri Frequencyfinderurl { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("siteurl", Required = Required.Always)]
+        public Uri Siteurl { get; set; }
+
+        [JsonProperty("streetaddress", Required = Required.Always)]
+        public string Streetaddress { get; set; }
+
+        [JsonProperty("twitteraccount", Required = Required.Always)]
+        public string Twitteraccount { get; set; }
+    }
+
+    public enum GeometryType { MultiPoint };
+
+    public enum GeometryName { Geom };
+
+    public enum FeatureType { Feature };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                GeometryTypeConverter.Singleton,
+                GeometryNameConverter.Singleton,
+                FeatureTypeConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class GeometryTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GeometryType) || t == typeof(GeometryType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "MultiPoint")
+            {
+                return GeometryType.MultiPoint;
+            }
+            throw new Exception("Cannot unmarshal type GeometryType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GeometryType)untypedValue;
+            if (value == GeometryType.MultiPoint)
+            {
+                serializer.Serialize(writer, "MultiPoint");
+                return;
+            }
+            throw new Exception("Cannot marshal type GeometryType");
+        }
+
+        public static readonly GeometryTypeConverter Singleton = new GeometryTypeConverter();
+    }
+
+    internal class GeometryNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GeometryName) || t == typeof(GeometryName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "geom")
+            {
+                return GeometryName.Geom;
+            }
+            throw new Exception("Cannot unmarshal type GeometryName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GeometryName)untypedValue;
+            if (value == GeometryName.Geom)
+            {
+                serializer.Serialize(writer, "geom");
+                return;
+            }
+            throw new Exception("Cannot marshal type GeometryName");
+        }
+
+        public static readonly GeometryNameConverter Singleton = new GeometryNameConverter();
+    }
+
+    internal class FeatureTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FeatureType) || t == typeof(FeatureType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Feature")
+            {
+                return FeatureType.Feature;
+            }
+            throw new Exception("Cannot unmarshal type FeatureType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FeatureType)untypedValue;
+            if (value == FeatureType.Feature)
+            {
+                serializer.Serialize(writer, "Feature");
+                return;
+            }
+            throw new Exception("Cannot marshal type FeatureType");
+        }
+
+        public static readonly FeatureTypeConverter Singleton = new FeatureTypeConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/4c547.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/4c547.json/default/QuickType.cs
new file mode 100644
index 0000000..1069da3
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/4c547.json/default/QuickType.cs
@@ -0,0 +1,354 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/4d6fb.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/4d6fb.json/default/QuickType.cs
new file mode 100644
index 0000000..2335a3f
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/4d6fb.json/default/QuickType.cs
@@ -0,0 +1,618 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public TopLevelData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public string Kind { get; set; }
+    }
+
+    public partial record TopLevelData
+    {
+        [JsonProperty("after", Required = Required.Always)]
+        public string After { get; set; }
+
+        [JsonProperty("before", Required = Required.AllowNull)]
+        public object Before { get; set; }
+
+        [JsonProperty("children", Required = Required.Always)]
+        public Child[] Children { get; set; }
+
+        [JsonProperty("modhash", Required = Required.Always)]
+        public string Modhash { get; set; }
+    }
+
+    public partial record Child
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public ChildData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    public partial record ChildData
+    {
+        [JsonProperty("approved_at_utc", Required = Required.AllowNull)]
+        public object ApprovedAtUtc { get; set; }
+
+        [JsonProperty("approved_by", Required = Required.AllowNull)]
+        public object ApprovedBy { get; set; }
+
+        [JsonProperty("archived", Required = Required.Always)]
+        public bool Archived { get; set; }
+
+        [JsonProperty("author", Required = Required.Always)]
+        public string Author { get; set; }
+
+        [JsonProperty("author_flair_css_class", Required = Required.AllowNull)]
+        public object AuthorFlairCssClass { get; set; }
+
+        [JsonProperty("author_flair_text", Required = Required.AllowNull)]
+        public object AuthorFlairText { get; set; }
+
+        [JsonProperty("banned_at_utc", Required = Required.AllowNull)]
+        public object BannedAtUtc { get; set; }
+
+        [JsonProperty("banned_by", Required = Required.AllowNull)]
+        public object BannedBy { get; set; }
+
+        [JsonProperty("brand_safe", Required = Required.Always)]
+        public bool BrandSafe { get; set; }
+
+        [JsonProperty("can_gild", Required = Required.Always)]
+        public bool CanGild { get; set; }
+
+        [JsonProperty("can_mod_post", Required = Required.Always)]
+        public bool CanModPost { get; set; }
+
+        [JsonProperty("clicked", Required = Required.Always)]
+        public bool Clicked { get; set; }
+
+        [JsonProperty("contest_mode", Required = Required.Always)]
+        public bool ContestMode { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public double Created { get; set; }
+
+        [JsonProperty("created_utc", Required = Required.Always)]
+        public double CreatedUtc { get; set; }
+
+        [JsonProperty("distinguished", Required = Required.AllowNull)]
+        public object Distinguished { get; set; }
+
+        [JsonProperty("domain", Required = Required.Always)]
+        public string Domain { get; set; }
+
+        [JsonProperty("downs", Required = Required.Always)]
+        public long Downs { get; set; }
+
+        [JsonProperty("edited", Required = Required.Always)]
+        public bool Edited { get; set; }
+
+        [JsonProperty("gilded", Required = Required.Always)]
+        public long Gilded { get; set; }
+
+        [JsonProperty("hidden", Required = Required.Always)]
+        public bool Hidden { get; set; }
+
+        [JsonProperty("hide_score", Required = Required.Always)]
+        public bool HideScore { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("is_self", Required = Required.Always)]
+        public bool IsSelf { get; set; }
+
+        [JsonProperty("is_video", Required = Required.Always)]
+        public bool IsVideo { get; set; }
+
+        [JsonProperty("likes", Required = Required.AllowNull)]
+        public object Likes { get; set; }
+
+        [JsonProperty("link_flair_css_class", Required = Required.AllowNull)]
+        public object LinkFlairCssClass { get; set; }
+
+        [JsonProperty("link_flair_text", Required = Required.AllowNull)]
+        public object LinkFlairText { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("media", Required = Required.AllowNull)]
+        public Media? Media { get; set; }
+
+        [JsonProperty("media_embed", Required = Required.Always)]
+        public MediaEmbed MediaEmbed { get; set; }
+
+        [JsonProperty("mod_reports", Required = Required.Always)]
+        public object[] ModReports { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("num_comments", Required = Required.Always)]
+        public long NumComments { get; set; }
+
+        [JsonProperty("num_reports", Required = Required.AllowNull)]
+        public object NumReports { get; set; }
+
+        [JsonProperty("over_18", Required = Required.Always)]
+        public bool Over18 { get; set; }
+
+        [JsonProperty("permalink", Required = Required.Always)]
+        public string Permalink { get; set; }
+
+        [JsonProperty("post_hint", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PostHint? PostHint { get; set; }
+
+        [JsonProperty("preview", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Preview? Preview { get; set; }
+
+        [JsonProperty("quarantine", Required = Required.Always)]
+        public bool Quarantine { get; set; }
+
+        [JsonProperty("removal_reason", Required = Required.AllowNull)]
+        public object RemovalReason { get; set; }
+
+        [JsonProperty("report_reasons", Required = Required.AllowNull)]
+        public object ReportReasons { get; set; }
+
+        [JsonProperty("saved", Required = Required.Always)]
+        public bool Saved { get; set; }
+
+        [JsonProperty("score", Required = Required.Always)]
+        public long Score { get; set; }
+
+        [JsonProperty("secure_media", Required = Required.AllowNull)]
+        public Media? SecureMedia { get; set; }
+
+        [JsonProperty("secure_media_embed", Required = Required.Always)]
+        public MediaEmbed SecureMediaEmbed { get; set; }
+
+        [JsonProperty("selftext", Required = Required.Always)]
+        public string Selftext { get; set; }
+
+        [JsonProperty("selftext_html", Required = Required.AllowNull)]
+        public object SelftextHtml { get; set; }
+
+        [JsonProperty("spoiler", Required = Required.Always)]
+        public bool Spoiler { get; set; }
+
+        [JsonProperty("stickied", Required = Required.Always)]
+        public bool Stickied { get; set; }
+
+        [JsonProperty("subreddit", Required = Required.Always)]
+        public Subreddit Subreddit { get; set; }
+
+        [JsonProperty("subreddit_id", Required = Required.Always)]
+        public SubredditId SubredditId { get; set; }
+
+        [JsonProperty("subreddit_name_prefixed", Required = Required.Always)]
+        public SubredditNamePrefixed SubredditNamePrefixed { get; set; }
+
+        [JsonProperty("subreddit_type", Required = Required.Always)]
+        public SubredditType SubredditType { get; set; }
+
+        [JsonProperty("suggested_sort", Required = Required.AllowNull)]
+        public object SuggestedSort { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public string Thumbnail { get; set; }
+
+        [JsonProperty("thumbnail_height", Required = Required.AllowNull)]
+        public long? ThumbnailHeight { get; set; }
+
+        [JsonProperty("thumbnail_width", Required = Required.AllowNull)]
+        public long? ThumbnailWidth { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ups", Required = Required.Always)]
+        public long Ups { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user_reports", Required = Required.Always)]
+        public object[] UserReports { get; set; }
+
+        [JsonProperty("view_count", Required = Required.AllowNull)]
+        public object ViewCount { get; set; }
+
+        [JsonProperty("visited", Required = Required.Always)]
+        public bool Visited { get; set; }
+    }
+
+    public partial record Media
+    {
+        [JsonProperty("oembed", Required = Required.Always)]
+        public Oembed Oembed { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Oembed
+    {
+        [JsonProperty("author_name", Required = Required.Always)]
+        public string AuthorName { get; set; }
+
+        [JsonProperty("author_url", Required = Required.Always)]
+        public Uri AuthorUrl { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("html", Required = Required.Always)]
+        public string Html { get; set; }
+
+        [JsonProperty("provider_name", Required = Required.Always)]
+        public string ProviderName { get; set; }
+
+        [JsonProperty("provider_url", Required = Required.Always)]
+        public Uri ProviderUrl { get; set; }
+
+        [JsonProperty("thumbnail_height", Required = Required.Always)]
+        public long ThumbnailHeight { get; set; }
+
+        [JsonProperty("thumbnail_url", Required = Required.Always)]
+        public Uri ThumbnailUrl { get; set; }
+
+        [JsonProperty("thumbnail_width", Required = Required.Always)]
+        public long ThumbnailWidth { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("version", Required = Required.Always)]
+        public string Version { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record MediaEmbed
+    {
+        [JsonProperty("content", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Content { get; set; }
+
+        [JsonProperty("height", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Height { get; set; }
+
+        [JsonProperty("scrolling", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Scrolling { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Width { get; set; }
+    }
+
+    public partial record Preview
+    {
+        [JsonProperty("enabled", Required = Required.Always)]
+        public bool Enabled { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Image[] Images { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("resolutions", Required = Required.Always)]
+        public Source[] Resolutions { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public Source Source { get; set; }
+
+        [JsonProperty("variants", Required = Required.Always)]
+        public Variants Variants { get; set; }
+    }
+
+    public partial record Source
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record Variants
+    {
+    }
+
+    public enum PostHint { RichVideo, Link };
+
+    public enum Subreddit { Todayilearned };
+
+    public enum SubredditId { T52Qqjc };
+
+    public enum SubredditNamePrefixed { RTodayilearned };
+
+    public enum SubredditType { Public };
+
+    public enum Kind { T3 };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                PostHintConverter.Singleton,
+                SubredditConverter.Singleton,
+                SubredditIdConverter.Singleton,
+                SubredditNamePrefixedConverter.Singleton,
+                SubredditTypeConverter.Singleton,
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PostHintConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PostHint) || t == typeof(PostHint?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "rich:video":
+                    return PostHint.RichVideo;
+                case "link":
+                    return PostHint.Link;
+            }
+            throw new Exception("Cannot unmarshal type PostHint");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PostHint)untypedValue;
+            switch (value)
+            {
+                case PostHint.RichVideo:
+                    serializer.Serialize(writer, "rich:video");
+                    return;
+                case PostHint.Link:
+                    serializer.Serialize(writer, "link");
+                    return;
+            }
+            throw new Exception("Cannot marshal type PostHint");
+        }
+
+        public static readonly PostHintConverter Singleton = new PostHintConverter();
+    }
+
+    internal class SubredditConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Subreddit) || t == typeof(Subreddit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "todayilearned")
+            {
+                return Subreddit.Todayilearned;
+            }
+            throw new Exception("Cannot unmarshal type Subreddit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Subreddit)untypedValue;
+            if (value == Subreddit.Todayilearned)
+            {
+                serializer.Serialize(writer, "todayilearned");
+                return;
+            }
+            throw new Exception("Cannot marshal type Subreddit");
+        }
+
+        public static readonly SubredditConverter Singleton = new SubredditConverter();
+    }
+
+    internal class SubredditIdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditId) || t == typeof(SubredditId?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t5_2qqjc")
+            {
+                return SubredditId.T52Qqjc;
+            }
+            throw new Exception("Cannot unmarshal type SubredditId");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditId)untypedValue;
+            if (value == SubredditId.T52Qqjc)
+            {
+                serializer.Serialize(writer, "t5_2qqjc");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditId");
+        }
+
+        public static readonly SubredditIdConverter Singleton = new SubredditIdConverter();
+    }
+
+    internal class SubredditNamePrefixedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditNamePrefixed) || t == typeof(SubredditNamePrefixed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "r/todayilearned")
+            {
+                return SubredditNamePrefixed.RTodayilearned;
+            }
+            throw new Exception("Cannot unmarshal type SubredditNamePrefixed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditNamePrefixed)untypedValue;
+            if (value == SubredditNamePrefixed.RTodayilearned)
+            {
+                serializer.Serialize(writer, "r/todayilearned");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditNamePrefixed");
+        }
+
+        public static readonly SubredditNamePrefixedConverter Singleton = new SubredditNamePrefixedConverter();
+    }
+
+    internal class SubredditTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditType) || t == typeof(SubredditType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "public")
+            {
+                return SubredditType.Public;
+            }
+            throw new Exception("Cannot unmarshal type SubredditType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditType)untypedValue;
+            if (value == SubredditType.Public)
+            {
+                serializer.Serialize(writer, "public");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditType");
+        }
+
+        public static readonly SubredditTypeConverter Singleton = new SubredditTypeConverter();
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t3")
+            {
+                return Kind.T3;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.T3)
+            {
+                serializer.Serialize(writer, "t3");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/4e336.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/4e336.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/4e336.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/54147.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/54147.json/default/QuickType.cs
new file mode 100644
index 0000000..44af130
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/54147.json/default/QuickType.cs
@@ -0,0 +1,98 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("args", Required = Required.Always)]
+        public Args Args { get; set; }
+
+        [JsonProperty("data", Required = Required.Always)]
+        public string Data { get; set; }
+
+        [JsonProperty("files", Required = Required.Always)]
+        public Args Files { get; set; }
+
+        [JsonProperty("form", Required = Required.Always)]
+        public Args Form { get; set; }
+
+        [JsonProperty("headers", Required = Required.Always)]
+        public Headers Headers { get; set; }
+
+        [JsonProperty("origin", Required = Required.Always)]
+        public string Origin { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Args
+    {
+    }
+
+    public partial record Headers
+    {
+        [JsonProperty("Accept-Encoding", Required = Required.Always)]
+        public string AcceptEncoding { get; set; }
+
+        [JsonProperty("Connection", Required = Required.Always)]
+        public string Connection { get; set; }
+
+        [JsonProperty("Host", Required = Required.Always)]
+        public string Host { get; set; }
+
+        [JsonProperty("User-Agent", Required = Required.Always)]
+        public string UserAgent { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/54d32.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/54d32.json/default/QuickType.cs
new file mode 100644
index 0000000..9a75b1a
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/54d32.json/default/QuickType.cs
@@ -0,0 +1,148 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("facets", Required = Required.Always)]
+        public Facets Facets { get; set; }
+
+        [JsonProperty("limit", Required = Required.Always)]
+        public long Limit { get; set; }
+
+        [JsonProperty("next", Required = Required.Always)]
+        public Uri Next { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("previous", Required = Required.Always)]
+        public bool Previous { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Facets
+    {
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("person_id", Required = Required.Always)]
+        public string PersonId { get; set; }
+
+        [JsonProperty("representative_id", Required = Required.Always)]
+        public string RepresentativeId { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+    }
+
+    public enum Status { Inactive, Active };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                StatusConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class StatusConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Status) || t == typeof(Status?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "inactive":
+                    return Status.Inactive;
+                case "active":
+                    return Status.Active;
+            }
+            throw new Exception("Cannot unmarshal type Status");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Status)untypedValue;
+            switch (value)
+            {
+                case Status.Inactive:
+                    serializer.Serialize(writer, "inactive");
+                    return;
+                case Status.Active:
+                    serializer.Serialize(writer, "active");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Status");
+        }
+
+        public static readonly StatusConverter Singleton = new StatusConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/570ec.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/570ec.json/default/QuickType.cs
new file mode 100644
index 0000000..4c35ff9
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/570ec.json/default/QuickType.cs
@@ -0,0 +1,170 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identifiers", Required = Required.Always)]
+        public Identifier[] Identifiers { get; set; }
+
+        [JsonProperty("keywords", Required = Required.Always)]
+        public string[] Keywords { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public Link[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("other_names", Required = Required.Always)]
+        public OtherName[] OtherNames { get; set; }
+
+        [JsonProperty("superseded_by", Required = Required.AllowNull)]
+        public object SupersededBy { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text[] Text { get; set; }
+    }
+
+    public partial record Identifier
+    {
+        [JsonProperty("identifier", Required = Required.Always)]
+        public string IdentifierIdentifier { get; set; }
+
+        [JsonProperty("scheme", Required = Required.Always)]
+        public Scheme Scheme { get; set; }
+    }
+
+    public partial record Link
+    {
+        [JsonProperty("note", Required = Required.Always)]
+        public string Note { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record OtherName
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("note", Required = Required.AllowNull)]
+        public string? Note { get; set; }
+    }
+
+    public partial record Text
+    {
+        [JsonProperty("media_type", Required = Required.Always)]
+        public string MediaType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum Scheme { Dep5, Spdx, Trove };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                SchemeConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class SchemeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scheme) || t == typeof(Scheme?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "DEP5":
+                    return Scheme.Dep5;
+                case "SPDX":
+                    return Scheme.Spdx;
+                case "Trove":
+                    return Scheme.Trove;
+            }
+            throw new Exception("Cannot unmarshal type Scheme");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Scheme)untypedValue;
+            switch (value)
+            {
+                case Scheme.Dep5:
+                    serializer.Serialize(writer, "DEP5");
+                    return;
+                case Scheme.Spdx:
+                    serializer.Serialize(writer, "SPDX");
+                    return;
+                case Scheme.Trove:
+                    serializer.Serialize(writer, "Trove");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Scheme");
+        }
+
+        public static readonly SchemeConverter Singleton = new SchemeConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/5dd0d.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/5dd0d.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/5dd0d.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/5eae5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/5eae5.json/default/QuickType.cs
new file mode 100644
index 0000000..3453a9c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/5eae5.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("Date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("ID", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("Sponsor", Required = Required.Always)]
+        public string Sponsor { get; set; }
+
+        [JsonProperty("Title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/5eb20.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/5eb20.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/5eb20.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/5f3a1.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/5f3a1.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/5f3a1.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/5f7fe.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/5f7fe.json/default/QuickType.cs
new file mode 100644
index 0000000..2b4a4bf
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/5f7fe.json/default/QuickType.cs
@@ -0,0 +1,603 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[][] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("view", Required = Required.Always)]
+        public View View { get; set; }
+    }
+
+    public partial record View
+    {
+        [JsonProperty("attribution", Required = Required.Always)]
+        public string Attribution { get; set; }
+
+        [JsonProperty("attributionLink", Required = Required.Always)]
+        public Uri AttributionLink { get; set; }
+
+        [JsonProperty("averageRating", Required = Required.Always)]
+        public long AverageRating { get; set; }
+
+        [JsonProperty("category", Required = Required.Always)]
+        public string Category { get; set; }
+
+        [JsonProperty("columns", Required = Required.Always)]
+        public Column[] Columns { get; set; }
+
+        [JsonProperty("createdAt", Required = Required.Always)]
+        public long CreatedAt { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("displayType", Required = Required.Always)]
+        public string DisplayType { get; set; }
+
+        [JsonProperty("downloadCount", Required = Required.Always)]
+        public long DownloadCount { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("grants", Required = Required.Always)]
+        public Grant[] Grants { get; set; }
+
+        [JsonProperty("hideFromCatalog", Required = Required.Always)]
+        public bool HideFromCatalog { get; set; }
+
+        [JsonProperty("hideFromDataJson", Required = Required.Always)]
+        public bool HideFromDataJson { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("indexUpdatedAt", Required = Required.Always)]
+        public long IndexUpdatedAt { get; set; }
+
+        [JsonProperty("locale", Required = Required.Always)]
+        public string Locale { get; set; }
+
+        [JsonProperty("metadata", Required = Required.Always)]
+        public Metadata Metadata { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("newBackend", Required = Required.Always)]
+        public bool NewBackend { get; set; }
+
+        [JsonProperty("numberOfComments", Required = Required.Always)]
+        public long NumberOfComments { get; set; }
+
+        [JsonProperty("oid", Required = Required.Always)]
+        public long Oid { get; set; }
+
+        [JsonProperty("owner", Required = Required.Always)]
+        public Owner Owner { get; set; }
+
+        [JsonProperty("provenance", Required = Required.Always)]
+        public string Provenance { get; set; }
+
+        [JsonProperty("publicationAppendEnabled", Required = Required.Always)]
+        public bool PublicationAppendEnabled { get; set; }
+
+        [JsonProperty("publicationDate", Required = Required.Always)]
+        public long PublicationDate { get; set; }
+
+        [JsonProperty("publicationGroup", Required = Required.Always)]
+        public long PublicationGroup { get; set; }
+
+        [JsonProperty("publicationStage", Required = Required.Always)]
+        public string PublicationStage { get; set; }
+
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public string[] Rights { get; set; }
+
+        [JsonProperty("rowsUpdatedAt", Required = Required.Always)]
+        public long RowsUpdatedAt { get; set; }
+
+        [JsonProperty("rowsUpdatedBy", Required = Required.Always)]
+        public string RowsUpdatedBy { get; set; }
+
+        [JsonProperty("tableAuthor", Required = Required.Always)]
+        public Owner TableAuthor { get; set; }
+
+        [JsonProperty("tableId", Required = Required.Always)]
+        public long TableId { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+
+        [JsonProperty("totalTimesRated", Required = Required.Always)]
+        public long TotalTimesRated { get; set; }
+
+        [JsonProperty("viewCount", Required = Required.Always)]
+        public long ViewCount { get; set; }
+
+        [JsonProperty("viewLastModified", Required = Required.Always)]
+        public long ViewLastModified { get; set; }
+
+        [JsonProperty("viewType", Required = Required.Always)]
+        public string ViewType { get; set; }
+    }
+
+    public partial record Column
+    {
+        [JsonProperty("cachedContents", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public CachedContents? CachedContents { get; set; }
+
+        [JsonProperty("dataTypeName", Required = Required.Always)]
+        public TypeName DataTypeName { get; set; }
+
+        [JsonProperty("fieldName", Required = Required.Always)]
+        public string FieldName { get; set; }
+
+        [JsonProperty("flags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Flags { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public Format Format { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("position", Required = Required.Always)]
+        public long Position { get; set; }
+
+        [JsonProperty("renderTypeName", Required = Required.Always)]
+        public TypeName RenderTypeName { get; set; }
+
+        [JsonProperty("tableColumnId", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? TableColumnId { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Width { get; set; }
+    }
+
+    public partial record CachedContents
+    {
+        [JsonProperty("largest", Required = Required.Always)]
+        public string Largest { get; set; }
+
+        [JsonProperty("non_null", Required = Required.Always)]
+        public long NonNull { get; set; }
+
+        [JsonProperty("null", Required = Required.Always)]
+        public long Null { get; set; }
+
+        [JsonProperty("smallest", Required = Required.Always)]
+        public string Smallest { get; set; }
+
+        [JsonProperty("top", Required = Required.Always)]
+        public Top[] Top { get; set; }
+    }
+
+    public partial record Top
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public string Item { get; set; }
+    }
+
+    public partial record Format
+    {
+        [JsonProperty("align", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Align { get; set; }
+
+        [JsonProperty("view", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? View { get; set; }
+    }
+
+    public partial record Grant
+    {
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("inherited", Required = Required.Always)]
+        public bool Inherited { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Metadata
+    {
+        [JsonProperty("attachments", Required = Required.Always)]
+        public Attachment[] Attachments { get; set; }
+
+        [JsonProperty("availableDisplayTypes", Required = Required.Always)]
+        public string[] AvailableDisplayTypes { get; set; }
+
+        [JsonProperty("custom_fields", Required = Required.Always)]
+        public CustomFields CustomFields { get; set; }
+
+        [JsonProperty("jsonQuery", Required = Required.Always)]
+        public JsonQuery JsonQuery { get; set; }
+
+        [JsonProperty("rdfSubject", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long RdfSubject { get; set; }
+
+        [JsonProperty("renderTypeConfig", Required = Required.Always)]
+        public RenderTypeConfig RenderTypeConfig { get; set; }
+    }
+
+    public partial record Attachment
+    {
+        [JsonProperty("assetId", Required = Required.Always)]
+        public string AssetId { get; set; }
+
+        [JsonProperty("blobId", Required = Required.Always)]
+        public string BlobId { get; set; }
+
+        [JsonProperty("filename", Required = Required.Always)]
+        public string Filename { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record CustomFields
+    {
+        [JsonProperty("Additional Resources", Required = Required.Always)]
+        public AdditionalResources AdditionalResources { get; set; }
+
+        [JsonProperty("Common Core", Required = Required.Always)]
+        public CommonCore CommonCore { get; set; }
+
+        [JsonProperty("Dataset Information", Required = Required.Always)]
+        public DatasetInformation DatasetInformation { get; set; }
+
+        [JsonProperty("Dataset Summary", Required = Required.Always)]
+        public DatasetSummary DatasetSummary { get; set; }
+
+        [JsonProperty("Notes", Required = Required.Always)]
+        public Notes Notes { get; set; }
+    }
+
+    public partial record AdditionalResources
+    {
+        [JsonProperty("See Also ", Required = Required.Always)]
+        public Uri AdditionalResourcesSeeAlso { get; set; }
+
+        [JsonProperty("See Also", Required = Required.Always)]
+        public Uri SeeAlso { get; set; }
+    }
+
+    public partial record CommonCore
+    {
+        [JsonProperty("Contact Email", Required = Required.Always)]
+        public string ContactEmail { get; set; }
+
+        [JsonProperty("Contact Name", Required = Required.Always)]
+        public string ContactName { get; set; }
+
+        [JsonProperty("Publisher", Required = Required.Always)]
+        public string Publisher { get; set; }
+    }
+
+    public partial record DatasetInformation
+    {
+        [JsonProperty("Agency", Required = Required.Always)]
+        public string Agency { get; set; }
+    }
+
+    public partial record DatasetSummary
+    {
+        [JsonProperty("Contact Information", Required = Required.Always)]
+        public string ContactInformation { get; set; }
+
+        [JsonProperty("Coverage", Required = Required.Always)]
+        public string Coverage { get; set; }
+
+        [JsonProperty("Data Frequency", Required = Required.Always)]
+        public string DataFrequency { get; set; }
+
+        [JsonProperty("Dataset Owner", Required = Required.Always)]
+        public string DatasetOwner { get; set; }
+
+        [JsonProperty("Granularity", Required = Required.Always)]
+        public string Granularity { get; set; }
+
+        [JsonProperty("Organization", Required = Required.Always)]
+        public string Organization { get; set; }
+
+        [JsonProperty("Posting Frequency", Required = Required.Always)]
+        public string PostingFrequency { get; set; }
+
+        [JsonProperty("Time Period", Required = Required.Always)]
+        public string TimePeriod { get; set; }
+
+        [JsonProperty("Units", Required = Required.Always)]
+        public string Units { get; set; }
+    }
+
+    public partial record Notes
+    {
+        [JsonProperty("Notes", Required = Required.Always)]
+        public string NotesNotes { get; set; }
+    }
+
+    public partial record JsonQuery
+    {
+        [JsonProperty("order", Required = Required.Always)]
+        public Order[] Order { get; set; }
+    }
+
+    public partial record Order
+    {
+        [JsonProperty("ascending", Required = Required.Always)]
+        public bool Ascending { get; set; }
+
+        [JsonProperty("columnFieldName", Required = Required.Always)]
+        public string ColumnFieldName { get; set; }
+    }
+
+    public partial record RenderTypeConfig
+    {
+        [JsonProperty("visible", Required = Required.Always)]
+        public Visible Visible { get; set; }
+    }
+
+    public partial record Visible
+    {
+        [JsonProperty("table", Required = Required.Always)]
+        public bool Table { get; set; }
+    }
+
+    public partial record Owner
+    {
+        [JsonProperty("displayName", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("profileImageUrlLarge", Required = Required.Always)]
+        public string ProfileImageUrlLarge { get; set; }
+
+        [JsonProperty("profileImageUrlMedium", Required = Required.Always)]
+        public string ProfileImageUrlMedium { get; set; }
+
+        [JsonProperty("profileImageUrlSmall", Required = Required.Always)]
+        public string ProfileImageUrlSmall { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public string[] Rights { get; set; }
+
+        [JsonProperty("roleName", Required = Required.Always)]
+        public string RoleName { get; set; }
+
+        [JsonProperty("screenName", Required = Required.Always)]
+        public string ScreenName { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("orderBys", Required = Required.Always)]
+        public OrderBy[] OrderBys { get; set; }
+    }
+
+    public partial record OrderBy
+    {
+        [JsonProperty("ascending", Required = Required.Always)]
+        public bool Ascending { get; set; }
+
+        [JsonProperty("expression", Required = Required.Always)]
+        public Expression Expression { get; set; }
+    }
+
+    public partial record Expression
+    {
+        [JsonProperty("columnId", Required = Required.Always)]
+        public long ColumnId { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public enum TypeName { MetaData, CalendarDate, Text };
+
+    public partial struct Datum
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Datum(long Integer) => new Datum { Integer = Integer };
+        public static implicit operator Datum(string String) => new Datum { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DatumConverter.Singleton,
+                TypeNameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DatumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Datum) || t == typeof(Datum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Datum { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Datum { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Datum { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Datum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Datum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Datum");
+        }
+
+        public static readonly DatumConverter Singleton = new DatumConverter();
+    }
+
+    internal class TypeNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeName) || t == typeof(TypeName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "meta_data":
+                    return TypeName.MetaData;
+                case "calendar_date":
+                    return TypeName.CalendarDate;
+                case "text":
+                    return TypeName.Text;
+            }
+            throw new Exception("Cannot unmarshal type TypeName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeName)untypedValue;
+            switch (value)
+            {
+                case TypeName.MetaData:
+                    serializer.Serialize(writer, "meta_data");
+                    return;
+                case TypeName.CalendarDate:
+                    serializer.Serialize(writer, "calendar_date");
+                    return;
+                case TypeName.Text:
+                    serializer.Serialize(writer, "text");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeName");
+        }
+
+        public static readonly TypeNameConverter Singleton = new TypeNameConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/617e8.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/617e8.json/default/QuickType.cs
new file mode 100644
index 0000000..558bc3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/617e8.json/default/QuickType.cs
@@ -0,0 +1,600 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[][] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("view", Required = Required.Always)]
+        public View View { get; set; }
+    }
+
+    public partial record View
+    {
+        [JsonProperty("attribution", Required = Required.Always)]
+        public string Attribution { get; set; }
+
+        [JsonProperty("attributionLink", Required = Required.Always)]
+        public Uri AttributionLink { get; set; }
+
+        [JsonProperty("averageRating", Required = Required.Always)]
+        public long AverageRating { get; set; }
+
+        [JsonProperty("category", Required = Required.Always)]
+        public string Category { get; set; }
+
+        [JsonProperty("columns", Required = Required.Always)]
+        public Column[] Columns { get; set; }
+
+        [JsonProperty("createdAt", Required = Required.Always)]
+        public long CreatedAt { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("displayType", Required = Required.Always)]
+        public string DisplayType { get; set; }
+
+        [JsonProperty("downloadCount", Required = Required.Always)]
+        public long DownloadCount { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("grants", Required = Required.Always)]
+        public Grant[] Grants { get; set; }
+
+        [JsonProperty("hideFromCatalog", Required = Required.Always)]
+        public bool HideFromCatalog { get; set; }
+
+        [JsonProperty("hideFromDataJson", Required = Required.Always)]
+        public bool HideFromDataJson { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("indexUpdatedAt", Required = Required.Always)]
+        public long IndexUpdatedAt { get; set; }
+
+        [JsonProperty("locale", Required = Required.Always)]
+        public string Locale { get; set; }
+
+        [JsonProperty("metadata", Required = Required.Always)]
+        public Metadata Metadata { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("newBackend", Required = Required.Always)]
+        public bool NewBackend { get; set; }
+
+        [JsonProperty("numberOfComments", Required = Required.Always)]
+        public long NumberOfComments { get; set; }
+
+        [JsonProperty("oid", Required = Required.Always)]
+        public long Oid { get; set; }
+
+        [JsonProperty("owner", Required = Required.Always)]
+        public Owner Owner { get; set; }
+
+        [JsonProperty("provenance", Required = Required.Always)]
+        public string Provenance { get; set; }
+
+        [JsonProperty("publicationAppendEnabled", Required = Required.Always)]
+        public bool PublicationAppendEnabled { get; set; }
+
+        [JsonProperty("publicationDate", Required = Required.Always)]
+        public long PublicationDate { get; set; }
+
+        [JsonProperty("publicationGroup", Required = Required.Always)]
+        public long PublicationGroup { get; set; }
+
+        [JsonProperty("publicationStage", Required = Required.Always)]
+        public string PublicationStage { get; set; }
+
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public string[] Rights { get; set; }
+
+        [JsonProperty("rowsUpdatedAt", Required = Required.Always)]
+        public long RowsUpdatedAt { get; set; }
+
+        [JsonProperty("rowsUpdatedBy", Required = Required.Always)]
+        public string RowsUpdatedBy { get; set; }
+
+        [JsonProperty("tableAuthor", Required = Required.Always)]
+        public Owner TableAuthor { get; set; }
+
+        [JsonProperty("tableId", Required = Required.Always)]
+        public long TableId { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+
+        [JsonProperty("totalTimesRated", Required = Required.Always)]
+        public long TotalTimesRated { get; set; }
+
+        [JsonProperty("viewCount", Required = Required.Always)]
+        public long ViewCount { get; set; }
+
+        [JsonProperty("viewLastModified", Required = Required.Always)]
+        public long ViewLastModified { get; set; }
+
+        [JsonProperty("viewType", Required = Required.Always)]
+        public string ViewType { get; set; }
+    }
+
+    public partial record Column
+    {
+        [JsonProperty("cachedContents", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public CachedContents? CachedContents { get; set; }
+
+        [JsonProperty("dataTypeName", Required = Required.Always)]
+        public TypeName DataTypeName { get; set; }
+
+        [JsonProperty("description", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Description { get; set; }
+
+        [JsonProperty("fieldName", Required = Required.Always)]
+        public string FieldName { get; set; }
+
+        [JsonProperty("flags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Flags { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public Format Format { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("position", Required = Required.Always)]
+        public long Position { get; set; }
+
+        [JsonProperty("renderTypeName", Required = Required.Always)]
+        public TypeName RenderTypeName { get; set; }
+
+        [JsonProperty("tableColumnId", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? TableColumnId { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Width { get; set; }
+    }
+
+    public partial record CachedContents
+    {
+        [JsonProperty("largest", Required = Required.Always)]
+        public string Largest { get; set; }
+
+        [JsonProperty("non_null", Required = Required.Always)]
+        public long NonNull { get; set; }
+
+        [JsonProperty("null", Required = Required.Always)]
+        public long Null { get; set; }
+
+        [JsonProperty("smallest", Required = Required.Always)]
+        public string Smallest { get; set; }
+
+        [JsonProperty("top", Required = Required.Always)]
+        public Top[] Top { get; set; }
+    }
+
+    public partial record Top
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public string Item { get; set; }
+    }
+
+    public partial record Format
+    {
+        [JsonProperty("align", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Align { get; set; }
+
+        [JsonProperty("view", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? View { get; set; }
+    }
+
+    public partial record Grant
+    {
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("inherited", Required = Required.Always)]
+        public bool Inherited { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Metadata
+    {
+        [JsonProperty("attachments", Required = Required.Always)]
+        public Attachment[] Attachments { get; set; }
+
+        [JsonProperty("availableDisplayTypes", Required = Required.Always)]
+        public string[] AvailableDisplayTypes { get; set; }
+
+        [JsonProperty("custom_fields", Required = Required.Always)]
+        public CustomFields CustomFields { get; set; }
+
+        [JsonProperty("jsonQuery", Required = Required.Always)]
+        public JsonQuery JsonQuery { get; set; }
+
+        [JsonProperty("rdfSubject", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long RdfSubject { get; set; }
+
+        [JsonProperty("renderTypeConfig", Required = Required.Always)]
+        public RenderTypeConfig RenderTypeConfig { get; set; }
+    }
+
+    public partial record Attachment
+    {
+        [JsonProperty("assetId", Required = Required.Always)]
+        public string AssetId { get; set; }
+
+        [JsonProperty("blobId", Required = Required.Always)]
+        public string BlobId { get; set; }
+
+        [JsonProperty("filename", Required = Required.Always)]
+        public string Filename { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record CustomFields
+    {
+        [JsonProperty("Additional Resources", Required = Required.Always)]
+        public AdditionalResources AdditionalResources { get; set; }
+
+        [JsonProperty("Common Core", Required = Required.Always)]
+        public CommonCore CommonCore { get; set; }
+
+        [JsonProperty("Dataset Information", Required = Required.Always)]
+        public DatasetInformation DatasetInformation { get; set; }
+
+        [JsonProperty("Dataset Summary", Required = Required.Always)]
+        public DatasetSummary DatasetSummary { get; set; }
+
+        [JsonProperty("Notes", Required = Required.Always)]
+        public Notes Notes { get; set; }
+    }
+
+    public partial record AdditionalResources
+    {
+        [JsonProperty("See Also", Required = Required.Always)]
+        public Uri SeeAlso { get; set; }
+    }
+
+    public partial record CommonCore
+    {
+        [JsonProperty("Contact Email", Required = Required.Always)]
+        public string ContactEmail { get; set; }
+
+        [JsonProperty("Contact Name", Required = Required.Always)]
+        public string ContactName { get; set; }
+
+        [JsonProperty("Publisher", Required = Required.Always)]
+        public string Publisher { get; set; }
+    }
+
+    public partial record DatasetInformation
+    {
+        [JsonProperty("Agency", Required = Required.Always)]
+        public string Agency { get; set; }
+    }
+
+    public partial record DatasetSummary
+    {
+        [JsonProperty("Contact Information", Required = Required.Always)]
+        public string ContactInformation { get; set; }
+
+        [JsonProperty("Coverage", Required = Required.Always)]
+        public string Coverage { get; set; }
+
+        [JsonProperty("Data Frequency", Required = Required.Always)]
+        public string DataFrequency { get; set; }
+
+        [JsonProperty("Dataset Owner", Required = Required.Always)]
+        public string DatasetOwner { get; set; }
+
+        [JsonProperty("Granularity", Required = Required.Always)]
+        public string Granularity { get; set; }
+
+        [JsonProperty("Organization", Required = Required.Always)]
+        public string Organization { get; set; }
+
+        [JsonProperty("Posting Frequency", Required = Required.Always)]
+        public string PostingFrequency { get; set; }
+
+        [JsonProperty("Time Period", Required = Required.Always)]
+        public string TimePeriod { get; set; }
+    }
+
+    public partial record Notes
+    {
+        [JsonProperty("Notes", Required = Required.Always)]
+        public string NotesNotes { get; set; }
+    }
+
+    public partial record JsonQuery
+    {
+        [JsonProperty("order", Required = Required.Always)]
+        public Order[] Order { get; set; }
+    }
+
+    public partial record Order
+    {
+        [JsonProperty("ascending", Required = Required.Always)]
+        public bool Ascending { get; set; }
+
+        [JsonProperty("columnFieldName", Required = Required.Always)]
+        public string ColumnFieldName { get; set; }
+    }
+
+    public partial record RenderTypeConfig
+    {
+        [JsonProperty("visible", Required = Required.Always)]
+        public Visible Visible { get; set; }
+    }
+
+    public partial record Visible
+    {
+        [JsonProperty("table", Required = Required.Always)]
+        public bool Table { get; set; }
+    }
+
+    public partial record Owner
+    {
+        [JsonProperty("displayName", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("profileImageUrlLarge", Required = Required.Always)]
+        public string ProfileImageUrlLarge { get; set; }
+
+        [JsonProperty("profileImageUrlMedium", Required = Required.Always)]
+        public string ProfileImageUrlMedium { get; set; }
+
+        [JsonProperty("profileImageUrlSmall", Required = Required.Always)]
+        public string ProfileImageUrlSmall { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public string[] Rights { get; set; }
+
+        [JsonProperty("roleName", Required = Required.Always)]
+        public string RoleName { get; set; }
+
+        [JsonProperty("screenName", Required = Required.Always)]
+        public string ScreenName { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("orderBys", Required = Required.Always)]
+        public OrderBy[] OrderBys { get; set; }
+    }
+
+    public partial record OrderBy
+    {
+        [JsonProperty("ascending", Required = Required.Always)]
+        public bool Ascending { get; set; }
+
+        [JsonProperty("expression", Required = Required.Always)]
+        public Expression Expression { get; set; }
+    }
+
+    public partial record Expression
+    {
+        [JsonProperty("columnId", Required = Required.Always)]
+        public long ColumnId { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public enum TypeName { MetaData, CalendarDate, Text };
+
+    public partial struct Datum
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Datum(long Integer) => new Datum { Integer = Integer };
+        public static implicit operator Datum(string String) => new Datum { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DatumConverter.Singleton,
+                TypeNameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DatumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Datum) || t == typeof(Datum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Datum { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Datum { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Datum { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Datum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Datum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Datum");
+        }
+
+        public static readonly DatumConverter Singleton = new DatumConverter();
+    }
+
+    internal class TypeNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeName) || t == typeof(TypeName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "meta_data":
+                    return TypeName.MetaData;
+                case "calendar_date":
+                    return TypeName.CalendarDate;
+                case "text":
+                    return TypeName.Text;
+            }
+            throw new Exception("Cannot unmarshal type TypeName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeName)untypedValue;
+            switch (value)
+            {
+                case TypeName.MetaData:
+                    serializer.Serialize(writer, "meta_data");
+                    return;
+                case TypeName.CalendarDate:
+                    serializer.Serialize(writer, "calendar_date");
+                    return;
+                case TypeName.Text:
+                    serializer.Serialize(writer, "text");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeName");
+        }
+
+        public static readonly TypeNameConverter Singleton = new TypeNameConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/61b66.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/61b66.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/61b66.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/6260a.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/6260a.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/6260a.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/65dec.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/65dec.json/default/QuickType.cs
new file mode 100644
index 0000000..f0d36d0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/65dec.json/default/QuickType.cs
@@ -0,0 +1,552 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("booster", Required = Required.Always)]
+        public string[] Booster { get; set; }
+
+        [JsonProperty("border", Required = Required.Always)]
+        public string Border { get; set; }
+
+        [JsonProperty("cards", Required = Required.Always)]
+        public Card[] Cards { get; set; }
+
+        [JsonProperty("code", Required = Required.Always)]
+        public string Code { get; set; }
+
+        [JsonProperty("gathererCode", Required = Required.Always)]
+        public string GathererCode { get; set; }
+
+        [JsonProperty("magicCardsInfoCode", Required = Required.Always)]
+        public string MagicCardsInfoCode { get; set; }
+
+        [JsonProperty("mkm_id", Required = Required.Always)]
+        public long MkmId { get; set; }
+
+        [JsonProperty("mkm_name", Required = Required.Always)]
+        public string MkmName { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("releaseDate", Required = Required.Always)]
+        public DateTimeOffset ReleaseDate { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Card
+    {
+        [JsonProperty("artist", Required = Required.Always)]
+        public string Artist { get; set; }
+
+        [JsonProperty("cmc", Required = Required.Always)]
+        public long Cmc { get; set; }
+
+        [JsonProperty("colorIdentity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ColorIdentity[]? ColorIdentity { get; set; }
+
+        [JsonProperty("colors", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Watermark[]? Colors { get; set; }
+
+        [JsonProperty("flavor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Flavor { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("imageName", Required = Required.Always)]
+        public string ImageName { get; set; }
+
+        [JsonProperty("layout", Required = Required.Always)]
+        public Layout Layout { get; set; }
+
+        [JsonProperty("legalities", Required = Required.Always)]
+        public LegalityElement[] Legalities { get; set; }
+
+        [JsonProperty("manaCost", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? ManaCost { get; set; }
+
+        [JsonProperty("mciNumber", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? MciNumber { get; set; }
+
+        [JsonProperty("multiverseid", Required = Required.Always)]
+        public long Multiverseid { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("originalText", Required = Required.Always)]
+        public string OriginalText { get; set; }
+
+        [JsonProperty("originalType", Required = Required.Always)]
+        public string OriginalType { get; set; }
+
+        [JsonProperty("power", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Power { get; set; }
+
+        [JsonProperty("printings", Required = Required.Always)]
+        public string[] Printings { get; set; }
+
+        [JsonProperty("rarity", Required = Required.Always)]
+        public Rarity Rarity { get; set; }
+
+        [JsonProperty("reserved", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Reserved { get; set; }
+
+        [JsonProperty("rulings", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Ruling[]? Rulings { get; set; }
+
+        [JsonProperty("subtypes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Subtypes { get; set; }
+
+        [JsonProperty("supertypes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Supertypes { get; set; }
+
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+
+        [JsonProperty("toughness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Toughness { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("types", Required = Required.Always)]
+        public TypeElement[] Types { get; set; }
+
+        [JsonProperty("variations", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long[]? Variations { get; set; }
+
+        [JsonProperty("watermark", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Watermark? Watermark { get; set; }
+    }
+
+    public partial record LegalityElement
+    {
+        [JsonProperty("format", Required = Required.Always)]
+        public string Format { get; set; }
+
+        [JsonProperty("legality", Required = Required.Always)]
+        public LegalityEnum Legality { get; set; }
+    }
+
+    public partial record Ruling
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public enum ColorIdentity { W, R, B, G, U };
+
+    public enum Watermark { White, Red, Black, Green, Blue };
+
+    public enum Layout { Normal };
+
+    public enum LegalityEnum { Legal, Banned, Restricted };
+
+    public enum Rarity { Uncommon, Rare, Common, BasicLand };
+
+    public enum TypeElement { Creature, Artifact, Instant, Land, Enchantment, Sorcery };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ColorIdentityConverter.Singleton,
+                WatermarkConverter.Singleton,
+                LayoutConverter.Singleton,
+                LegalityEnumConverter.Singleton,
+                RarityConverter.Singleton,
+                TypeElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ColorIdentityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ColorIdentity) || t == typeof(ColorIdentity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "W":
+                    return ColorIdentity.W;
+                case "R":
+                    return ColorIdentity.R;
+                case "B":
+                    return ColorIdentity.B;
+                case "G":
+                    return ColorIdentity.G;
+                case "U":
+                    return ColorIdentity.U;
+            }
+            throw new Exception("Cannot unmarshal type ColorIdentity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ColorIdentity)untypedValue;
+            switch (value)
+            {
+                case ColorIdentity.W:
+                    serializer.Serialize(writer, "W");
+                    return;
+                case ColorIdentity.R:
+                    serializer.Serialize(writer, "R");
+                    return;
+                case ColorIdentity.B:
+                    serializer.Serialize(writer, "B");
+                    return;
+                case ColorIdentity.G:
+                    serializer.Serialize(writer, "G");
+                    return;
+                case ColorIdentity.U:
+                    serializer.Serialize(writer, "U");
+                    return;
+            }
+            throw new Exception("Cannot marshal type ColorIdentity");
+        }
+
+        public static readonly ColorIdentityConverter Singleton = new ColorIdentityConverter();
+    }
+
+    internal class WatermarkConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Watermark) || t == typeof(Watermark?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "White":
+                    return Watermark.White;
+                case "Red":
+                    return Watermark.Red;
+                case "Black":
+                    return Watermark.Black;
+                case "Green":
+                    return Watermark.Green;
+                case "Blue":
+                    return Watermark.Blue;
+            }
+            throw new Exception("Cannot unmarshal type Watermark");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Watermark)untypedValue;
+            switch (value)
+            {
+                case Watermark.White:
+                    serializer.Serialize(writer, "White");
+                    return;
+                case Watermark.Red:
+                    serializer.Serialize(writer, "Red");
+                    return;
+                case Watermark.Black:
+                    serializer.Serialize(writer, "Black");
+                    return;
+                case Watermark.Green:
+                    serializer.Serialize(writer, "Green");
+                    return;
+                case Watermark.Blue:
+                    serializer.Serialize(writer, "Blue");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Watermark");
+        }
+
+        public static readonly WatermarkConverter Singleton = new WatermarkConverter();
+    }
+
+    internal class LayoutConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Layout) || t == typeof(Layout?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "normal")
+            {
+                return Layout.Normal;
+            }
+            throw new Exception("Cannot unmarshal type Layout");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Layout)untypedValue;
+            if (value == Layout.Normal)
+            {
+                serializer.Serialize(writer, "normal");
+                return;
+            }
+            throw new Exception("Cannot marshal type Layout");
+        }
+
+        public static readonly LayoutConverter Singleton = new LayoutConverter();
+    }
+
+    internal class LegalityEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LegalityEnum) || t == typeof(LegalityEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Legal":
+                    return LegalityEnum.Legal;
+                case "Banned":
+                    return LegalityEnum.Banned;
+                case "Restricted":
+                    return LegalityEnum.Restricted;
+            }
+            throw new Exception("Cannot unmarshal type LegalityEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (LegalityEnum)untypedValue;
+            switch (value)
+            {
+                case LegalityEnum.Legal:
+                    serializer.Serialize(writer, "Legal");
+                    return;
+                case LegalityEnum.Banned:
+                    serializer.Serialize(writer, "Banned");
+                    return;
+                case LegalityEnum.Restricted:
+                    serializer.Serialize(writer, "Restricted");
+                    return;
+            }
+            throw new Exception("Cannot marshal type LegalityEnum");
+        }
+
+        public static readonly LegalityEnumConverter Singleton = new LegalityEnumConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RarityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rarity) || t == typeof(Rarity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Uncommon":
+                    return Rarity.Uncommon;
+                case "Rare":
+                    return Rarity.Rare;
+                case "Common":
+                    return Rarity.Common;
+                case "Basic Land":
+                    return Rarity.BasicLand;
+            }
+            throw new Exception("Cannot unmarshal type Rarity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Rarity)untypedValue;
+            switch (value)
+            {
+                case Rarity.Uncommon:
+                    serializer.Serialize(writer, "Uncommon");
+                    return;
+                case Rarity.Rare:
+                    serializer.Serialize(writer, "Rare");
+                    return;
+                case Rarity.Common:
+                    serializer.Serialize(writer, "Common");
+                    return;
+                case Rarity.BasicLand:
+                    serializer.Serialize(writer, "Basic Land");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Rarity");
+        }
+
+        public static readonly RarityConverter Singleton = new RarityConverter();
+    }
+
+    internal class TypeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeElement) || t == typeof(TypeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Creature":
+                    return TypeElement.Creature;
+                case "Artifact":
+                    return TypeElement.Artifact;
+                case "Instant":
+                    return TypeElement.Instant;
+                case "Land":
+                    return TypeElement.Land;
+                case "Enchantment":
+                    return TypeElement.Enchantment;
+                case "Sorcery":
+                    return TypeElement.Sorcery;
+            }
+            throw new Exception("Cannot unmarshal type TypeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeElement)untypedValue;
+            switch (value)
+            {
+                case TypeElement.Creature:
+                    serializer.Serialize(writer, "Creature");
+                    return;
+                case TypeElement.Artifact:
+                    serializer.Serialize(writer, "Artifact");
+                    return;
+                case TypeElement.Instant:
+                    serializer.Serialize(writer, "Instant");
+                    return;
+                case TypeElement.Land:
+                    serializer.Serialize(writer, "Land");
+                    return;
+                case TypeElement.Enchantment:
+                    serializer.Serialize(writer, "Enchantment");
+                    return;
+                case TypeElement.Sorcery:
+                    serializer.Serialize(writer, "Sorcery");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeElement");
+        }
+
+        public static readonly TypeElementConverter Singleton = new TypeElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/66121.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/66121.json/default/QuickType.cs
new file mode 100644
index 0000000..a3d0117
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/66121.json/default/QuickType.cs
@@ -0,0 +1,321 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identifiers", Required = Required.Always)]
+        public Identifier[] Identifiers { get; set; }
+
+        [JsonProperty("keywords", Required = Required.Always)]
+        public Keyword[] Keywords { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public Link[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("other_names", Required = Required.Always)]
+        public object[] OtherNames { get; set; }
+
+        [JsonProperty("superseded_by", Required = Required.AllowNull)]
+        public string? SupersededBy { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text[] Text { get; set; }
+    }
+
+    public partial record Identifier
+    {
+        [JsonProperty("identifier", Required = Required.Always)]
+        public string IdentifierIdentifier { get; set; }
+
+        [JsonProperty("scheme", Required = Required.Always)]
+        public Scheme Scheme { get; set; }
+    }
+
+    public partial record Link
+    {
+        [JsonProperty("note", Required = Required.Always)]
+        public Note Note { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Text
+    {
+        [JsonProperty("media_type", Required = Required.Always)]
+        public MediaType MediaType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public Title Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum Scheme { Spdx, Trove, Dep5 };
+
+    public enum Keyword { OsiApproved, Discouraged, Redundant };
+
+    public enum Note { OsiPage };
+
+    public enum MediaType { TextHtml };
+
+    public enum Title { Html };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                SchemeConverter.Singleton,
+                KeywordConverter.Singleton,
+                NoteConverter.Singleton,
+                MediaTypeConverter.Singleton,
+                TitleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class SchemeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scheme) || t == typeof(Scheme?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "SPDX":
+                    return Scheme.Spdx;
+                case "Trove":
+                    return Scheme.Trove;
+                case "DEP5":
+                    return Scheme.Dep5;
+            }
+            throw new Exception("Cannot unmarshal type Scheme");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Scheme)untypedValue;
+            switch (value)
+            {
+                case Scheme.Spdx:
+                    serializer.Serialize(writer, "SPDX");
+                    return;
+                case Scheme.Trove:
+                    serializer.Serialize(writer, "Trove");
+                    return;
+                case Scheme.Dep5:
+                    serializer.Serialize(writer, "DEP5");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Scheme");
+        }
+
+        public static readonly SchemeConverter Singleton = new SchemeConverter();
+    }
+
+    internal class KeywordConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Keyword) || t == typeof(Keyword?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "osi-approved":
+                    return Keyword.OsiApproved;
+                case "discouraged":
+                    return Keyword.Discouraged;
+                case "redundant":
+                    return Keyword.Redundant;
+            }
+            throw new Exception("Cannot unmarshal type Keyword");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Keyword)untypedValue;
+            switch (value)
+            {
+                case Keyword.OsiApproved:
+                    serializer.Serialize(writer, "osi-approved");
+                    return;
+                case Keyword.Discouraged:
+                    serializer.Serialize(writer, "discouraged");
+                    return;
+                case Keyword.Redundant:
+                    serializer.Serialize(writer, "redundant");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Keyword");
+        }
+
+        public static readonly KeywordConverter Singleton = new KeywordConverter();
+    }
+
+    internal class NoteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Note) || t == typeof(Note?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "OSI Page")
+            {
+                return Note.OsiPage;
+            }
+            throw new Exception("Cannot unmarshal type Note");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Note)untypedValue;
+            if (value == Note.OsiPage)
+            {
+                serializer.Serialize(writer, "OSI Page");
+                return;
+            }
+            throw new Exception("Cannot marshal type Note");
+        }
+
+        public static readonly NoteConverter Singleton = new NoteConverter();
+    }
+
+    internal class MediaTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MediaType) || t == typeof(MediaType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "text/html")
+            {
+                return MediaType.TextHtml;
+            }
+            throw new Exception("Cannot unmarshal type MediaType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (MediaType)untypedValue;
+            if (value == MediaType.TextHtml)
+            {
+                serializer.Serialize(writer, "text/html");
+                return;
+            }
+            throw new Exception("Cannot marshal type MediaType");
+        }
+
+        public static readonly MediaTypeConverter Singleton = new MediaTypeConverter();
+    }
+
+    internal class TitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Title) || t == typeof(Title?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "HTML")
+            {
+                return Title.Html;
+            }
+            throw new Exception("Cannot unmarshal type Title");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Title)untypedValue;
+            if (value == Title.Html)
+            {
+                serializer.Serialize(writer, "HTML");
+                return;
+            }
+            throw new Exception("Cannot marshal type Title");
+        }
+
+        public static readonly TitleConverter Singleton = new TitleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/6617c.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/6617c.json/default/QuickType.cs
new file mode 100644
index 0000000..eb54964
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/6617c.json/default/QuickType.cs
@@ -0,0 +1,76 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("iss_position", Required = Required.Always)]
+        public IssPosition IssPosition { get; set; }
+
+        [JsonProperty("message", Required = Required.Always)]
+        public string Message { get; set; }
+
+        [JsonProperty("timestamp", Required = Required.Always)]
+        public long Timestamp { get; set; }
+    }
+
+    public partial record IssPosition
+    {
+        [JsonProperty("latitude", Required = Required.Always)]
+        public string Latitude { get; set; }
+
+        [JsonProperty("longitude", Required = Required.Always)]
+        public string Longitude { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/67c03.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/67c03.json/default/QuickType.cs
new file mode 100644
index 0000000..2588707
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/67c03.json/default/QuickType.cs
@@ -0,0 +1,76 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("message", Required = Required.Always)]
+        public string Message { get; set; }
+
+        [JsonProperty("number", Required = Required.Always)]
+        public long Number { get; set; }
+
+        [JsonProperty("people", Required = Required.Always)]
+        public Person[] People { get; set; }
+    }
+
+    public partial record Person
+    {
+        [JsonProperty("craft", Required = Required.Always)]
+        public string Craft { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/68c30.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/68c30.json/default/QuickType.cs
new file mode 100644
index 0000000..c6eebdb
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/68c30.json/default/QuickType.cs
@@ -0,0 +1,136 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("txs", Required = Required.Always)]
+        public Tx[] Txs { get; set; }
+    }
+
+    public partial record Tx
+    {
+        [JsonProperty("double_spend", Required = Required.Always)]
+        public bool DoubleSpend { get; set; }
+
+        [JsonProperty("hash", Required = Required.Always)]
+        public string Hash { get; set; }
+
+        [JsonProperty("inputs", Required = Required.Always)]
+        public Input[] Inputs { get; set; }
+
+        [JsonProperty("lock_time", Required = Required.Always)]
+        public long LockTime { get; set; }
+
+        [JsonProperty("out", Required = Required.Always)]
+        public Out[] Out { get; set; }
+
+        [JsonProperty("relayed_by", Required = Required.Always)]
+        public string RelayedBy { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        public long Size { get; set; }
+
+        [JsonProperty("time", Required = Required.Always)]
+        public long Time { get; set; }
+
+        [JsonProperty("tx_index", Required = Required.Always)]
+        public long TxIndex { get; set; }
+
+        [JsonProperty("ver", Required = Required.Always)]
+        public long Ver { get; set; }
+
+        [JsonProperty("vin_sz", Required = Required.Always)]
+        public long VinSz { get; set; }
+
+        [JsonProperty("vout_sz", Required = Required.Always)]
+        public long VoutSz { get; set; }
+    }
+
+    public partial record Input
+    {
+        [JsonProperty("prev_out", Required = Required.Always)]
+        public Out PrevOut { get; set; }
+
+        [JsonProperty("script", Required = Required.Always)]
+        public string Script { get; set; }
+
+        [JsonProperty("sequence", Required = Required.Always)]
+        public long Sequence { get; set; }
+    }
+
+    public partial record Out
+    {
+        [JsonProperty("addr", Required = Required.Always)]
+        public string Addr { get; set; }
+
+        [JsonProperty("n", Required = Required.Always)]
+        public long N { get; set; }
+
+        [JsonProperty("script", Required = Required.Always)]
+        public string Script { get; set; }
+
+        [JsonProperty("spent", Required = Required.Always)]
+        public bool Spent { get; set; }
+
+        [JsonProperty("tx_index", Required = Required.Always)]
+        public long TxIndex { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public long Type { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public long Value { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/6c155.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/6c155.json/default/QuickType.cs
new file mode 100644
index 0000000..fdfd06d
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/6c155.json/default/QuickType.cs
@@ -0,0 +1,218 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("metadata", Required = Required.Always)]
+        public Metadata Metadata { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Metadata
+    {
+        [JsonProperty("executionTime", Required = Required.Always)]
+        public double ExecutionTime { get; set; }
+
+        [JsonProperty("responseInfo", Required = Required.Always)]
+        public ResponseInfo ResponseInfo { get; set; }
+
+        [JsonProperty("resultset", Required = Required.Always)]
+        public Resultset Resultset { get; set; }
+    }
+
+    public partial record ResponseInfo
+    {
+        [JsonProperty("developerMessage", Required = Required.Always)]
+        public string DeveloperMessage { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Resultset
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("page", Required = Required.Always)]
+        public long Page { get; set; }
+
+        [JsonProperty("pagesize", Required = Required.Always)]
+        public long Pagesize { get; set; }
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("attachment", Required = Required.Always)]
+        public object[] Attachment { get; set; }
+
+        [JsonProperty("body", Required = Required.Always)]
+        public string Body { get; set; }
+
+        [JsonProperty("changed", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Changed { get; set; }
+
+        [JsonProperty("component", Required = Required.Always)]
+        public Component[] Component { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Created { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Date { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public object[] Image { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("teaser", Required = Required.AllowNull)]
+        public object Teaser { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("topic", Required = Required.Always)]
+        public object[] Topic { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("uuid", Required = Required.Always)]
+        public Guid Uuid { get; set; }
+
+        [JsonProperty("vuuid", Required = Required.Always)]
+        public Guid Vuuid { get; set; }
+    }
+
+    public partial record Component
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("uuid", Required = Required.Always)]
+        public Guid Uuid { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("administrative_area", Required = Required.Always)]
+        public string AdministrativeArea { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("fax_number", Required = Required.Always)]
+        public string FaxNumber { get; set; }
+
+        [JsonProperty("locality", Required = Required.Always)]
+        public string Locality { get; set; }
+
+        [JsonProperty("mobile_number", Required = Required.Always)]
+        public string MobileNumber { get; set; }
+
+        [JsonProperty("phone_number", Required = Required.Always)]
+        public string PhoneNumber { get; set; }
+
+        [JsonProperty("phone_number_extension", Required = Required.Always)]
+        public string PhoneNumberExtension { get; set; }
+
+        [JsonProperty("postal_code", Required = Required.Always)]
+        public string PostalCode { get; set; }
+
+        [JsonProperty("sub_premise", Required = Required.AllowNull)]
+        public object SubPremise { get; set; }
+
+        [JsonProperty("thoroughfare", Required = Required.Always)]
+        public string Thoroughfare { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/6de06.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/6de06.json/default/QuickType.cs
new file mode 100644
index 0000000..d4cd1ae
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/6de06.json/default/QuickType.cs
@@ -0,0 +1,529 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public TopLevelData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public string Kind { get; set; }
+    }
+
+    public partial record TopLevelData
+    {
+        [JsonProperty("after", Required = Required.Always)]
+        public string After { get; set; }
+
+        [JsonProperty("before", Required = Required.AllowNull)]
+        public object Before { get; set; }
+
+        [JsonProperty("children", Required = Required.Always)]
+        public Child[] Children { get; set; }
+
+        [JsonProperty("modhash", Required = Required.Always)]
+        public string Modhash { get; set; }
+    }
+
+    public partial record Child
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public ChildData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    public partial record ChildData
+    {
+        [JsonProperty("approved_at_utc", Required = Required.AllowNull)]
+        public object ApprovedAtUtc { get; set; }
+
+        [JsonProperty("approved_by", Required = Required.AllowNull)]
+        public object ApprovedBy { get; set; }
+
+        [JsonProperty("archived", Required = Required.Always)]
+        public bool Archived { get; set; }
+
+        [JsonProperty("author", Required = Required.Always)]
+        public string Author { get; set; }
+
+        [JsonProperty("author_flair_css_class", Required = Required.AllowNull)]
+        public string? AuthorFlairCssClass { get; set; }
+
+        [JsonProperty("author_flair_text", Required = Required.AllowNull)]
+        public string? AuthorFlairText { get; set; }
+
+        [JsonProperty("banned_at_utc", Required = Required.AllowNull)]
+        public object BannedAtUtc { get; set; }
+
+        [JsonProperty("banned_by", Required = Required.AllowNull)]
+        public object BannedBy { get; set; }
+
+        [JsonProperty("brand_safe", Required = Required.Always)]
+        public bool BrandSafe { get; set; }
+
+        [JsonProperty("can_gild", Required = Required.Always)]
+        public bool CanGild { get; set; }
+
+        [JsonProperty("can_mod_post", Required = Required.Always)]
+        public bool CanModPost { get; set; }
+
+        [JsonProperty("clicked", Required = Required.Always)]
+        public bool Clicked { get; set; }
+
+        [JsonProperty("contest_mode", Required = Required.Always)]
+        public bool ContestMode { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public double Created { get; set; }
+
+        [JsonProperty("created_utc", Required = Required.Always)]
+        public double CreatedUtc { get; set; }
+
+        [JsonProperty("distinguished", Required = Required.AllowNull)]
+        public object Distinguished { get; set; }
+
+        [JsonProperty("domain", Required = Required.Always)]
+        public string Domain { get; set; }
+
+        [JsonProperty("downs", Required = Required.Always)]
+        public long Downs { get; set; }
+
+        [JsonProperty("edited", Required = Required.Always)]
+        public bool Edited { get; set; }
+
+        [JsonProperty("gilded", Required = Required.Always)]
+        public long Gilded { get; set; }
+
+        [JsonProperty("hidden", Required = Required.Always)]
+        public bool Hidden { get; set; }
+
+        [JsonProperty("hide_score", Required = Required.Always)]
+        public bool HideScore { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("is_self", Required = Required.Always)]
+        public bool IsSelf { get; set; }
+
+        [JsonProperty("is_video", Required = Required.Always)]
+        public bool IsVideo { get; set; }
+
+        [JsonProperty("likes", Required = Required.AllowNull)]
+        public object Likes { get; set; }
+
+        [JsonProperty("link_flair_css_class", Required = Required.AllowNull)]
+        public string? LinkFlairCssClass { get; set; }
+
+        [JsonProperty("link_flair_text", Required = Required.AllowNull)]
+        public string? LinkFlairText { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("media", Required = Required.AllowNull)]
+        public Media? Media { get; set; }
+
+        [JsonProperty("media_embed", Required = Required.Always)]
+        public MediaEmbed MediaEmbed { get; set; }
+
+        [JsonProperty("mod_reports", Required = Required.Always)]
+        public object[] ModReports { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("num_comments", Required = Required.Always)]
+        public long NumComments { get; set; }
+
+        [JsonProperty("num_reports", Required = Required.AllowNull)]
+        public object NumReports { get; set; }
+
+        [JsonProperty("over_18", Required = Required.Always)]
+        public bool Over18 { get; set; }
+
+        [JsonProperty("permalink", Required = Required.Always)]
+        public string Permalink { get; set; }
+
+        [JsonProperty("post_hint", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PostHint? PostHint { get; set; }
+
+        [JsonProperty("preview", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Preview? Preview { get; set; }
+
+        [JsonProperty("quarantine", Required = Required.Always)]
+        public bool Quarantine { get; set; }
+
+        [JsonProperty("removal_reason", Required = Required.AllowNull)]
+        public object RemovalReason { get; set; }
+
+        [JsonProperty("report_reasons", Required = Required.AllowNull)]
+        public object ReportReasons { get; set; }
+
+        [JsonProperty("saved", Required = Required.Always)]
+        public bool Saved { get; set; }
+
+        [JsonProperty("score", Required = Required.Always)]
+        public long Score { get; set; }
+
+        [JsonProperty("secure_media", Required = Required.AllowNull)]
+        public Media? SecureMedia { get; set; }
+
+        [JsonProperty("secure_media_embed", Required = Required.Always)]
+        public MediaEmbed SecureMediaEmbed { get; set; }
+
+        [JsonProperty("selftext", Required = Required.Always)]
+        public string Selftext { get; set; }
+
+        [JsonProperty("selftext_html", Required = Required.AllowNull)]
+        public string? SelftextHtml { get; set; }
+
+        [JsonProperty("spoiler", Required = Required.Always)]
+        public bool Spoiler { get; set; }
+
+        [JsonProperty("stickied", Required = Required.Always)]
+        public bool Stickied { get; set; }
+
+        [JsonProperty("subreddit", Required = Required.Always)]
+        public string Subreddit { get; set; }
+
+        [JsonProperty("subreddit_id", Required = Required.Always)]
+        public string SubredditId { get; set; }
+
+        [JsonProperty("subreddit_name_prefixed", Required = Required.Always)]
+        public string SubredditNamePrefixed { get; set; }
+
+        [JsonProperty("subreddit_type", Required = Required.Always)]
+        public SubredditType SubredditType { get; set; }
+
+        [JsonProperty("suggested_sort", Required = Required.AllowNull)]
+        public string? SuggestedSort { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public string Thumbnail { get; set; }
+
+        [JsonProperty("thumbnail_height", Required = Required.AllowNull)]
+        public long? ThumbnailHeight { get; set; }
+
+        [JsonProperty("thumbnail_width", Required = Required.AllowNull)]
+        public long? ThumbnailWidth { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ups", Required = Required.Always)]
+        public long Ups { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user_reports", Required = Required.Always)]
+        public object[] UserReports { get; set; }
+
+        [JsonProperty("view_count", Required = Required.AllowNull)]
+        public object ViewCount { get; set; }
+
+        [JsonProperty("visited", Required = Required.Always)]
+        public bool Visited { get; set; }
+    }
+
+    public partial record Media
+    {
+        [JsonProperty("oembed", Required = Required.Always)]
+        public Oembed Oembed { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Oembed
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("html", Required = Required.Always)]
+        public string Html { get; set; }
+
+        [JsonProperty("provider_name", Required = Required.Always)]
+        public string ProviderName { get; set; }
+
+        [JsonProperty("provider_url", Required = Required.Always)]
+        public Uri ProviderUrl { get; set; }
+
+        [JsonProperty("thumbnail_height", Required = Required.Always)]
+        public long ThumbnailHeight { get; set; }
+
+        [JsonProperty("thumbnail_url", Required = Required.Always)]
+        public Uri ThumbnailUrl { get; set; }
+
+        [JsonProperty("thumbnail_width", Required = Required.Always)]
+        public long ThumbnailWidth { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("version", Required = Required.Always)]
+        public string Version { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record MediaEmbed
+    {
+        [JsonProperty("content", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Content { get; set; }
+
+        [JsonProperty("height", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Height { get; set; }
+
+        [JsonProperty("scrolling", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Scrolling { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Width { get; set; }
+    }
+
+    public partial record Preview
+    {
+        [JsonProperty("enabled", Required = Required.Always)]
+        public bool Enabled { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Image[] Images { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("resolutions", Required = Required.Always)]
+        public Source[] Resolutions { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public Source Source { get; set; }
+
+        [JsonProperty("variants", Required = Required.Always)]
+        public Variants Variants { get; set; }
+    }
+
+    public partial record Source
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record Variants
+    {
+        [JsonProperty("gif", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Gif? Gif { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Gif? Mp4 { get; set; }
+
+        [JsonProperty("nsfw", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Gif? Nsfw { get; set; }
+
+        [JsonProperty("obfuscated", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Gif? Obfuscated { get; set; }
+    }
+
+    public partial record Gif
+    {
+        [JsonProperty("resolutions", Required = Required.Always)]
+        public Source[] Resolutions { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public Source Source { get; set; }
+    }
+
+    public enum PostHint { Link, Image, RichVideo };
+
+    public enum SubredditType { Public };
+
+    public enum Kind { T3 };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                PostHintConverter.Singleton,
+                SubredditTypeConverter.Singleton,
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PostHintConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PostHint) || t == typeof(PostHint?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "link":
+                    return PostHint.Link;
+                case "image":
+                    return PostHint.Image;
+                case "rich:video":
+                    return PostHint.RichVideo;
+            }
+            throw new Exception("Cannot unmarshal type PostHint");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PostHint)untypedValue;
+            switch (value)
+            {
+                case PostHint.Link:
+                    serializer.Serialize(writer, "link");
+                    return;
+                case PostHint.Image:
+                    serializer.Serialize(writer, "image");
+                    return;
+                case PostHint.RichVideo:
+                    serializer.Serialize(writer, "rich:video");
+                    return;
+            }
+            throw new Exception("Cannot marshal type PostHint");
+        }
+
+        public static readonly PostHintConverter Singleton = new PostHintConverter();
+    }
+
+    internal class SubredditTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditType) || t == typeof(SubredditType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "public")
+            {
+                return SubredditType.Public;
+            }
+            throw new Exception("Cannot unmarshal type SubredditType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditType)untypedValue;
+            if (value == SubredditType.Public)
+            {
+                serializer.Serialize(writer, "public");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditType");
+        }
+
+        public static readonly SubredditTypeConverter Singleton = new SubredditTypeConverter();
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t3")
+            {
+                return Kind.T3;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.T3)
+            {
+                serializer.Serialize(writer, "t3");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/6dec6.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/6dec6.json/default/QuickType.cs
new file mode 100644
index 0000000..20ca744
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/6dec6.json/default/QuickType.cs
@@ -0,0 +1,403 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public enum Text { Showers, MostlySunny, PartlyCloudy };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class TextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Text) || t == typeof(Text?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Showers":
+                    return Text.Showers;
+                case "Mostly Sunny":
+                    return Text.MostlySunny;
+                case "Partly Cloudy":
+                    return Text.PartlyCloudy;
+            }
+            throw new Exception("Cannot unmarshal type Text");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Text)untypedValue;
+            switch (value)
+            {
+                case Text.Showers:
+                    serializer.Serialize(writer, "Showers");
+                    return;
+                case Text.MostlySunny:
+                    serializer.Serialize(writer, "Mostly Sunny");
+                    return;
+                case Text.PartlyCloudy:
+                    serializer.Serialize(writer, "Partly Cloudy");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Text");
+        }
+
+        public static readonly TextConverter Singleton = new TextConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/6eb00.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/6eb00.json/default/QuickType.cs
new file mode 100644
index 0000000..7338eea
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/6eb00.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("DirectorateID", Required = Required.Always)]
+        public long DirectorateId { get; set; }
+
+        [JsonProperty("Id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("Name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/70c77.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/70c77.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/70c77.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/734ad.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/734ad.json/default/QuickType.cs
new file mode 100644
index 0000000..2a79e53
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/734ad.json/default/QuickType.cs
@@ -0,0 +1,337 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("facets", Required = Required.Always)]
+        public Facets Facets { get; set; }
+
+        [JsonProperty("limit", Required = Required.Always)]
+        public long Limit { get; set; }
+
+        [JsonProperty("next", Required = Required.Always)]
+        public Uri Next { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("previous", Required = Required.Always)]
+        public bool Previous { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Facets
+    {
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("acronym", Required = Required.AllowNull)]
+        public string? Acronym { get; set; }
+
+        [JsonProperty("activity_consult_committees", Required = Required.Always)]
+        public string ActivityConsultCommittees { get; set; }
+
+        [JsonProperty("activity_eu_legislative", Required = Required.Always)]
+        public string ActivityEuLegislative { get; set; }
+
+        [JsonProperty("activity_expert_groups", Required = Required.Always)]
+        public string ActivityExpertGroups { get; set; }
+
+        [JsonProperty("activity_high_level_groups", Required = Required.Always)]
+        public string ActivityHighLevelGroups { get; set; }
+
+        [JsonProperty("activity_industry_forums", Required = Required.Always)]
+        public string ActivityIndustryForums { get; set; }
+
+        [JsonProperty("activity_inter_groups", Required = Required.Always)]
+        public string ActivityInterGroups { get; set; }
+
+        [JsonProperty("activity_other", Required = Required.AllowNull)]
+        public string? ActivityOther { get; set; }
+
+        [JsonProperty("activity_relevant_comm", Required = Required.Always)]
+        public string ActivityRelevantComm { get; set; }
+
+        [JsonProperty("be_office_country", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? BeOfficeCountry { get; set; }
+
+        [JsonProperty("be_office_lat")]
+        public double? BeOfficeLat { get; set; }
+
+        [JsonProperty("be_office_lon")]
+        public double? BeOfficeLon { get; set; }
+
+        [JsonProperty("be_office_phone", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? BeOfficePhone { get; set; }
+
+        [JsonProperty("be_office_post_code")]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? BeOfficePostCode { get; set; }
+
+        [JsonProperty("be_office_postbox")]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? BeOfficePostbox { get; set; }
+
+        [JsonProperty("be_office_street", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? BeOfficeStreet { get; set; }
+
+        [JsonProperty("be_office_town", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? BeOfficeTown { get; set; }
+
+        [JsonProperty("code_of_conduct", Required = Required.Always)]
+        public string CodeOfConduct { get; set; }
+
+        [JsonProperty("contact_country", Required = Required.Always)]
+        public long ContactCountry { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("entity", Required = Required.Always)]
+        public string Entity { get; set; }
+
+        [JsonProperty("goals", Required = Required.Always)]
+        public string Goals { get; set; }
+
+        [JsonProperty("head", Required = Required.Always)]
+        public string Head { get; set; }
+
+        [JsonProperty("head_office_country", Required = Required.Always)]
+        public string HeadOfficeCountry { get; set; }
+
+        [JsonProperty("head_office_lat", Required = Required.AllowNull)]
+        public double? HeadOfficeLat { get; set; }
+
+        [JsonProperty("head_office_lon", Required = Required.AllowNull)]
+        public double? HeadOfficeLon { get; set; }
+
+        [JsonProperty("head_office_phone", Required = Required.Always)]
+        public string HeadOfficePhone { get; set; }
+
+        [JsonProperty("head_office_post_code", Required = Required.AllowNull)]
+        public string? HeadOfficePostCode { get; set; }
+
+        [JsonProperty("head_office_postbox", Required = Required.AllowNull)]
+        public string? HeadOfficePostbox { get; set; }
+
+        [JsonProperty("head_office_street", Required = Required.Always)]
+        public string HeadOfficeStreet { get; set; }
+
+        [JsonProperty("head_office_town", Required = Required.Always)]
+        public string HeadOfficeTown { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identification_code", Required = Required.Always)]
+        public string IdentificationCode { get; set; }
+
+        [JsonProperty("info_members", Required = Required.Always)]
+        public string InfoMembers { get; set; }
+
+        [JsonProperty("last_update_date", Required = Required.Always)]
+        public DateTimeOffset LastUpdateDate { get; set; }
+
+        [JsonProperty("legal", Required = Required.Always)]
+        public string Legal { get; set; }
+
+        [JsonProperty("legal_status", Required = Required.Always)]
+        public string LegalStatus { get; set; }
+
+        [JsonProperty("main_category", Required = Required.Always)]
+        public long MainCategory { get; set; }
+
+        [JsonProperty("main_category_title", Required = Required.Always)]
+        public string MainCategoryTitle { get; set; }
+
+        [JsonProperty("members", Required = Required.Always)]
+        public long Members { get; set; }
+
+        [JsonProperty("members_100", Required = Required.AllowNull)]
+        public long? Members100 { get; set; }
+
+        [JsonProperty("members_25", Required = Required.AllowNull)]
+        public long? Members25 { get; set; }
+
+        [JsonProperty("members_50", Required = Required.AllowNull)]
+        public long? Members50 { get; set; }
+
+        [JsonProperty("members_75", Required = Required.AllowNull)]
+        public long? Members75 { get; set; }
+
+        [JsonProperty("members_fte", Required = Required.Always)]
+        public double MembersFte { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("native_name", Required = Required.AllowNull)]
+        public object NativeName { get; set; }
+
+        [JsonProperty("networking", Required = Required.AllowNull)]
+        public string? Networking { get; set; }
+
+        [JsonProperty("number_of_natural_persons", Required = Required.AllowNull)]
+        public long? NumberOfNaturalPersons { get; set; }
+
+        [JsonProperty("other_code_of_conduct", Required = Required.AllowNull)]
+        public string? OtherCodeOfConduct { get; set; }
+
+        [JsonProperty("registration_date", Required = Required.Always)]
+        public DateTimeOffset RegistrationDate { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("structure_members", Required = Required.Always)]
+        public string StructureMembers { get; set; }
+
+        [JsonProperty("sub_category", Required = Required.Always)]
+        public long SubCategory { get; set; }
+
+        [JsonProperty("sub_category_title", Required = Required.Always)]
+        public string SubCategoryTitle { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("uri", Required = Required.Always)]
+        public Uri Uri { get; set; }
+
+        [JsonProperty("web_site_url", Required = Required.AllowNull)]
+        public Uri? WebSiteUrl { get; set; }
+    }
+
+    public enum Status { Active, Inactive };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                StatusConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class StatusConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Status) || t == typeof(Status?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "active":
+                    return Status.Active;
+                case "inactive":
+                    return Status.Inactive;
+            }
+            throw new Exception("Cannot unmarshal type Status");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Status)untypedValue;
+            switch (value)
+            {
+                case Status.Active:
+                    serializer.Serialize(writer, "active");
+                    return;
+                case Status.Inactive:
+                    serializer.Serialize(writer, "inactive");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Status");
+        }
+
+        public static readonly StatusConverter Singleton = new StatusConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/75912.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/75912.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/75912.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/7681c.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/7681c.json/default/QuickType.cs
new file mode 100644
index 0000000..5e21049
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/7681c.json/default/QuickType.cs
@@ -0,0 +1,497 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("pagination", Required = Required.Always)]
+        public Pagination Pagination { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("bitly_gif_url", Required = Required.Always)]
+        public Uri BitlyGifUrl { get; set; }
+
+        [JsonProperty("bitly_url", Required = Required.Always)]
+        public Uri BitlyUrl { get; set; }
+
+        [JsonProperty("content_url", Required = Required.Always)]
+        public string ContentUrl { get; set; }
+
+        [JsonProperty("embed_url", Required = Required.Always)]
+        public Uri EmbedUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Images Images { get; set; }
+
+        [JsonProperty("import_datetime", Required = Required.Always)]
+        public string ImportDatetime { get; set; }
+
+        [JsonProperty("is_indexable", Required = Required.Always)]
+        public long IsIndexable { get; set; }
+
+        [JsonProperty("rating", Required = Required.Always)]
+        public Rating Rating { get; set; }
+
+        [JsonProperty("slug", Required = Required.Always)]
+        public string Slug { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public string Source { get; set; }
+
+        [JsonProperty("source_post_url", Required = Required.Always)]
+        public string SourcePostUrl { get; set; }
+
+        [JsonProperty("source_tld", Required = Required.Always)]
+        public string SourceTld { get; set; }
+
+        [JsonProperty("trending_datetime", Required = Required.Always)]
+        public string TrendingDatetime { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public User? User { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public Username Username { get; set; }
+    }
+
+    public partial record Images
+    {
+        [JsonProperty("downsized", Required = Required.Always)]
+        public The480_WStill Downsized { get; set; }
+
+        [JsonProperty("downsized_large", Required = Required.Always)]
+        public The480_WStill DownsizedLarge { get; set; }
+
+        [JsonProperty("downsized_medium", Required = Required.Always)]
+        public The480_WStill DownsizedMedium { get; set; }
+
+        [JsonProperty("downsized_small", Required = Required.Always)]
+        public DownsizedSmall DownsizedSmall { get; set; }
+
+        [JsonProperty("downsized_still", Required = Required.Always)]
+        public The480_WStill DownsizedStill { get; set; }
+
+        [JsonProperty("fixed_height", Required = Required.Always)]
+        public FixedHeight FixedHeight { get; set; }
+
+        [JsonProperty("fixed_height_downsampled", Required = Required.Always)]
+        public FixedHeight FixedHeightDownsampled { get; set; }
+
+        [JsonProperty("fixed_height_small", Required = Required.Always)]
+        public FixedHeight FixedHeightSmall { get; set; }
+
+        [JsonProperty("fixed_height_small_still", Required = Required.Always)]
+        public The480_WStill FixedHeightSmallStill { get; set; }
+
+        [JsonProperty("fixed_height_still", Required = Required.Always)]
+        public The480_WStill FixedHeightStill { get; set; }
+
+        [JsonProperty("fixed_width", Required = Required.Always)]
+        public FixedHeight FixedWidth { get; set; }
+
+        [JsonProperty("fixed_width_downsampled", Required = Required.Always)]
+        public FixedHeight FixedWidthDownsampled { get; set; }
+
+        [JsonProperty("fixed_width_small", Required = Required.Always)]
+        public FixedHeight FixedWidthSmall { get; set; }
+
+        [JsonProperty("fixed_width_small_still", Required = Required.Always)]
+        public The480_WStill FixedWidthSmallStill { get; set; }
+
+        [JsonProperty("fixed_width_still", Required = Required.Always)]
+        public The480_WStill FixedWidthStill { get; set; }
+
+        [JsonProperty("looping", Required = Required.Always)]
+        public Looping Looping { get; set; }
+
+        [JsonProperty("original", Required = Required.Always)]
+        public FixedHeight Original { get; set; }
+
+        [JsonProperty("original_mp4", Required = Required.Always)]
+        public DownsizedSmall OriginalMp4 { get; set; }
+
+        [JsonProperty("original_still", Required = Required.Always)]
+        public The480_WStill OriginalStill { get; set; }
+
+        [JsonProperty("preview", Required = Required.Always)]
+        public DownsizedSmall Preview { get; set; }
+
+        [JsonProperty("preview_gif", Required = Required.Always)]
+        public The480_WStill PreviewGif { get; set; }
+
+        [JsonProperty("preview_webp", Required = Required.Always)]
+        public The480_WStill PreviewWebp { get; set; }
+
+        [JsonProperty("480w_still", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public The480_WStill? The480WStill { get; set; }
+    }
+
+    public partial record The480_WStill
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record DownsizedSmall
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record FixedHeight
+    {
+        [JsonProperty("frames", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Frames { get; set; }
+
+        [JsonProperty("hash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Hash { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Uri? Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Mp4Size { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("webp", Required = Required.Always)]
+        public Uri Webp { get; set; }
+
+        [JsonProperty("webp_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long WebpSize { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Looping
+    {
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+    }
+
+    public partial record User
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("banner_url", Required = Required.Always)]
+        public Uri BannerUrl { get; set; }
+
+        [JsonProperty("display_name", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("profile_url", Required = Required.Always)]
+        public Uri ProfileUrl { get; set; }
+
+        [JsonProperty("twitter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Twitter { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public string Username { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("msg", Required = Required.Always)]
+        public string Msg { get; set; }
+
+        [JsonProperty("response_id", Required = Required.Always)]
+        public string ResponseId { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Pagination
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("total_count", Required = Required.Always)]
+        public long TotalCount { get; set; }
+    }
+
+    public enum Rating { G, Pg, Pg13 };
+
+    public enum TypeEnum { Gif };
+
+    public enum Username { Empty, Mashable, Nba, Originals };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                RatingConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                UsernameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RatingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rating) || t == typeof(Rating?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "g":
+                    return Rating.G;
+                case "pg":
+                    return Rating.Pg;
+                case "pg-13":
+                    return Rating.Pg13;
+            }
+            throw new Exception("Cannot unmarshal type Rating");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Rating)untypedValue;
+            switch (value)
+            {
+                case Rating.G:
+                    serializer.Serialize(writer, "g");
+                    return;
+                case Rating.Pg:
+                    serializer.Serialize(writer, "pg");
+                    return;
+                case Rating.Pg13:
+                    serializer.Serialize(writer, "pg-13");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Rating");
+        }
+
+        public static readonly RatingConverter Singleton = new RatingConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "gif")
+            {
+                return TypeEnum.Gif;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.Gif)
+            {
+                serializer.Serialize(writer, "gif");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+
+    internal class UsernameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Username) || t == typeof(Username?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Username.Empty;
+                case "mashable":
+                    return Username.Mashable;
+                case "nba":
+                    return Username.Nba;
+                case "Originals":
+                    return Username.Originals;
+            }
+            throw new Exception("Cannot unmarshal type Username");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Username)untypedValue;
+            switch (value)
+            {
+                case Username.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Username.Mashable:
+                    serializer.Serialize(writer, "mashable");
+                    return;
+                case Username.Nba:
+                    serializer.Serialize(writer, "nba");
+                    return;
+                case Username.Originals:
+                    serializer.Serialize(writer, "Originals");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Username");
+        }
+
+        public static readonly UsernameConverter Singleton = new UsernameConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/76ae1.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/76ae1.json/default/QuickType.cs
new file mode 100644
index 0000000..a2a27df
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/76ae1.json/default/QuickType.cs
@@ -0,0 +1,553 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("basePath", Required = Required.Always)]
+        public string BasePath { get; set; }
+
+        [JsonProperty("definitions", Required = Required.Always)]
+        public Definitions Definitions { get; set; }
+
+        [JsonProperty("host", Required = Required.Always)]
+        public string Host { get; set; }
+
+        [JsonProperty("info", Required = Required.Always)]
+        public Info Info { get; set; }
+
+        [JsonProperty("paths", Required = Required.Always)]
+        public Paths Paths { get; set; }
+
+        [JsonProperty("produces", Required = Required.Always)]
+        public string[] Produces { get; set; }
+
+        [JsonProperty("schemes", Required = Required.Always)]
+        public string[] Schemes { get; set; }
+
+        [JsonProperty("swagger", Required = Required.Always)]
+        public string Swagger { get; set; }
+    }
+
+    public partial record Definitions
+    {
+        [JsonProperty("Article", Required = Required.Always)]
+        public Article Article { get; set; }
+
+        [JsonProperty("Center", Required = Required.Always)]
+        public Article Center { get; set; }
+
+        [JsonProperty("DeMinimis", Required = Required.Always)]
+        public DeMinimis DeMinimis { get; set; }
+
+        [JsonProperty("Event", Required = Required.Always)]
+        public Article Event { get; set; }
+
+        [JsonProperty("FAQ", Required = Required.Always)]
+        public Faq Faq { get; set; }
+
+        [JsonProperty("Lead", Required = Required.Always)]
+        public Article Lead { get; set; }
+
+        [JsonProperty("List", Required = Required.Always)]
+        public Article List { get; set; }
+
+        [JsonProperty("MarketIntelligence", Required = Required.Always)]
+        public Article MarketIntelligence { get; set; }
+
+        [JsonProperty("Office", Required = Required.Always)]
+        public Article Office { get; set; }
+
+        [JsonProperty("Provider", Required = Required.Always)]
+        public Article Provider { get; set; }
+
+        [JsonProperty("Rate", Required = Required.Always)]
+        public Article Rate { get; set; }
+
+        [JsonProperty("Report", Required = Required.Always)]
+        public Report Report { get; set; }
+
+        [JsonProperty("Taxonomy", Required = Required.Always)]
+        public Taxonomy Taxonomy { get; set; }
+    }
+
+    public partial record Article
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public Dictionary<string, Property> Properties { get; set; }
+    }
+
+    public partial record Property
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public FormatEnum Type { get; set; }
+    }
+
+    public partial record DeMinimis
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public DeMinimisProperties Properties { get; set; }
+    }
+
+    public partial record DeMinimisProperties
+    {
+        [JsonProperty("countries", Required = Required.Always)]
+        public Property Countries { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public Property Country { get; set; }
+
+        [JsonProperty("de_minimis_currency", Required = Required.Always)]
+        public Property DeMinimisCurrency { get; set; }
+
+        [JsonProperty("de_minimis_value", Required = Required.Always)]
+        public Property DeMinimisValue { get; set; }
+
+        [JsonProperty("notes", Required = Required.Always)]
+        public Property Notes { get; set; }
+
+        [JsonProperty("vat_amount", Required = Required.Always)]
+        public Property VatAmount { get; set; }
+
+        [JsonProperty("vat_currency", Required = Required.Always)]
+        public Property VatCurrency { get; set; }
+    }
+
+    public partial record Faq
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public FaqProperties Properties { get; set; }
+    }
+
+    public partial record FaqProperties
+    {
+        [JsonProperty("answer", Required = Required.Always)]
+        public Property Answer { get; set; }
+
+        [JsonProperty("countries", Required = Required.Always)]
+        public Property Countries { get; set; }
+
+        [JsonProperty("first_published_date", Required = Required.Always)]
+        public Property FirstPublishedDate { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public Property Id { get; set; }
+
+        [JsonProperty("industries", Required = Required.Always)]
+        public Property Industries { get; set; }
+
+        [JsonProperty("last_published_date", Required = Required.Always)]
+        public Property LastPublishedDate { get; set; }
+
+        [JsonProperty("question", Required = Required.Always)]
+        public Property Question { get; set; }
+
+        [JsonProperty("topics", Required = Required.Always)]
+        public Property Topics { get; set; }
+
+        [JsonProperty("trade_regions", Required = Required.Always)]
+        public Property TradeRegions { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Property Url { get; set; }
+
+        [JsonProperty("world_regions", Required = Required.Always)]
+        public Property WorldRegions { get; set; }
+    }
+
+    public partial record Report
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public ReportProperties Properties { get; set; }
+    }
+
+    public partial record ReportProperties
+    {
+        [JsonProperty("countries", Required = Required.Always)]
+        public Property Countries { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public Property Description { get; set; }
+
+        [JsonProperty("expiration_date", Required = Required.Always)]
+        public Property ExpirationDate { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public Property Id { get; set; }
+
+        [JsonProperty("industries", Required = Required.Always)]
+        public Property Industries { get; set; }
+
+        [JsonProperty("ita_industries", Required = Required.Always)]
+        public Property ItaIndustries { get; set; }
+
+        [JsonProperty("report_type", Required = Required.Always)]
+        public Property ReportType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public Property Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Property Url { get; set; }
+    }
+
+    public partial record Taxonomy
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public TaxonomyProperties Properties { get; set; }
+    }
+
+    public partial record TaxonomyProperties
+    {
+        [JsonProperty("annotations", Required = Required.Always)]
+        public Property Annotations { get; set; }
+
+        [JsonProperty("datatype_properties", Required = Required.Always)]
+        public Property DatatypeProperties { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public Property Id { get; set; }
+
+        [JsonProperty("label", Required = Required.Always)]
+        public Property Label { get; set; }
+
+        [JsonProperty("sub_class_of", Required = Required.Always)]
+        public Property SubClassOf { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public Property Type { get; set; }
+    }
+
+    public partial record Info
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("version", Required = Required.Always)]
+        public string Version { get; set; }
+    }
+
+    public partial record Paths
+    {
+        [JsonProperty("/business_service_providers/search", Required = Required.Always)]
+        public BusinessServiceProvidersSearchClass BusinessServiceProvidersSearch { get; set; }
+
+        [JsonProperty("/consolidated_screening_list/search", Required = Required.Always)]
+        public ConsolidatedScreeningListSearchClass ConsolidatedScreeningListSearch { get; set; }
+
+        [JsonProperty("/de_minimis/search", Required = Required.Always)]
+        public ConsolidatedScreeningListSearchClass DeMinimisSearch { get; set; }
+
+        [JsonProperty("/ita_faqs/search", Required = Required.Always)]
+        public ConsolidatedScreeningListSearchClass ItaFaqsSearch { get; set; }
+
+        [JsonProperty("/ita_office_locations/search", Required = Required.Always)]
+        public ConsolidatedScreeningListSearchClass ItaOfficeLocationsSearch { get; set; }
+
+        [JsonProperty("/ita_taxonomies/search", Required = Required.Always)]
+        public BusinessServiceProvidersSearchClass ItaTaxonomiesSearch { get; set; }
+
+        [JsonProperty("/ita_zipcode_to_post/search", Required = Required.Always)]
+        public BusinessServiceProvidersSearchClass ItaZipcodeToPostSearch { get; set; }
+
+        [JsonProperty("/market_intelligence/search", Required = Required.Always)]
+        public ConsolidatedScreeningListSearchClass MarketIntelligenceSearch { get; set; }
+
+        [JsonProperty("/market_research_library/search", Required = Required.Always)]
+        public ConsolidatedScreeningListSearchClass MarketResearchLibrarySearch { get; set; }
+
+        [JsonProperty("/tariff_rates/search", Required = Required.Always)]
+        public ConsolidatedScreeningListSearchClass TariffRatesSearch { get; set; }
+
+        [JsonProperty("/trade_articles/search", Required = Required.Always)]
+        public ConsolidatedScreeningListSearchClass TradeArticlesSearch { get; set; }
+
+        [JsonProperty("/trade_events/search", Required = Required.Always)]
+        public ConsolidatedScreeningListSearchClass TradeEventsSearch { get; set; }
+
+        [JsonProperty("/trade_leads/search", Required = Required.Always)]
+        public ConsolidatedScreeningListSearchClass TradeLeadsSearch { get; set; }
+    }
+
+    public partial record BusinessServiceProvidersSearchClass
+    {
+        [JsonProperty("get", Required = Required.Always)]
+        public BusinessServiceProvidersSearchGet Get { get; set; }
+    }
+
+    public partial record BusinessServiceProvidersSearchGet
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("parameters", Required = Required.Always)]
+        public Parameter[] Parameters { get; set; }
+
+        [JsonProperty("responses", Required = Required.Always)]
+        public PurpleResponses Responses { get; set; }
+
+        [JsonProperty("summary", Required = Required.Always)]
+        public string Summary { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+    }
+
+    public partial record Parameter
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public FormatEnum Format { get; set; }
+
+        [JsonProperty("in", Required = Required.Always)]
+        public In In { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("required", Required = Required.Always)]
+        public bool ParameterRequired { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public FormatEnum Type { get; set; }
+    }
+
+    public partial record PurpleResponses
+    {
+        [JsonProperty("200", Required = Required.Always)]
+        public Purple200 The200 { get; set; }
+    }
+
+    public partial record Purple200
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("schema", Required = Required.Always)]
+        public ItemsClass Schema { get; set; }
+    }
+
+    public partial record ItemsClass
+    {
+        [JsonProperty("$ref", Required = Required.Always)]
+        public string Ref { get; set; }
+    }
+
+    public partial record ConsolidatedScreeningListSearchClass
+    {
+        [JsonProperty("get", Required = Required.Always)]
+        public ConsolidatedScreeningListSearchGet Get { get; set; }
+    }
+
+    public partial record ConsolidatedScreeningListSearchGet
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("parameters", Required = Required.Always)]
+        public Parameter[] Parameters { get; set; }
+
+        [JsonProperty("responses", Required = Required.Always)]
+        public FluffyResponses Responses { get; set; }
+
+        [JsonProperty("summary", Required = Required.Always)]
+        public string Summary { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+    }
+
+    public partial record FluffyResponses
+    {
+        [JsonProperty("200", Required = Required.Always)]
+        public Fluffy200 The200 { get; set; }
+    }
+
+    public partial record Fluffy200
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("schema", Required = Required.Always)]
+        public PurpleSchema Schema { get; set; }
+    }
+
+    public partial record PurpleSchema
+    {
+        [JsonProperty("items", Required = Required.Always)]
+        public ItemsClass Items { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public SchemaType Type { get; set; }
+    }
+
+    public enum FormatEnum { String };
+
+    public enum In { Query };
+
+    public enum SchemaType { Array };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                FormatEnumConverter.Singleton,
+                InConverter.Singleton,
+                SchemaTypeConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class FormatEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FormatEnum) || t == typeof(FormatEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "string")
+            {
+                return FormatEnum.String;
+            }
+            throw new Exception("Cannot unmarshal type FormatEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FormatEnum)untypedValue;
+            if (value == FormatEnum.String)
+            {
+                serializer.Serialize(writer, "string");
+                return;
+            }
+            throw new Exception("Cannot marshal type FormatEnum");
+        }
+
+        public static readonly FormatEnumConverter Singleton = new FormatEnumConverter();
+    }
+
+    internal class InConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(In) || t == typeof(In?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "query")
+            {
+                return In.Query;
+            }
+            throw new Exception("Cannot unmarshal type In");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (In)untypedValue;
+            if (value == In.Query)
+            {
+                serializer.Serialize(writer, "query");
+                return;
+            }
+            throw new Exception("Cannot marshal type In");
+        }
+
+        public static readonly InConverter Singleton = new InConverter();
+    }
+
+    internal class SchemaTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SchemaType) || t == typeof(SchemaType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "array")
+            {
+                return SchemaType.Array;
+            }
+            throw new Exception("Cannot unmarshal type SchemaType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SchemaType)untypedValue;
+            if (value == SchemaType.Array)
+            {
+                serializer.Serialize(writer, "array");
+                return;
+            }
+            throw new Exception("Cannot marshal type SchemaType");
+        }
+
+        public static readonly SchemaTypeConverter Singleton = new SchemaTypeConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/77392.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/77392.json/default/QuickType.cs
new file mode 100644
index 0000000..34e1c00
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/77392.json/default/QuickType.cs
@@ -0,0 +1,216 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("designation", Required = Required.Always)]
+        public string Designation { get; set; }
+
+        [JsonProperty("discovery_date", Required = Required.Always)]
+        public DateTimeOffset DiscoveryDate { get; set; }
+
+        [JsonProperty("h_mag", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? HMag { get; set; }
+
+        [JsonProperty("i_deg", Required = Required.Always)]
+        public string IDeg { get; set; }
+
+        [JsonProperty("moid_au", Required = Required.Always)]
+        public string MoidAu { get; set; }
+
+        [JsonProperty("orbit_class", Required = Required.Always)]
+        public OrbitClass OrbitClass { get; set; }
+
+        [JsonProperty("period_yr", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? PeriodYr { get; set; }
+
+        [JsonProperty("pha", Required = Required.Always)]
+        public Pha Pha { get; set; }
+
+        [JsonProperty("q_au_1", Required = Required.Always)]
+        public string QAu1 { get; set; }
+
+        [JsonProperty("q_au_2", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? QAu2 { get; set; }
+    }
+
+    public enum OrbitClass { Apollo, Amor, Aten, Comet, JupiterFamilyComet, HalleyTypeComet, ParabolicComet, OrbitClassJupiterFamilyComet, EnckeTypeComet };
+
+    public enum Pha { Y, N, NA };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                OrbitClassConverter.Singleton,
+                PhaConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class OrbitClassConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OrbitClass) || t == typeof(OrbitClass?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Apollo":
+                    return OrbitClass.Apollo;
+                case "Amor":
+                    return OrbitClass.Amor;
+                case "Aten":
+                    return OrbitClass.Aten;
+                case "Comet":
+                    return OrbitClass.Comet;
+                case "Jupiter-family Comet":
+                    return OrbitClass.JupiterFamilyComet;
+                case "Halley-type Comet*":
+                    return OrbitClass.HalleyTypeComet;
+                case "Parabolic Comet":
+                    return OrbitClass.ParabolicComet;
+                case "Jupiter-family Comet*":
+                    return OrbitClass.OrbitClassJupiterFamilyComet;
+                case "Encke-type Comet":
+                    return OrbitClass.EnckeTypeComet;
+            }
+            throw new Exception("Cannot unmarshal type OrbitClass");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (OrbitClass)untypedValue;
+            switch (value)
+            {
+                case OrbitClass.Apollo:
+                    serializer.Serialize(writer, "Apollo");
+                    return;
+                case OrbitClass.Amor:
+                    serializer.Serialize(writer, "Amor");
+                    return;
+                case OrbitClass.Aten:
+                    serializer.Serialize(writer, "Aten");
+                    return;
+                case OrbitClass.Comet:
+                    serializer.Serialize(writer, "Comet");
+                    return;
+                case OrbitClass.JupiterFamilyComet:
+                    serializer.Serialize(writer, "Jupiter-family Comet");
+                    return;
+                case OrbitClass.HalleyTypeComet:
+                    serializer.Serialize(writer, "Halley-type Comet*");
+                    return;
+                case OrbitClass.ParabolicComet:
+                    serializer.Serialize(writer, "Parabolic Comet");
+                    return;
+                case OrbitClass.OrbitClassJupiterFamilyComet:
+                    serializer.Serialize(writer, "Jupiter-family Comet*");
+                    return;
+                case OrbitClass.EnckeTypeComet:
+                    serializer.Serialize(writer, "Encke-type Comet");
+                    return;
+            }
+            throw new Exception("Cannot marshal type OrbitClass");
+        }
+
+        public static readonly OrbitClassConverter Singleton = new OrbitClassConverter();
+    }
+
+    internal class PhaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pha) || t == typeof(Pha?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Y":
+                    return Pha.Y;
+                case "N":
+                    return Pha.N;
+                case "n/a":
+                    return Pha.NA;
+            }
+            throw new Exception("Cannot unmarshal type Pha");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Pha)untypedValue;
+            switch (value)
+            {
+                case Pha.Y:
+                    serializer.Serialize(writer, "Y");
+                    return;
+                case Pha.N:
+                    serializer.Serialize(writer, "N");
+                    return;
+                case Pha.NA:
+                    serializer.Serialize(writer, "n/a");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Pha");
+        }
+
+        public static readonly PhaConverter Singleton = new PhaConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/7d397.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/7d397.json/default/QuickType.cs
new file mode 100644
index 0000000..5ef45aa
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/7d397.json/default/QuickType.cs
@@ -0,0 +1,270 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("basePath", Required = Required.Always)]
+        public string BasePath { get; set; }
+
+        [JsonProperty("definitions", Required = Required.Always)]
+        public Definitions Definitions { get; set; }
+
+        [JsonProperty("host", Required = Required.Always)]
+        public string Host { get; set; }
+
+        [JsonProperty("info", Required = Required.Always)]
+        public Info Info { get; set; }
+
+        [JsonProperty("paths", Required = Required.Always)]
+        public Paths Paths { get; set; }
+
+        [JsonProperty("produces", Required = Required.Always)]
+        public string[] Produces { get; set; }
+
+        [JsonProperty("schemes", Required = Required.Always)]
+        public string[] Schemes { get; set; }
+
+        [JsonProperty("swagger", Required = Required.Always)]
+        public string Swagger { get; set; }
+    }
+
+    public partial record Definitions
+    {
+        [JsonProperty("List", Required = Required.Always)]
+        public List List { get; set; }
+    }
+
+    public partial record List
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public Dictionary<string, Property> Properties { get; set; }
+    }
+
+    public partial record Property
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record Info
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("version", Required = Required.Always)]
+        public string Version { get; set; }
+    }
+
+    public partial record Paths
+    {
+        [JsonProperty("/consolidated_screening_list/search", Required = Required.Always)]
+        public ConsolidatedScreeningListSearch ConsolidatedScreeningListSearch { get; set; }
+    }
+
+    public partial record ConsolidatedScreeningListSearch
+    {
+        [JsonProperty("get", Required = Required.Always)]
+        public Get Get { get; set; }
+    }
+
+    public partial record Get
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("parameters", Required = Required.Always)]
+        public Parameter[] Parameters { get; set; }
+
+        [JsonProperty("responses", Required = Required.Always)]
+        public Responses Responses { get; set; }
+
+        [JsonProperty("summary", Required = Required.Always)]
+        public string Summary { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+    }
+
+    public partial record Parameter
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public TypeEnum Format { get; set; }
+
+        [JsonProperty("in", Required = Required.Always)]
+        public In In { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("required", Required = Required.Always)]
+        public bool ParameterRequired { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record Responses
+    {
+        [JsonProperty("200", Required = Required.Always)]
+        public The200 The200 { get; set; }
+    }
+
+    public partial record The200
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("schema", Required = Required.Always)]
+        public Schema Schema { get; set; }
+    }
+
+    public partial record Schema
+    {
+        [JsonProperty("items", Required = Required.Always)]
+        public Items Items { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Items
+    {
+        [JsonProperty("$ref", Required = Required.Always)]
+        public string Ref { get; set; }
+    }
+
+    public enum TypeEnum { String };
+
+    public enum In { Query };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TypeEnumConverter.Singleton,
+                InConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "string")
+            {
+                return TypeEnum.String;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.String)
+            {
+                serializer.Serialize(writer, "string");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+
+    internal class InConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(In) || t == typeof(In?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "query")
+            {
+                return In.Query;
+            }
+            throw new Exception("Cannot unmarshal type In");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (In)untypedValue;
+            if (value == In.Query)
+            {
+                serializer.Serialize(writer, "query");
+                return;
+            }
+            throw new Exception("Cannot marshal type In");
+        }
+
+        public static readonly InConverter Singleton = new InConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/7d722.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/7d722.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/7d722.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/7df41.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/7df41.json/default/QuickType.cs
new file mode 100644
index 0000000..f310b55
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/7df41.json/default/QuickType.cs
@@ -0,0 +1,85 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("pc", Required = Required.Always)]
+        public Pc Pc { get; set; }
+
+        [JsonProperty("ps3", Required = Required.Always)]
+        public Pc Ps3 { get; set; }
+
+        [JsonProperty("ps4", Required = Required.Always)]
+        public Pc Ps4 { get; set; }
+
+        [JsonProperty("xbox", Required = Required.Always)]
+        public Pc Xbox { get; set; }
+
+        [JsonProperty("xone", Required = Required.Always)]
+        public Pc Xone { get; set; }
+    }
+
+    public partial record Pc
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("label", Required = Required.Always)]
+        public string Label { get; set; }
+
+        [JsonProperty("peak24", Required = Required.Always)]
+        public long Peak24 { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/7dfa6.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/7dfa6.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/7dfa6.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/7eb30.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/7eb30.json/default/QuickType.cs
new file mode 100644
index 0000000..53682a8
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/7eb30.json/default/QuickType.cs
@@ -0,0 +1,361 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("next", Required = Required.Always)]
+        public Uri Next { get; set; }
+
+        [JsonProperty("previous", Required = Required.AllowNull)]
+        public object Previous { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("english", Required = Required.Always)]
+        public string English { get; set; }
+
+        [JsonProperty("fav", Required = Required.Always)]
+        public bool Fav { get; set; }
+
+        [JsonProperty("group", Required = Required.Always)]
+        public Group Group { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("min_screens", Required = Required.Always)]
+        public long MinScreens { get; set; }
+
+        [JsonProperty("num_views", Required = Required.Always)]
+        public long NumViews { get; set; }
+
+        [JsonProperty("showtimes", Required = Required.Always)]
+        public Uri Showtimes { get; set; }
+
+        [JsonProperty("stars", Required = Required.Always)]
+        public long Stars { get; set; }
+
+        [JsonProperty("tel", Required = Required.Always)]
+        public Tel Tel { get; set; }
+
+        [JsonProperty("thai", Required = Required.Always)]
+        public string Thai { get; set; }
+
+        [JsonProperty("today_screens", Required = Required.Always)]
+        public long TodayScreens { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("website", Required = Required.Always)]
+        public string Website { get; set; }
+    }
+
+    public partial record Group
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        public Code Code { get; set; }
+
+        [JsonProperty("english", Required = Required.Always)]
+        public English English { get; set; }
+
+        [JsonProperty("thai", Required = Required.Always)]
+        public Thai Thai { get; set; }
+
+        [JsonProperty("website", Required = Required.Always)]
+        public Uri Website { get; set; }
+    }
+
+    public enum Code { Sf };
+
+    public enum English { Sf };
+
+    public enum Thai { เอสเอฟ };
+
+    public enum Location { Empty, The5ThFlEmporium };
+
+    public enum Tel { Empty, The022688899 };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CodeConverter.Singleton,
+                EnglishConverter.Singleton,
+                ThaiConverter.Singleton,
+                LocationConverter.Singleton,
+                TelConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class CodeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Code) || t == typeof(Code?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "sf")
+            {
+                return Code.Sf;
+            }
+            throw new Exception("Cannot unmarshal type Code");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Code)untypedValue;
+            if (value == Code.Sf)
+            {
+                serializer.Serialize(writer, "sf");
+                return;
+            }
+            throw new Exception("Cannot marshal type Code");
+        }
+
+        public static readonly CodeConverter Singleton = new CodeConverter();
+    }
+
+    internal class EnglishConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(English) || t == typeof(English?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "SF")
+            {
+                return English.Sf;
+            }
+            throw new Exception("Cannot unmarshal type English");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (English)untypedValue;
+            if (value == English.Sf)
+            {
+                serializer.Serialize(writer, "SF");
+                return;
+            }
+            throw new Exception("Cannot marshal type English");
+        }
+
+        public static readonly EnglishConverter Singleton = new EnglishConverter();
+    }
+
+    internal class ThaiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Thai) || t == typeof(Thai?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "เอสเอฟ")
+            {
+                return Thai.เอสเอฟ;
+            }
+            throw new Exception("Cannot unmarshal type Thai");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Thai)untypedValue;
+            if (value == Thai.เอสเอฟ)
+            {
+                serializer.Serialize(writer, "เอสเอฟ");
+                return;
+            }
+            throw new Exception("Cannot marshal type Thai");
+        }
+
+        public static readonly ThaiConverter Singleton = new ThaiConverter();
+    }
+
+    internal class LocationConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Location) || t == typeof(Location?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Location.Empty;
+                case "5th Fl. Emporium":
+                    return Location.The5ThFlEmporium;
+            }
+            throw new Exception("Cannot unmarshal type Location");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Location)untypedValue;
+            switch (value)
+            {
+                case Location.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Location.The5ThFlEmporium:
+                    serializer.Serialize(writer, "5th Fl. Emporium");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Location");
+        }
+
+        public static readonly LocationConverter Singleton = new LocationConverter();
+    }
+
+    internal class TelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tel) || t == typeof(Tel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Tel.Empty;
+                case "02-268-8899":
+                    return Tel.The022688899;
+            }
+            throw new Exception("Cannot unmarshal type Tel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Tel)untypedValue;
+            switch (value)
+            {
+                case Tel.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Tel.The022688899:
+                    serializer.Serialize(writer, "02-268-8899");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Tel");
+        }
+
+        public static readonly TelConverter Singleton = new TelConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/7f568.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/7f568.json/default/QuickType.cs
new file mode 100644
index 0000000..24fcd0a
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/7f568.json/default/QuickType.cs
@@ -0,0 +1,198 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("comments", Required = Required.Always)]
+        public long Comments { get; set; }
+
+        [JsonProperty("comments_url", Required = Required.Always)]
+        public Uri CommentsUrl { get; set; }
+
+        [JsonProperty("commits_url", Required = Required.Always)]
+        public Uri CommitsUrl { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("description", Required = Required.AllowNull)]
+        public string? Description { get; set; }
+
+        [JsonProperty("files", Required = Required.Always)]
+        public Dictionary<string, File> Files { get; set; }
+
+        [JsonProperty("forks_url", Required = Required.Always)]
+        public Uri ForksUrl { get; set; }
+
+        [JsonProperty("git_pull_url", Required = Required.Always)]
+        public Uri GitPullUrl { get; set; }
+
+        [JsonProperty("git_push_url", Required = Required.Always)]
+        public Uri GitPushUrl { get; set; }
+
+        [JsonProperty("html_url", Required = Required.Always)]
+        public Uri HtmlUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("public", Required = Required.Always)]
+        public bool Public { get; set; }
+
+        [JsonProperty("truncated", Required = Required.Always)]
+        public bool Truncated { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.AllowNull)]
+        public object User { get; set; }
+    }
+
+    public partial record File
+    {
+        [JsonProperty("filename", Required = Required.Always)]
+        public string Filename { get; set; }
+
+        [JsonProperty("language", Required = Required.AllowNull)]
+        public Language? Language { get; set; }
+
+        [JsonProperty("raw_url", Required = Required.Always)]
+        public Uri RawUrl { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        public long Size { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public enum Language { Markdown };
+
+    public enum TypeEnum { TextPlain };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                LanguageConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class LanguageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Language) || t == typeof(Language?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Markdown")
+            {
+                return Language.Markdown;
+            }
+            throw new Exception("Cannot unmarshal type Language");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Language)untypedValue;
+            if (value == Language.Markdown)
+            {
+                serializer.Serialize(writer, "Markdown");
+                return;
+            }
+            throw new Exception("Cannot marshal type Language");
+        }
+
+        public static readonly LanguageConverter Singleton = new LanguageConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "text/plain")
+            {
+                return TypeEnum.TextPlain;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.TextPlain)
+            {
+                serializer.Serialize(writer, "text/plain");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/7fbfb.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/7fbfb.json/default/QuickType.cs
new file mode 100644
index 0000000..7781692
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/7fbfb.json/default/QuickType.cs
@@ -0,0 +1,266 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record PurpleTopLevel
+    {
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Date { get; set; }
+
+        [JsonProperty("decimal", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Decimal { get; set; }
+
+        [JsonProperty("indicator", Required = Required.Always)]
+        public Country Indicator { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record Country
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public Id Id { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public Value Value { get; set; }
+    }
+
+    public partial record FluffyTopLevel
+    {
+        [JsonProperty("page", Required = Required.Always)]
+        public long Page { get; set; }
+
+        [JsonProperty("pages", Required = Required.Always)]
+        public long Pages { get; set; }
+
+        [JsonProperty("per_page", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long PerPage { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+    }
+
+    public enum Id { Cn, NyGdpMktpCd };
+
+    public enum Value { China, GdpCurrentUs };
+
+    public partial struct TopLevelUnion
+    {
+        public FluffyTopLevel? FluffyTopLevel;
+        public PurpleTopLevel[]? PurpleTopLevelArray;
+
+        public static implicit operator TopLevelUnion(FluffyTopLevel FluffyTopLevel) => new TopLevelUnion { FluffyTopLevel = FluffyTopLevel };
+        public static implicit operator TopLevelUnion(PurpleTopLevel[] PurpleTopLevelArray) => new TopLevelUnion { PurpleTopLevelArray = PurpleTopLevelArray };
+    }
+
+    public class TopLevel
+    {
+        public static TopLevelUnion[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevelUnion[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevelUnion[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TopLevelUnionConverter.Singleton,
+                IdConverter.Singleton,
+                ValueConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TopLevelUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TopLevelUnion) || t == typeof(TopLevelUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FluffyTopLevel>(reader);
+                    return new TopLevelUnion { FluffyTopLevel = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<PurpleTopLevel[]>(reader);
+                    return new TopLevelUnion { PurpleTopLevelArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type TopLevelUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TopLevelUnion)untypedValue;
+            if (value.PurpleTopLevelArray != null)
+            {
+                serializer.Serialize(writer, value.PurpleTopLevelArray);
+                return;
+            }
+            if (value.FluffyTopLevel != null)
+            {
+                serializer.Serialize(writer, value.FluffyTopLevel);
+                return;
+            }
+            throw new Exception("Cannot marshal type TopLevelUnion");
+        }
+
+        public static readonly TopLevelUnionConverter Singleton = new TopLevelUnionConverter();
+    }
+
+    internal class IdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Id) || t == typeof(Id?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "CN":
+                    return Id.Cn;
+                case "NY.GDP.MKTP.CD":
+                    return Id.NyGdpMktpCd;
+            }
+            throw new Exception("Cannot unmarshal type Id");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Id)untypedValue;
+            switch (value)
+            {
+                case Id.Cn:
+                    serializer.Serialize(writer, "CN");
+                    return;
+                case Id.NyGdpMktpCd:
+                    serializer.Serialize(writer, "NY.GDP.MKTP.CD");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Id");
+        }
+
+        public static readonly IdConverter Singleton = new IdConverter();
+    }
+
+    internal class ValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Value) || t == typeof(Value?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "China":
+                    return Value.China;
+                case "GDP (current US$)":
+                    return Value.GdpCurrentUs;
+            }
+            throw new Exception("Cannot unmarshal type Value");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Value)untypedValue;
+            switch (value)
+            {
+                case Value.China:
+                    serializer.Serialize(writer, "China");
+                    return;
+                case Value.GdpCurrentUs:
+                    serializer.Serialize(writer, "GDP (current US$)");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Value");
+        }
+
+        public static readonly ValueConverter Singleton = new ValueConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/80aff.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/80aff.json/default/QuickType.cs
new file mode 100644
index 0000000..68c524d
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/80aff.json/default/QuickType.cs
@@ -0,0 +1,107 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("facets", Required = Required.Always)]
+        public Facets Facets { get; set; }
+
+        [JsonProperty("limit", Required = Required.Always)]
+        public long Limit { get; set; }
+
+        [JsonProperty("next", Required = Required.Always)]
+        public bool Next { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("previous", Required = Required.Always)]
+        public bool Previous { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Facets
+    {
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("items", Required = Required.Always)]
+        public long Items { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("parent", Required = Required.AllowNull)]
+        public long? Parent { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("uri", Required = Required.Always)]
+        public Uri Uri { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/82509.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/82509.json/default/QuickType.cs
new file mode 100644
index 0000000..af8986a
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/82509.json/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("origin", Required = Required.Always)]
+        public string Origin { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/8592b.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/8592b.json/default/QuickType.cs
new file mode 100644
index 0000000..bee9e3b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/8592b.json/default/QuickType.cs
@@ -0,0 +1,589 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public TopLevelData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public string Kind { get; set; }
+    }
+
+    public partial record TopLevelData
+    {
+        [JsonProperty("after", Required = Required.Always)]
+        public string After { get; set; }
+
+        [JsonProperty("before", Required = Required.AllowNull)]
+        public object Before { get; set; }
+
+        [JsonProperty("children", Required = Required.Always)]
+        public Child[] Children { get; set; }
+
+        [JsonProperty("modhash", Required = Required.Always)]
+        public string Modhash { get; set; }
+    }
+
+    public partial record Child
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public ChildData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    public partial record ChildData
+    {
+        [JsonProperty("approved_at_utc", Required = Required.AllowNull)]
+        public object ApprovedAtUtc { get; set; }
+
+        [JsonProperty("approved_by", Required = Required.AllowNull)]
+        public object ApprovedBy { get; set; }
+
+        [JsonProperty("archived", Required = Required.Always)]
+        public bool Archived { get; set; }
+
+        [JsonProperty("author", Required = Required.Always)]
+        public string Author { get; set; }
+
+        [JsonProperty("author_flair_css_class", Required = Required.AllowNull)]
+        public string? AuthorFlairCssClass { get; set; }
+
+        [JsonProperty("author_flair_text", Required = Required.AllowNull)]
+        public string? AuthorFlairText { get; set; }
+
+        [JsonProperty("banned_at_utc", Required = Required.AllowNull)]
+        public object BannedAtUtc { get; set; }
+
+        [JsonProperty("banned_by", Required = Required.AllowNull)]
+        public object BannedBy { get; set; }
+
+        [JsonProperty("brand_safe", Required = Required.Always)]
+        public bool BrandSafe { get; set; }
+
+        [JsonProperty("can_gild", Required = Required.Always)]
+        public bool CanGild { get; set; }
+
+        [JsonProperty("can_mod_post", Required = Required.Always)]
+        public bool CanModPost { get; set; }
+
+        [JsonProperty("clicked", Required = Required.Always)]
+        public bool Clicked { get; set; }
+
+        [JsonProperty("contest_mode", Required = Required.Always)]
+        public bool ContestMode { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public double Created { get; set; }
+
+        [JsonProperty("created_utc", Required = Required.Always)]
+        public double CreatedUtc { get; set; }
+
+        [JsonProperty("distinguished", Required = Required.AllowNull)]
+        public object Distinguished { get; set; }
+
+        [JsonProperty("domain", Required = Required.Always)]
+        public string Domain { get; set; }
+
+        [JsonProperty("downs", Required = Required.Always)]
+        public long Downs { get; set; }
+
+        [JsonProperty("edited", Required = Required.Always)]
+        public bool Edited { get; set; }
+
+        [JsonProperty("gilded", Required = Required.Always)]
+        public long Gilded { get; set; }
+
+        [JsonProperty("hidden", Required = Required.Always)]
+        public bool Hidden { get; set; }
+
+        [JsonProperty("hide_score", Required = Required.Always)]
+        public bool HideScore { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("is_self", Required = Required.Always)]
+        public bool IsSelf { get; set; }
+
+        [JsonProperty("is_video", Required = Required.Always)]
+        public bool IsVideo { get; set; }
+
+        [JsonProperty("likes", Required = Required.AllowNull)]
+        public object Likes { get; set; }
+
+        [JsonProperty("link_flair_css_class", Required = Required.Always)]
+        public string LinkFlairCssClass { get; set; }
+
+        [JsonProperty("link_flair_text", Required = Required.Always)]
+        public string LinkFlairText { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("media", Required = Required.AllowNull)]
+        public object Media { get; set; }
+
+        [JsonProperty("media_embed", Required = Required.Always)]
+        public MediaEmbed MediaEmbed { get; set; }
+
+        [JsonProperty("mod_reports", Required = Required.Always)]
+        public object[] ModReports { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("num_comments", Required = Required.Always)]
+        public long NumComments { get; set; }
+
+        [JsonProperty("num_reports", Required = Required.AllowNull)]
+        public object NumReports { get; set; }
+
+        [JsonProperty("over_18", Required = Required.Always)]
+        public bool Over18 { get; set; }
+
+        [JsonProperty("permalink", Required = Required.Always)]
+        public string Permalink { get; set; }
+
+        [JsonProperty("post_hint", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PostHint? PostHint { get; set; }
+
+        [JsonProperty("preview", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Preview? Preview { get; set; }
+
+        [JsonProperty("quarantine", Required = Required.Always)]
+        public bool Quarantine { get; set; }
+
+        [JsonProperty("removal_reason", Required = Required.AllowNull)]
+        public object RemovalReason { get; set; }
+
+        [JsonProperty("report_reasons", Required = Required.AllowNull)]
+        public object ReportReasons { get; set; }
+
+        [JsonProperty("saved", Required = Required.Always)]
+        public bool Saved { get; set; }
+
+        [JsonProperty("score", Required = Required.Always)]
+        public long Score { get; set; }
+
+        [JsonProperty("secure_media", Required = Required.AllowNull)]
+        public object SecureMedia { get; set; }
+
+        [JsonProperty("secure_media_embed", Required = Required.Always)]
+        public MediaEmbed SecureMediaEmbed { get; set; }
+
+        [JsonProperty("selftext", Required = Required.Always)]
+        public string Selftext { get; set; }
+
+        [JsonProperty("selftext_html", Required = Required.AllowNull)]
+        public string? SelftextHtml { get; set; }
+
+        [JsonProperty("spoiler", Required = Required.Always)]
+        public bool Spoiler { get; set; }
+
+        [JsonProperty("stickied", Required = Required.Always)]
+        public bool Stickied { get; set; }
+
+        [JsonProperty("subreddit", Required = Required.Always)]
+        public Subreddit Subreddit { get; set; }
+
+        [JsonProperty("subreddit_id", Required = Required.Always)]
+        public SubredditId SubredditId { get; set; }
+
+        [JsonProperty("subreddit_name_prefixed", Required = Required.Always)]
+        public SubredditNamePrefixed SubredditNamePrefixed { get; set; }
+
+        [JsonProperty("subreddit_type", Required = Required.Always)]
+        public SubredditType SubredditType { get; set; }
+
+        [JsonProperty("suggested_sort", Required = Required.Always)]
+        public SuggestedSort SuggestedSort { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public string Thumbnail { get; set; }
+
+        [JsonProperty("thumbnail_height", Required = Required.AllowNull)]
+        public long? ThumbnailHeight { get; set; }
+
+        [JsonProperty("thumbnail_width", Required = Required.AllowNull)]
+        public long? ThumbnailWidth { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ups", Required = Required.Always)]
+        public long Ups { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user_reports", Required = Required.Always)]
+        public object[] UserReports { get; set; }
+
+        [JsonProperty("view_count", Required = Required.AllowNull)]
+        public object ViewCount { get; set; }
+
+        [JsonProperty("visited", Required = Required.Always)]
+        public bool Visited { get; set; }
+    }
+
+    public partial record MediaEmbed
+    {
+    }
+
+    public partial record Preview
+    {
+        [JsonProperty("enabled", Required = Required.Always)]
+        public bool Enabled { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Image[] Images { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("resolutions", Required = Required.Always)]
+        public Source[] Resolutions { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public Source Source { get; set; }
+
+        [JsonProperty("variants", Required = Required.Always)]
+        public MediaEmbed Variants { get; set; }
+    }
+
+    public partial record Source
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public enum PostHint { Link };
+
+    public enum Subreddit { Science };
+
+    public enum SubredditId { T5Mouw };
+
+    public enum SubredditNamePrefixed { RScience };
+
+    public enum SubredditType { Public };
+
+    public enum SuggestedSort { Confidence, Qa };
+
+    public enum Kind { T3 };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                PostHintConverter.Singleton,
+                SubredditConverter.Singleton,
+                SubredditIdConverter.Singleton,
+                SubredditNamePrefixedConverter.Singleton,
+                SubredditTypeConverter.Singleton,
+                SuggestedSortConverter.Singleton,
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PostHintConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PostHint) || t == typeof(PostHint?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "link")
+            {
+                return PostHint.Link;
+            }
+            throw new Exception("Cannot unmarshal type PostHint");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PostHint)untypedValue;
+            if (value == PostHint.Link)
+            {
+                serializer.Serialize(writer, "link");
+                return;
+            }
+            throw new Exception("Cannot marshal type PostHint");
+        }
+
+        public static readonly PostHintConverter Singleton = new PostHintConverter();
+    }
+
+    internal class SubredditConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Subreddit) || t == typeof(Subreddit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "science")
+            {
+                return Subreddit.Science;
+            }
+            throw new Exception("Cannot unmarshal type Subreddit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Subreddit)untypedValue;
+            if (value == Subreddit.Science)
+            {
+                serializer.Serialize(writer, "science");
+                return;
+            }
+            throw new Exception("Cannot marshal type Subreddit");
+        }
+
+        public static readonly SubredditConverter Singleton = new SubredditConverter();
+    }
+
+    internal class SubredditIdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditId) || t == typeof(SubredditId?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t5_mouw")
+            {
+                return SubredditId.T5Mouw;
+            }
+            throw new Exception("Cannot unmarshal type SubredditId");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditId)untypedValue;
+            if (value == SubredditId.T5Mouw)
+            {
+                serializer.Serialize(writer, "t5_mouw");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditId");
+        }
+
+        public static readonly SubredditIdConverter Singleton = new SubredditIdConverter();
+    }
+
+    internal class SubredditNamePrefixedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditNamePrefixed) || t == typeof(SubredditNamePrefixed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "r/science")
+            {
+                return SubredditNamePrefixed.RScience;
+            }
+            throw new Exception("Cannot unmarshal type SubredditNamePrefixed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditNamePrefixed)untypedValue;
+            if (value == SubredditNamePrefixed.RScience)
+            {
+                serializer.Serialize(writer, "r/science");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditNamePrefixed");
+        }
+
+        public static readonly SubredditNamePrefixedConverter Singleton = new SubredditNamePrefixedConverter();
+    }
+
+    internal class SubredditTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditType) || t == typeof(SubredditType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "public")
+            {
+                return SubredditType.Public;
+            }
+            throw new Exception("Cannot unmarshal type SubredditType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditType)untypedValue;
+            if (value == SubredditType.Public)
+            {
+                serializer.Serialize(writer, "public");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditType");
+        }
+
+        public static readonly SubredditTypeConverter Singleton = new SubredditTypeConverter();
+    }
+
+    internal class SuggestedSortConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SuggestedSort) || t == typeof(SuggestedSort?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "confidence":
+                    return SuggestedSort.Confidence;
+                case "qa":
+                    return SuggestedSort.Qa;
+            }
+            throw new Exception("Cannot unmarshal type SuggestedSort");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SuggestedSort)untypedValue;
+            switch (value)
+            {
+                case SuggestedSort.Confidence:
+                    serializer.Serialize(writer, "confidence");
+                    return;
+                case SuggestedSort.Qa:
+                    serializer.Serialize(writer, "qa");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SuggestedSort");
+        }
+
+        public static readonly SuggestedSortConverter Singleton = new SuggestedSortConverter();
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t3")
+            {
+                return Kind.T3;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.T3)
+            {
+                serializer.Serialize(writer, "t3");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/88130.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/88130.json/default/QuickType.cs
new file mode 100644
index 0000000..1069da3
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/88130.json/default/QuickType.cs
@@ -0,0 +1,354 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/8a62c.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/8a62c.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/8a62c.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/908db.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/908db.json/default/QuickType.cs
new file mode 100644
index 0000000..cff1428
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/908db.json/default/QuickType.cs
@@ -0,0 +1,76 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("states", Required = Required.Always)]
+        public StateElement[] States { get; set; }
+    }
+
+    public partial record StateElement
+    {
+        [JsonProperty("state", Required = Required.Always)]
+        public StateState State { get; set; }
+    }
+
+    public partial record StateState
+    {
+        [JsonProperty("state_id", Required = Required.Always)]
+        public string StateId { get; set; }
+
+        [JsonProperty("state_name", Required = Required.Always)]
+        public string StateName { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/9617f.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/9617f.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/9617f.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/96f7c.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/96f7c.json/default/QuickType.cs
new file mode 100644
index 0000000..75b339f
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/96f7c.json/default/QuickType.cs
@@ -0,0 +1,76 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("git", Required = Required.Always)]
+        public string[] Git { get; set; }
+
+        [JsonProperty("github_services_sha", Required = Required.Always)]
+        public string GithubServicesSha { get; set; }
+
+        [JsonProperty("hooks", Required = Required.Always)]
+        public string[] Hooks { get; set; }
+
+        [JsonProperty("importer", Required = Required.Always)]
+        public string[] Importer { get; set; }
+
+        [JsonProperty("pages", Required = Required.Always)]
+        public string[] Pages { get; set; }
+
+        [JsonProperty("verifiable_password_authentication", Required = Required.Always)]
+        public bool VerifiablePasswordAuthentication { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/9847b.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/9847b.json/default/QuickType.cs
new file mode 100644
index 0000000..296e3a2
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/9847b.json/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/9929c.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/9929c.json/default/QuickType.cs
new file mode 100644
index 0000000..1069da3
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/9929c.json/default/QuickType.cs
@@ -0,0 +1,354 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/996bd.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/996bd.json/default/QuickType.cs
new file mode 100644
index 0000000..63fc502
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/996bd.json/default/QuickType.cs
@@ -0,0 +1,303 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identifiers", Required = Required.Always)]
+        public Identifier[] Identifiers { get; set; }
+
+        [JsonProperty("keywords", Required = Required.Always)]
+        public Keyword[] Keywords { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public Link[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("other_names", Required = Required.Always)]
+        public object[] OtherNames { get; set; }
+
+        [JsonProperty("superseded_by", Required = Required.AllowNull)]
+        public string? SupersededBy { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text[] Text { get; set; }
+    }
+
+    public partial record Identifier
+    {
+        [JsonProperty("identifier", Required = Required.Always)]
+        public string IdentifierIdentifier { get; set; }
+
+        [JsonProperty("scheme", Required = Required.Always)]
+        public Scheme Scheme { get; set; }
+    }
+
+    public partial record Link
+    {
+        [JsonProperty("note", Required = Required.Always)]
+        public string Note { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Text
+    {
+        [JsonProperty("media_type", Required = Required.Always)]
+        public MediaType MediaType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public Title Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum Scheme { Dep5, Spdx, Trove };
+
+    public enum Keyword { OsiApproved, Popular, Copyleft, International };
+
+    public enum MediaType { TextPlain, TextHtml };
+
+    public enum Title { PlainText, Html };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                SchemeConverter.Singleton,
+                KeywordConverter.Singleton,
+                MediaTypeConverter.Singleton,
+                TitleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class SchemeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scheme) || t == typeof(Scheme?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "DEP5":
+                    return Scheme.Dep5;
+                case "SPDX":
+                    return Scheme.Spdx;
+                case "Trove":
+                    return Scheme.Trove;
+            }
+            throw new Exception("Cannot unmarshal type Scheme");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Scheme)untypedValue;
+            switch (value)
+            {
+                case Scheme.Dep5:
+                    serializer.Serialize(writer, "DEP5");
+                    return;
+                case Scheme.Spdx:
+                    serializer.Serialize(writer, "SPDX");
+                    return;
+                case Scheme.Trove:
+                    serializer.Serialize(writer, "Trove");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Scheme");
+        }
+
+        public static readonly SchemeConverter Singleton = new SchemeConverter();
+    }
+
+    internal class KeywordConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Keyword) || t == typeof(Keyword?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "osi-approved":
+                    return Keyword.OsiApproved;
+                case "popular":
+                    return Keyword.Popular;
+                case "copyleft":
+                    return Keyword.Copyleft;
+                case "international":
+                    return Keyword.International;
+            }
+            throw new Exception("Cannot unmarshal type Keyword");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Keyword)untypedValue;
+            switch (value)
+            {
+                case Keyword.OsiApproved:
+                    serializer.Serialize(writer, "osi-approved");
+                    return;
+                case Keyword.Popular:
+                    serializer.Serialize(writer, "popular");
+                    return;
+                case Keyword.Copyleft:
+                    serializer.Serialize(writer, "copyleft");
+                    return;
+                case Keyword.International:
+                    serializer.Serialize(writer, "international");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Keyword");
+        }
+
+        public static readonly KeywordConverter Singleton = new KeywordConverter();
+    }
+
+    internal class MediaTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MediaType) || t == typeof(MediaType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "text/plain":
+                    return MediaType.TextPlain;
+                case "text/html":
+                    return MediaType.TextHtml;
+            }
+            throw new Exception("Cannot unmarshal type MediaType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (MediaType)untypedValue;
+            switch (value)
+            {
+                case MediaType.TextPlain:
+                    serializer.Serialize(writer, "text/plain");
+                    return;
+                case MediaType.TextHtml:
+                    serializer.Serialize(writer, "text/html");
+                    return;
+            }
+            throw new Exception("Cannot marshal type MediaType");
+        }
+
+        public static readonly MediaTypeConverter Singleton = new MediaTypeConverter();
+    }
+
+    internal class TitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Title) || t == typeof(Title?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Plain Text":
+                    return Title.PlainText;
+                case "HTML":
+                    return Title.Html;
+            }
+            throw new Exception("Cannot unmarshal type Title");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Title)untypedValue;
+            switch (value)
+            {
+                case Title.PlainText:
+                    serializer.Serialize(writer, "Plain Text");
+                    return;
+                case Title.Html:
+                    serializer.Serialize(writer, "HTML");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Title");
+        }
+
+        public static readonly TitleConverter Singleton = new TitleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/9a503.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/9a503.json/default/QuickType.cs
new file mode 100644
index 0000000..35c95e0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/9a503.json/default/QuickType.cs
@@ -0,0 +1,161 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identifiers", Required = Required.Always)]
+        public Identifier[] Identifiers { get; set; }
+
+        [JsonProperty("keywords", Required = Required.Always)]
+        public Keyword[] Keywords { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public Link[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("other_names", Required = Required.Always)]
+        public object[] OtherNames { get; set; }
+
+        [JsonProperty("superseded_by", Required = Required.AllowNull)]
+        public object SupersededBy { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text[] Text { get; set; }
+    }
+
+    public partial record Identifier
+    {
+        [JsonProperty("identifier", Required = Required.Always)]
+        public string IdentifierIdentifier { get; set; }
+
+        [JsonProperty("scheme", Required = Required.Always)]
+        public string Scheme { get; set; }
+    }
+
+    public partial record Link
+    {
+        [JsonProperty("note", Required = Required.Always)]
+        public string Note { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Text
+    {
+        [JsonProperty("media_type", Required = Required.Always)]
+        public string MediaType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum Keyword { Discouraged, Retired, OsiApproved };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                KeywordConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class KeywordConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Keyword) || t == typeof(Keyword?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "discouraged":
+                    return Keyword.Discouraged;
+                case "retired":
+                    return Keyword.Retired;
+                case "osi-approved":
+                    return Keyword.OsiApproved;
+            }
+            throw new Exception("Cannot unmarshal type Keyword");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Keyword)untypedValue;
+            switch (value)
+            {
+                case Keyword.Discouraged:
+                    serializer.Serialize(writer, "discouraged");
+                    return;
+                case Keyword.Retired:
+                    serializer.Serialize(writer, "retired");
+                    return;
+                case Keyword.OsiApproved:
+                    serializer.Serialize(writer, "osi-approved");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Keyword");
+        }
+
+        public static readonly KeywordConverter Singleton = new KeywordConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/9ac3b.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/9ac3b.json/default/QuickType.cs
new file mode 100644
index 0000000..6b37d31
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/9ac3b.json/default/QuickType.cs
@@ -0,0 +1,207 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("facets", Required = Required.Always)]
+        public Facets Facets { get; set; }
+
+        [JsonProperty("limit", Required = Required.Always)]
+        public long Limit { get; set; }
+
+        [JsonProperty("next", Required = Required.Always)]
+        public Uri Next { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("previous", Required = Required.Always)]
+        public bool Previous { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Facets
+    {
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("entity", Required = Required.Always)]
+        public string Entity { get; set; }
+
+        [JsonProperty("first_name", Required = Required.Always)]
+        public string FirstName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("last_name", Required = Required.Always)]
+        public string LastName { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("position", Required = Required.AllowNull)]
+        public string? Position { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("title", Required = Required.AllowNull)]
+        public Title? Title { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("uri", Required = Required.Always)]
+        public Uri Uri { get; set; }
+    }
+
+    public enum Status { Inactive, Active };
+
+    public enum Title { Mr, Ms };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                StatusConverter.Singleton,
+                TitleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class StatusConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Status) || t == typeof(Status?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "inactive":
+                    return Status.Inactive;
+                case "active":
+                    return Status.Active;
+            }
+            throw new Exception("Cannot unmarshal type Status");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Status)untypedValue;
+            switch (value)
+            {
+                case Status.Inactive:
+                    serializer.Serialize(writer, "inactive");
+                    return;
+                case Status.Active:
+                    serializer.Serialize(writer, "active");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Status");
+        }
+
+        public static readonly StatusConverter Singleton = new StatusConverter();
+    }
+
+    internal class TitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Title) || t == typeof(Title?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Mr":
+                    return Title.Mr;
+                case "Ms":
+                    return Title.Ms;
+            }
+            throw new Exception("Cannot unmarshal type Title");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Title)untypedValue;
+            switch (value)
+            {
+                case Title.Mr:
+                    serializer.Serialize(writer, "Mr");
+                    return;
+                case Title.Ms:
+                    serializer.Serialize(writer, "Ms");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Title");
+        }
+
+        public static readonly TitleConverter Singleton = new TitleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/9eed5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/9eed5.json/default/QuickType.cs
new file mode 100644
index 0000000..0fea188
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/9eed5.json/default/QuickType.cs
@@ -0,0 +1,156 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identifiers", Required = Required.Always)]
+        public Identifier[] Identifiers { get; set; }
+
+        [JsonProperty("keywords", Required = Required.Always)]
+        public Keyword[] Keywords { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public Link[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("other_names", Required = Required.Always)]
+        public object[] OtherNames { get; set; }
+
+        [JsonProperty("superseded_by", Required = Required.AllowNull)]
+        public object SupersededBy { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text[] Text { get; set; }
+    }
+
+    public partial record Identifier
+    {
+        [JsonProperty("identifier", Required = Required.Always)]
+        public string IdentifierIdentifier { get; set; }
+
+        [JsonProperty("scheme", Required = Required.Always)]
+        public string Scheme { get; set; }
+    }
+
+    public partial record Link
+    {
+        [JsonProperty("note", Required = Required.Always)]
+        public string Note { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Text
+    {
+        [JsonProperty("media_type", Required = Required.Always)]
+        public string MediaType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum Keyword { SpecialPurpose, OsiApproved };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                KeywordConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class KeywordConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Keyword) || t == typeof(Keyword?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "special-purpose":
+                    return Keyword.SpecialPurpose;
+                case "osi-approved":
+                    return Keyword.OsiApproved;
+            }
+            throw new Exception("Cannot unmarshal type Keyword");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Keyword)untypedValue;
+            switch (value)
+            {
+                case Keyword.SpecialPurpose:
+                    serializer.Serialize(writer, "special-purpose");
+                    return;
+                case Keyword.OsiApproved:
+                    serializer.Serialize(writer, "osi-approved");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Keyword");
+        }
+
+        public static readonly KeywordConverter Singleton = new KeywordConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/a0496.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/a0496.json/default/QuickType.cs
new file mode 100644
index 0000000..367529e
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/a0496.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        public string Code { get; set; }
+
+        [JsonProperty("column_names", Required = Required.Always)]
+        public string[] ColumnNames { get; set; }
+
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[][] Data { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("display_url", Required = Required.Always)]
+        public Uri DisplayUrl { get; set; }
+
+        [JsonProperty("errors", Required = Required.Always)]
+        public Errors Errors { get; set; }
+
+        [JsonProperty("frequency", Required = Required.Always)]
+        public string Frequency { get; set; }
+
+        [JsonProperty("from_date", Required = Required.Always)]
+        public DateTimeOffset FromDate { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("premium", Required = Required.Always)]
+        public bool Premium { get; set; }
+
+        [JsonProperty("source_code", Required = Required.Always)]
+        public string SourceCode { get; set; }
+
+        [JsonProperty("source_name", Required = Required.Always)]
+        public string SourceName { get; set; }
+
+        [JsonProperty("to_date", Required = Required.Always)]
+        public DateTimeOffset ToDate { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("urlize_name", Required = Required.Always)]
+        public string UrlizeName { get; set; }
+    }
+
+    public partial record Errors
+    {
+    }
+
+    public partial struct Datum
+    {
+        public DateTimeOffset? DateTime;
+        public double? Double;
+
+        public static implicit operator Datum(DateTimeOffset DateTime) => new Datum { DateTime = DateTime };
+        public static implicit operator Datum(double Double) => new Datum { Double = Double };
+        public bool IsNull => DateTime == null && Double == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DatumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DatumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Datum) || t == typeof(Datum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Datum { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Datum { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    DateTimeOffset dt;
+                    if (DateTimeOffset.TryParse(stringValue, out dt))
+                    {
+                        return new Datum { DateTime = dt };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type Datum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Datum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.DateTime != null)
+            {
+                serializer.Serialize(writer, value.DateTime.Value.ToString("o", System.Globalization.CultureInfo.InvariantCulture));
+                return;
+            }
+            throw new Exception("Cannot marshal type Datum");
+        }
+
+        public static readonly DatumConverter Singleton = new DatumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/a1eca.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/a1eca.json/default/QuickType.cs
new file mode 100644
index 0000000..1069da3
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/a1eca.json/default/QuickType.cs
@@ -0,0 +1,354 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/a3d8c.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/a3d8c.json/default/QuickType.cs
new file mode 100644
index 0000000..4f4c525
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/a3d8c.json/default/QuickType.cs
@@ -0,0 +1,456 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[][] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("view", Required = Required.Always)]
+        public View View { get; set; }
+    }
+
+    public partial record View
+    {
+        [JsonProperty("averageRating", Required = Required.Always)]
+        public long AverageRating { get; set; }
+
+        [JsonProperty("category", Required = Required.Always)]
+        public string Category { get; set; }
+
+        [JsonProperty("columns", Required = Required.Always)]
+        public Column[] Columns { get; set; }
+
+        [JsonProperty("createdAt", Required = Required.Always)]
+        public long CreatedAt { get; set; }
+
+        [JsonProperty("displayType", Required = Required.Always)]
+        public string DisplayType { get; set; }
+
+        [JsonProperty("downloadCount", Required = Required.Always)]
+        public long DownloadCount { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("grants", Required = Required.Always)]
+        public Grant[] Grants { get; set; }
+
+        [JsonProperty("hideFromCatalog", Required = Required.Always)]
+        public bool HideFromCatalog { get; set; }
+
+        [JsonProperty("hideFromDataJson", Required = Required.Always)]
+        public bool HideFromDataJson { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("indexUpdatedAt", Required = Required.Always)]
+        public long IndexUpdatedAt { get; set; }
+
+        [JsonProperty("license", Required = Required.Always)]
+        public License License { get; set; }
+
+        [JsonProperty("licenseId", Required = Required.Always)]
+        public string LicenseId { get; set; }
+
+        [JsonProperty("locale", Required = Required.Always)]
+        public string Locale { get; set; }
+
+        [JsonProperty("metadata", Required = Required.Always)]
+        public Metadata Metadata { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("newBackend", Required = Required.Always)]
+        public bool NewBackend { get; set; }
+
+        [JsonProperty("numberOfComments", Required = Required.Always)]
+        public long NumberOfComments { get; set; }
+
+        [JsonProperty("oid", Required = Required.Always)]
+        public long Oid { get; set; }
+
+        [JsonProperty("owner", Required = Required.Always)]
+        public Owner Owner { get; set; }
+
+        [JsonProperty("provenance", Required = Required.Always)]
+        public string Provenance { get; set; }
+
+        [JsonProperty("publicationAppendEnabled", Required = Required.Always)]
+        public bool PublicationAppendEnabled { get; set; }
+
+        [JsonProperty("publicationDate", Required = Required.Always)]
+        public long PublicationDate { get; set; }
+
+        [JsonProperty("publicationGroup", Required = Required.Always)]
+        public long PublicationGroup { get; set; }
+
+        [JsonProperty("publicationStage", Required = Required.Always)]
+        public string PublicationStage { get; set; }
+
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public string[] Rights { get; set; }
+
+        [JsonProperty("rowClass", Required = Required.Always)]
+        public string RowClass { get; set; }
+
+        [JsonProperty("rowsUpdatedAt", Required = Required.Always)]
+        public long RowsUpdatedAt { get; set; }
+
+        [JsonProperty("rowsUpdatedBy", Required = Required.Always)]
+        public string RowsUpdatedBy { get; set; }
+
+        [JsonProperty("tableAuthor", Required = Required.Always)]
+        public Owner TableAuthor { get; set; }
+
+        [JsonProperty("tableId", Required = Required.Always)]
+        public long TableId { get; set; }
+
+        [JsonProperty("totalTimesRated", Required = Required.Always)]
+        public long TotalTimesRated { get; set; }
+
+        [JsonProperty("viewCount", Required = Required.Always)]
+        public long ViewCount { get; set; }
+
+        [JsonProperty("viewLastModified", Required = Required.Always)]
+        public long ViewLastModified { get; set; }
+
+        [JsonProperty("viewType", Required = Required.Always)]
+        public string ViewType { get; set; }
+    }
+
+    public partial record Column
+    {
+        [JsonProperty("cachedContents", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public CachedContents? CachedContents { get; set; }
+
+        [JsonProperty("dataTypeName", Required = Required.Always)]
+        public TypeName DataTypeName { get; set; }
+
+        [JsonProperty("fieldName", Required = Required.Always)]
+        public string FieldName { get; set; }
+
+        [JsonProperty("flags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Flags { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public Query Format { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("position", Required = Required.Always)]
+        public long Position { get; set; }
+
+        [JsonProperty("renderTypeName", Required = Required.Always)]
+        public TypeName RenderTypeName { get; set; }
+
+        [JsonProperty("tableColumnId", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? TableColumnId { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Width { get; set; }
+    }
+
+    public partial record CachedContents
+    {
+        [JsonProperty("average", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Average { get; set; }
+
+        [JsonProperty("largest", Required = Required.Always)]
+        public string Largest { get; set; }
+
+        [JsonProperty("non_null", Required = Required.Always)]
+        public long NonNull { get; set; }
+
+        [JsonProperty("null", Required = Required.Always)]
+        public long Null { get; set; }
+
+        [JsonProperty("smallest", Required = Required.Always)]
+        public string Smallest { get; set; }
+
+        [JsonProperty("sum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Sum { get; set; }
+
+        [JsonProperty("top", Required = Required.Always)]
+        public Top[] Top { get; set; }
+    }
+
+    public partial record Top
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public string Item { get; set; }
+    }
+
+    public partial record Query
+    {
+    }
+
+    public partial record Grant
+    {
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("inherited", Required = Required.Always)]
+        public bool Inherited { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record License
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record Metadata
+    {
+        [JsonProperty("availableDisplayTypes", Required = Required.Always)]
+        public string[] AvailableDisplayTypes { get; set; }
+
+        [JsonProperty("rdfClass", Required = Required.Always)]
+        public string RdfClass { get; set; }
+
+        [JsonProperty("rdfSubject", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long RdfSubject { get; set; }
+
+        [JsonProperty("renderTypeConfig", Required = Required.Always)]
+        public RenderTypeConfig RenderTypeConfig { get; set; }
+
+        [JsonProperty("rowIdentifier", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long RowIdentifier { get; set; }
+    }
+
+    public partial record RenderTypeConfig
+    {
+        [JsonProperty("visible", Required = Required.Always)]
+        public Visible Visible { get; set; }
+    }
+
+    public partial record Visible
+    {
+        [JsonProperty("table", Required = Required.Always)]
+        public bool Table { get; set; }
+    }
+
+    public partial record Owner
+    {
+        [JsonProperty("displayName", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("screenName", Required = Required.Always)]
+        public string ScreenName { get; set; }
+    }
+
+    public enum TypeName { MetaData, Number, Text };
+
+    public partial struct Datum
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Datum(long Integer) => new Datum { Integer = Integer };
+        public static implicit operator Datum(string String) => new Datum { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DatumConverter.Singleton,
+                TypeNameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DatumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Datum) || t == typeof(Datum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Datum { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Datum { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Datum { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Datum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Datum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Datum");
+        }
+
+        public static readonly DatumConverter Singleton = new DatumConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class TypeNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeName) || t == typeof(TypeName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "meta_data":
+                    return TypeName.MetaData;
+                case "number":
+                    return TypeName.Number;
+                case "text":
+                    return TypeName.Text;
+            }
+            throw new Exception("Cannot unmarshal type TypeName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeName)untypedValue;
+            switch (value)
+            {
+                case TypeName.MetaData:
+                    serializer.Serialize(writer, "meta_data");
+                    return;
+                case TypeName.Number:
+                    serializer.Serialize(writer, "number");
+                    return;
+                case TypeName.Text:
+                    serializer.Serialize(writer, "text");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeName");
+        }
+
+        public static readonly TypeNameConverter Singleton = new TypeNameConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/a45b0.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/a45b0.json/default/QuickType.cs
new file mode 100644
index 0000000..80f8e48
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/a45b0.json/default/QuickType.cs
@@ -0,0 +1,113 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("age", Required = Required.Always)]
+        public long Age { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("females", Required = Required.Always)]
+        public long Females { get; set; }
+
+        [JsonProperty("males", Required = Required.Always)]
+        public long Males { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+
+        [JsonProperty("year", Required = Required.Always)]
+        public long Year { get; set; }
+    }
+
+    public enum Country { UnitedStates };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CountryConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CountryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Country) || t == typeof(Country?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "United States")
+            {
+                return Country.UnitedStates;
+            }
+            throw new Exception("Cannot unmarshal type Country");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Country)untypedValue;
+            if (value == Country.UnitedStates)
+            {
+                serializer.Serialize(writer, "United States");
+                return;
+            }
+            throw new Exception("Cannot marshal type Country");
+        }
+
+        public static readonly CountryConverter Singleton = new CountryConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/a71df.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/a71df.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/a71df.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/a9691.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/a9691.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/a9691.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/ab0d1.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/ab0d1.json/default/QuickType.cs
new file mode 100644
index 0000000..80f8e48
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/ab0d1.json/default/QuickType.cs
@@ -0,0 +1,113 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("age", Required = Required.Always)]
+        public long Age { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("females", Required = Required.Always)]
+        public long Females { get; set; }
+
+        [JsonProperty("males", Required = Required.Always)]
+        public long Males { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+
+        [JsonProperty("year", Required = Required.Always)]
+        public long Year { get; set; }
+    }
+
+    public enum Country { UnitedStates };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CountryConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CountryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Country) || t == typeof(Country?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "United States")
+            {
+                return Country.UnitedStates;
+            }
+            throw new Exception("Cannot unmarshal type Country");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Country)untypedValue;
+            if (value == Country.UnitedStates)
+            {
+                serializer.Serialize(writer, "United States");
+                return;
+            }
+            throw new Exception("Cannot marshal type Country");
+        }
+
+        public static readonly CountryConverter Singleton = new CountryConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/abb4b.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/abb4b.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/abb4b.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/ac944.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/ac944.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/ac944.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/ad8be.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/ad8be.json/default/QuickType.cs
new file mode 100644
index 0000000..911779e
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/ad8be.json/default/QuickType.cs
@@ -0,0 +1,426 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("identifiers", Required = Required.Always)]
+        public Identifier[] Identifiers { get; set; }
+
+        [JsonProperty("keywords", Required = Required.Always)]
+        public Keyword[] Keywords { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public Link[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("other_names", Required = Required.Always)]
+        public OtherName[] OtherNames { get; set; }
+
+        [JsonProperty("superseded_by", Required = Required.AllowNull)]
+        public string? SupersededBy { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text[] Text { get; set; }
+    }
+
+    public partial record Identifier
+    {
+        [JsonProperty("identifier", Required = Required.Always)]
+        public string IdentifierIdentifier { get; set; }
+
+        [JsonProperty("scheme", Required = Required.Always)]
+        public Scheme Scheme { get; set; }
+    }
+
+    public partial record Link
+    {
+        [JsonProperty("note", Required = Required.Always)]
+        public Note Note { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record OtherName
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("note", Required = Required.AllowNull)]
+        public string? Note { get; set; }
+    }
+
+    public partial record Text
+    {
+        [JsonProperty("media_type", Required = Required.Always)]
+        public MediaType MediaType { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public Title Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum Scheme { Spdx, Trove, Dep5 };
+
+    public enum Keyword { OsiApproved, Discouraged, Redundant, Miscellaneous, NonReusable, Obsolete, Popular, Permissive, Retired, SpecialPurpose, Copyleft, International };
+
+    public enum Note { OsiPage, TlDrLegal, WikipediaPage, NoteWikipediaPage, MozillaPage, OsetFoundationPage };
+
+    public enum MediaType { TextHtml, TextPlain, ApplicationPdf };
+
+    public enum Title { Html, PlainText, Pdf };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                SchemeConverter.Singleton,
+                KeywordConverter.Singleton,
+                NoteConverter.Singleton,
+                MediaTypeConverter.Singleton,
+                TitleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class SchemeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scheme) || t == typeof(Scheme?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "SPDX":
+                    return Scheme.Spdx;
+                case "Trove":
+                    return Scheme.Trove;
+                case "DEP5":
+                    return Scheme.Dep5;
+            }
+            throw new Exception("Cannot unmarshal type Scheme");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Scheme)untypedValue;
+            switch (value)
+            {
+                case Scheme.Spdx:
+                    serializer.Serialize(writer, "SPDX");
+                    return;
+                case Scheme.Trove:
+                    serializer.Serialize(writer, "Trove");
+                    return;
+                case Scheme.Dep5:
+                    serializer.Serialize(writer, "DEP5");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Scheme");
+        }
+
+        public static readonly SchemeConverter Singleton = new SchemeConverter();
+    }
+
+    internal class KeywordConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Keyword) || t == typeof(Keyword?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "osi-approved":
+                    return Keyword.OsiApproved;
+                case "discouraged":
+                    return Keyword.Discouraged;
+                case "redundant":
+                    return Keyword.Redundant;
+                case "miscellaneous":
+                    return Keyword.Miscellaneous;
+                case "non-reusable":
+                    return Keyword.NonReusable;
+                case "obsolete":
+                    return Keyword.Obsolete;
+                case "popular":
+                    return Keyword.Popular;
+                case "permissive":
+                    return Keyword.Permissive;
+                case "retired":
+                    return Keyword.Retired;
+                case "special-purpose":
+                    return Keyword.SpecialPurpose;
+                case "copyleft":
+                    return Keyword.Copyleft;
+                case "international":
+                    return Keyword.International;
+            }
+            throw new Exception("Cannot unmarshal type Keyword");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Keyword)untypedValue;
+            switch (value)
+            {
+                case Keyword.OsiApproved:
+                    serializer.Serialize(writer, "osi-approved");
+                    return;
+                case Keyword.Discouraged:
+                    serializer.Serialize(writer, "discouraged");
+                    return;
+                case Keyword.Redundant:
+                    serializer.Serialize(writer, "redundant");
+                    return;
+                case Keyword.Miscellaneous:
+                    serializer.Serialize(writer, "miscellaneous");
+                    return;
+                case Keyword.NonReusable:
+                    serializer.Serialize(writer, "non-reusable");
+                    return;
+                case Keyword.Obsolete:
+                    serializer.Serialize(writer, "obsolete");
+                    return;
+                case Keyword.Popular:
+                    serializer.Serialize(writer, "popular");
+                    return;
+                case Keyword.Permissive:
+                    serializer.Serialize(writer, "permissive");
+                    return;
+                case Keyword.Retired:
+                    serializer.Serialize(writer, "retired");
+                    return;
+                case Keyword.SpecialPurpose:
+                    serializer.Serialize(writer, "special-purpose");
+                    return;
+                case Keyword.Copyleft:
+                    serializer.Serialize(writer, "copyleft");
+                    return;
+                case Keyword.International:
+                    serializer.Serialize(writer, "international");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Keyword");
+        }
+
+        public static readonly KeywordConverter Singleton = new KeywordConverter();
+    }
+
+    internal class NoteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Note) || t == typeof(Note?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "OSI Page":
+                    return Note.OsiPage;
+                case "tl;dr legal":
+                    return Note.TlDrLegal;
+                case "Wikipedia page":
+                    return Note.WikipediaPage;
+                case "Wikipedia Page":
+                    return Note.NoteWikipediaPage;
+                case "Mozilla Page":
+                    return Note.MozillaPage;
+                case "OSET Foundation Page":
+                    return Note.OsetFoundationPage;
+            }
+            throw new Exception("Cannot unmarshal type Note");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Note)untypedValue;
+            switch (value)
+            {
+                case Note.OsiPage:
+                    serializer.Serialize(writer, "OSI Page");
+                    return;
+                case Note.TlDrLegal:
+                    serializer.Serialize(writer, "tl;dr legal");
+                    return;
+                case Note.WikipediaPage:
+                    serializer.Serialize(writer, "Wikipedia page");
+                    return;
+                case Note.NoteWikipediaPage:
+                    serializer.Serialize(writer, "Wikipedia Page");
+                    return;
+                case Note.MozillaPage:
+                    serializer.Serialize(writer, "Mozilla Page");
+                    return;
+                case Note.OsetFoundationPage:
+                    serializer.Serialize(writer, "OSET Foundation Page");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Note");
+        }
+
+        public static readonly NoteConverter Singleton = new NoteConverter();
+    }
+
+    internal class MediaTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MediaType) || t == typeof(MediaType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "text/html":
+                    return MediaType.TextHtml;
+                case "text/plain":
+                    return MediaType.TextPlain;
+                case "application/pdf":
+                    return MediaType.ApplicationPdf;
+            }
+            throw new Exception("Cannot unmarshal type MediaType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (MediaType)untypedValue;
+            switch (value)
+            {
+                case MediaType.TextHtml:
+                    serializer.Serialize(writer, "text/html");
+                    return;
+                case MediaType.TextPlain:
+                    serializer.Serialize(writer, "text/plain");
+                    return;
+                case MediaType.ApplicationPdf:
+                    serializer.Serialize(writer, "application/pdf");
+                    return;
+            }
+            throw new Exception("Cannot marshal type MediaType");
+        }
+
+        public static readonly MediaTypeConverter Singleton = new MediaTypeConverter();
+    }
+
+    internal class TitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Title) || t == typeof(Title?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "HTML":
+                    return Title.Html;
+                case "Plain Text":
+                    return Title.PlainText;
+                case "PDF":
+                    return Title.Pdf;
+            }
+            throw new Exception("Cannot unmarshal type Title");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Title)untypedValue;
+            switch (value)
+            {
+                case Title.Html:
+                    serializer.Serialize(writer, "HTML");
+                    return;
+                case Title.PlainText:
+                    serializer.Serialize(writer, "Plain Text");
+                    return;
+                case Title.Pdf:
+                    serializer.Serialize(writer, "PDF");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Title");
+        }
+
+        public static readonly TitleConverter Singleton = new TitleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/ae7f0.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/ae7f0.json/default/QuickType.cs
new file mode 100644
index 0000000..eac9587
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/ae7f0.json/default/QuickType.cs
@@ -0,0 +1,497 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public TopLevelData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public string Kind { get; set; }
+    }
+
+    public partial record TopLevelData
+    {
+        [JsonProperty("after", Required = Required.Always)]
+        public string After { get; set; }
+
+        [JsonProperty("before", Required = Required.AllowNull)]
+        public object Before { get; set; }
+
+        [JsonProperty("children", Required = Required.Always)]
+        public Child[] Children { get; set; }
+
+        [JsonProperty("modhash", Required = Required.Always)]
+        public string Modhash { get; set; }
+    }
+
+    public partial record Child
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public ChildData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    public partial record ChildData
+    {
+        [JsonProperty("approved_at_utc", Required = Required.AllowNull)]
+        public object ApprovedAtUtc { get; set; }
+
+        [JsonProperty("approved_by", Required = Required.AllowNull)]
+        public object ApprovedBy { get; set; }
+
+        [JsonProperty("archived", Required = Required.Always)]
+        public bool Archived { get; set; }
+
+        [JsonProperty("author", Required = Required.Always)]
+        public string Author { get; set; }
+
+        [JsonProperty("author_flair_css_class", Required = Required.AllowNull)]
+        public object AuthorFlairCssClass { get; set; }
+
+        [JsonProperty("author_flair_text", Required = Required.AllowNull)]
+        public object AuthorFlairText { get; set; }
+
+        [JsonProperty("banned_at_utc", Required = Required.AllowNull)]
+        public object BannedAtUtc { get; set; }
+
+        [JsonProperty("banned_by", Required = Required.AllowNull)]
+        public object BannedBy { get; set; }
+
+        [JsonProperty("brand_safe", Required = Required.Always)]
+        public bool BrandSafe { get; set; }
+
+        [JsonProperty("can_gild", Required = Required.Always)]
+        public bool CanGild { get; set; }
+
+        [JsonProperty("can_mod_post", Required = Required.Always)]
+        public bool CanModPost { get; set; }
+
+        [JsonProperty("clicked", Required = Required.Always)]
+        public bool Clicked { get; set; }
+
+        [JsonProperty("contest_mode", Required = Required.Always)]
+        public bool ContestMode { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public double Created { get; set; }
+
+        [JsonProperty("created_utc", Required = Required.Always)]
+        public double CreatedUtc { get; set; }
+
+        [JsonProperty("distinguished", Required = Required.AllowNull)]
+        public object Distinguished { get; set; }
+
+        [JsonProperty("domain", Required = Required.Always)]
+        public Domain Domain { get; set; }
+
+        [JsonProperty("downs", Required = Required.Always)]
+        public long Downs { get; set; }
+
+        [JsonProperty("edited", Required = Required.Always)]
+        public bool Edited { get; set; }
+
+        [JsonProperty("gilded", Required = Required.Always)]
+        public long Gilded { get; set; }
+
+        [JsonProperty("hidden", Required = Required.Always)]
+        public bool Hidden { get; set; }
+
+        [JsonProperty("hide_score", Required = Required.Always)]
+        public bool HideScore { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("is_self", Required = Required.Always)]
+        public bool IsSelf { get; set; }
+
+        [JsonProperty("is_video", Required = Required.Always)]
+        public bool IsVideo { get; set; }
+
+        [JsonProperty("likes", Required = Required.AllowNull)]
+        public object Likes { get; set; }
+
+        [JsonProperty("link_flair_css_class", Required = Required.AllowNull)]
+        public string? LinkFlairCssClass { get; set; }
+
+        [JsonProperty("link_flair_text", Required = Required.AllowNull)]
+        public string? LinkFlairText { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("media", Required = Required.AllowNull)]
+        public object Media { get; set; }
+
+        [JsonProperty("media_embed", Required = Required.Always)]
+        public MediaEmbed MediaEmbed { get; set; }
+
+        [JsonProperty("mod_reports", Required = Required.Always)]
+        public object[] ModReports { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("num_comments", Required = Required.Always)]
+        public long NumComments { get; set; }
+
+        [JsonProperty("num_reports", Required = Required.AllowNull)]
+        public object NumReports { get; set; }
+
+        [JsonProperty("over_18", Required = Required.Always)]
+        public bool Over18 { get; set; }
+
+        [JsonProperty("permalink", Required = Required.Always)]
+        public string Permalink { get; set; }
+
+        [JsonProperty("quarantine", Required = Required.Always)]
+        public bool Quarantine { get; set; }
+
+        [JsonProperty("removal_reason", Required = Required.AllowNull)]
+        public object RemovalReason { get; set; }
+
+        [JsonProperty("report_reasons", Required = Required.AllowNull)]
+        public object ReportReasons { get; set; }
+
+        [JsonProperty("saved", Required = Required.Always)]
+        public bool Saved { get; set; }
+
+        [JsonProperty("score", Required = Required.Always)]
+        public long Score { get; set; }
+
+        [JsonProperty("secure_media", Required = Required.AllowNull)]
+        public object SecureMedia { get; set; }
+
+        [JsonProperty("secure_media_embed", Required = Required.Always)]
+        public MediaEmbed SecureMediaEmbed { get; set; }
+
+        [JsonProperty("selftext", Required = Required.Always)]
+        public string Selftext { get; set; }
+
+        [JsonProperty("selftext_html", Required = Required.AllowNull)]
+        public object SelftextHtml { get; set; }
+
+        [JsonProperty("spoiler", Required = Required.Always)]
+        public bool Spoiler { get; set; }
+
+        [JsonProperty("stickied", Required = Required.Always)]
+        public bool Stickied { get; set; }
+
+        [JsonProperty("subreddit", Required = Required.Always)]
+        public Subreddit Subreddit { get; set; }
+
+        [JsonProperty("subreddit_id", Required = Required.Always)]
+        public SubredditId SubredditId { get; set; }
+
+        [JsonProperty("subreddit_name_prefixed", Required = Required.Always)]
+        public SubredditNamePrefixed SubredditNamePrefixed { get; set; }
+
+        [JsonProperty("subreddit_type", Required = Required.Always)]
+        public SubredditType SubredditType { get; set; }
+
+        [JsonProperty("suggested_sort", Required = Required.AllowNull)]
+        public object SuggestedSort { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public string Thumbnail { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ups", Required = Required.Always)]
+        public long Ups { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user_reports", Required = Required.Always)]
+        public object[] UserReports { get; set; }
+
+        [JsonProperty("view_count", Required = Required.AllowNull)]
+        public object ViewCount { get; set; }
+
+        [JsonProperty("visited", Required = Required.Always)]
+        public bool Visited { get; set; }
+    }
+
+    public partial record MediaEmbed
+    {
+    }
+
+    public enum Domain { SelfAskReddit };
+
+    public enum Subreddit { AskReddit };
+
+    public enum SubredditId { T52Qh1I };
+
+    public enum SubredditNamePrefixed { RAskReddit };
+
+    public enum SubredditType { Public };
+
+    public enum Kind { T3 };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DomainConverter.Singleton,
+                SubredditConverter.Singleton,
+                SubredditIdConverter.Singleton,
+                SubredditNamePrefixedConverter.Singleton,
+                SubredditTypeConverter.Singleton,
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DomainConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Domain) || t == typeof(Domain?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "self.AskReddit")
+            {
+                return Domain.SelfAskReddit;
+            }
+            throw new Exception("Cannot unmarshal type Domain");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Domain)untypedValue;
+            if (value == Domain.SelfAskReddit)
+            {
+                serializer.Serialize(writer, "self.AskReddit");
+                return;
+            }
+            throw new Exception("Cannot marshal type Domain");
+        }
+
+        public static readonly DomainConverter Singleton = new DomainConverter();
+    }
+
+    internal class SubredditConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Subreddit) || t == typeof(Subreddit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "AskReddit")
+            {
+                return Subreddit.AskReddit;
+            }
+            throw new Exception("Cannot unmarshal type Subreddit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Subreddit)untypedValue;
+            if (value == Subreddit.AskReddit)
+            {
+                serializer.Serialize(writer, "AskReddit");
+                return;
+            }
+            throw new Exception("Cannot marshal type Subreddit");
+        }
+
+        public static readonly SubredditConverter Singleton = new SubredditConverter();
+    }
+
+    internal class SubredditIdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditId) || t == typeof(SubredditId?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t5_2qh1i")
+            {
+                return SubredditId.T52Qh1I;
+            }
+            throw new Exception("Cannot unmarshal type SubredditId");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditId)untypedValue;
+            if (value == SubredditId.T52Qh1I)
+            {
+                serializer.Serialize(writer, "t5_2qh1i");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditId");
+        }
+
+        public static readonly SubredditIdConverter Singleton = new SubredditIdConverter();
+    }
+
+    internal class SubredditNamePrefixedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditNamePrefixed) || t == typeof(SubredditNamePrefixed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "r/AskReddit")
+            {
+                return SubredditNamePrefixed.RAskReddit;
+            }
+            throw new Exception("Cannot unmarshal type SubredditNamePrefixed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditNamePrefixed)untypedValue;
+            if (value == SubredditNamePrefixed.RAskReddit)
+            {
+                serializer.Serialize(writer, "r/AskReddit");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditNamePrefixed");
+        }
+
+        public static readonly SubredditNamePrefixedConverter Singleton = new SubredditNamePrefixedConverter();
+    }
+
+    internal class SubredditTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditType) || t == typeof(SubredditType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "public")
+            {
+                return SubredditType.Public;
+            }
+            throw new Exception("Cannot unmarshal type SubredditType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditType)untypedValue;
+            if (value == SubredditType.Public)
+            {
+                serializer.Serialize(writer, "public");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditType");
+        }
+
+        public static readonly SubredditTypeConverter Singleton = new SubredditTypeConverter();
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t3")
+            {
+                return Kind.T3;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.T3)
+            {
+                serializer.Serialize(writer, "t3");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/ae9ca.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/ae9ca.json/default/QuickType.cs
new file mode 100644
index 0000000..33468b6
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/ae9ca.json/default/QuickType.cs
@@ -0,0 +1,367 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("features", Required = Required.Always)]
+        public Feature[] Features { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Feature
+    {
+        [JsonProperty("geometry", Required = Required.Always)]
+        public Geometry Geometry { get; set; }
+
+        [JsonProperty("properties", Required = Required.Always)]
+        public Properties Properties { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public FeatureType Type { get; set; }
+    }
+
+    public partial record Geometry
+    {
+        [JsonProperty("coordinates", Required = Required.Always)]
+        public double[] Coordinates { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public GeometryType Type { get; set; }
+    }
+
+    public partial record Properties
+    {
+        [JsonProperty("Area", Required = Required.Always)]
+        public string Area { get; set; }
+
+        [JsonProperty("Central Asset ID", Required = Required.Always)]
+        public string CentralAssetId { get; set; }
+
+        [JsonProperty("Class", Required = Required.Always)]
+        public Class Class { get; set; }
+
+        [JsonProperty("Feature Location", Required = Required.Always)]
+        public string FeatureLocation { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("Maintaining Authority", Required = Required.Always)]
+        public MaintainingAuthority MaintainingAuthority { get; set; }
+
+        [JsonProperty("Number", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Number { get; set; }
+
+        [JsonProperty("Site Name", Required = Required.Always)]
+        public string SiteName { get; set; }
+
+        [JsonProperty("Ward", Required = Required.Always)]
+        public Ward Ward { get; set; }
+    }
+
+    public enum GeometryType { Point };
+
+    public enum Class { NoCodeAllocated, OsDistrict, OsNeighbourhood, OsRegional };
+
+    public enum MaintainingAuthority { CityOfBallarat };
+
+    public enum Ward { South, North, Central };
+
+    public enum FeatureType { Feature };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                GeometryTypeConverter.Singleton,
+                ClassConverter.Singleton,
+                MaintainingAuthorityConverter.Singleton,
+                WardConverter.Singleton,
+                FeatureTypeConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class GeometryTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GeometryType) || t == typeof(GeometryType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Point")
+            {
+                return GeometryType.Point;
+            }
+            throw new Exception("Cannot unmarshal type GeometryType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GeometryType)untypedValue;
+            if (value == GeometryType.Point)
+            {
+                serializer.Serialize(writer, "Point");
+                return;
+            }
+            throw new Exception("Cannot marshal type GeometryType");
+        }
+
+        public static readonly GeometryTypeConverter Singleton = new GeometryTypeConverter();
+    }
+
+    internal class ClassConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Class) || t == typeof(Class?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "No Code Allocated":
+                    return Class.NoCodeAllocated;
+                case "OS-District":
+                    return Class.OsDistrict;
+                case "OS-Neighbourhood":
+                    return Class.OsNeighbourhood;
+                case "OS-Regional":
+                    return Class.OsRegional;
+            }
+            throw new Exception("Cannot unmarshal type Class");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Class)untypedValue;
+            switch (value)
+            {
+                case Class.NoCodeAllocated:
+                    serializer.Serialize(writer, "No Code Allocated");
+                    return;
+                case Class.OsDistrict:
+                    serializer.Serialize(writer, "OS-District");
+                    return;
+                case Class.OsNeighbourhood:
+                    serializer.Serialize(writer, "OS-Neighbourhood");
+                    return;
+                case Class.OsRegional:
+                    serializer.Serialize(writer, "OS-Regional");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Class");
+        }
+
+        public static readonly ClassConverter Singleton = new ClassConverter();
+    }
+
+    internal class MaintainingAuthorityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MaintainingAuthority) || t == typeof(MaintainingAuthority?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "City of Ballarat")
+            {
+                return MaintainingAuthority.CityOfBallarat;
+            }
+            throw new Exception("Cannot unmarshal type MaintainingAuthority");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (MaintainingAuthority)untypedValue;
+            if (value == MaintainingAuthority.CityOfBallarat)
+            {
+                serializer.Serialize(writer, "City of Ballarat");
+                return;
+            }
+            throw new Exception("Cannot marshal type MaintainingAuthority");
+        }
+
+        public static readonly MaintainingAuthorityConverter Singleton = new MaintainingAuthorityConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class WardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ward) || t == typeof(Ward?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "South":
+                    return Ward.South;
+                case "North":
+                    return Ward.North;
+                case "Central":
+                    return Ward.Central;
+            }
+            throw new Exception("Cannot unmarshal type Ward");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Ward)untypedValue;
+            switch (value)
+            {
+                case Ward.South:
+                    serializer.Serialize(writer, "South");
+                    return;
+                case Ward.North:
+                    serializer.Serialize(writer, "North");
+                    return;
+                case Ward.Central:
+                    serializer.Serialize(writer, "Central");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Ward");
+        }
+
+        public static readonly WardConverter Singleton = new WardConverter();
+    }
+
+    internal class FeatureTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FeatureType) || t == typeof(FeatureType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Feature")
+            {
+                return FeatureType.Feature;
+            }
+            throw new Exception("Cannot unmarshal type FeatureType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FeatureType)untypedValue;
+            if (value == FeatureType.Feature)
+            {
+                serializer.Serialize(writer, "Feature");
+                return;
+            }
+            throw new Exception("Cannot marshal type FeatureType");
+        }
+
+        public static readonly FeatureTypeConverter Singleton = new FeatureTypeConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/af2d1.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/af2d1.json/default/QuickType.cs
new file mode 100644
index 0000000..7ad49a7
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/af2d1.json/default/QuickType.cs
@@ -0,0 +1,699 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("crs", Required = Required.Always)]
+        public Crs Crs { get; set; }
+
+        [JsonProperty("features", Required = Required.Always)]
+        public Feature[] Features { get; set; }
+
+        [JsonProperty("totalFeatures", Required = Required.Always)]
+        public long TotalFeatures { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Crs
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public CrsProperties Properties { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record CrsProperties
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record Feature
+    {
+        [JsonProperty("geometry", Required = Required.Always)]
+        public Geometry Geometry { get; set; }
+
+        [JsonProperty("geometry_name", Required = Required.Always)]
+        public GeometryName GeometryName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("properties", Required = Required.Always)]
+        public FeatureProperties Properties { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public FeatureType Type { get; set; }
+    }
+
+    public partial record Geometry
+    {
+        [JsonProperty("coordinates", Required = Required.Always)]
+        public double[][][][] Coordinates { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public GeometryType Type { get; set; }
+    }
+
+    public partial record FeatureProperties
+    {
+        [JsonProperty("add_improv", Required = Required.AllowNull)]
+        public AddImprov? AddImprov { get; set; }
+
+        [JsonProperty("area_", Required = Required.Always)]
+        public double Area { get; set; }
+
+        [JsonProperty("asset_numb", Required = Required.Always)]
+        public string AssetNumb { get; set; }
+
+        [JsonProperty("comments", Required = Required.AllowNull)]
+        public string? Comments { get; set; }
+
+        [JsonProperty("condition", Required = Required.Always)]
+        public long Condition { get; set; }
+
+        [JsonProperty("constructi", Required = Required.AllowNull)]
+        public string? Constructi { get; set; }
+
+        [JsonProperty("createdate", Required = Required.AllowNull)]
+        public object Createdate { get; set; }
+
+        [JsonProperty("createuser", Required = Required.AllowNull)]
+        public object Createuser { get; set; }
+
+        [JsonProperty("disposal_d", Required = Required.AllowNull)]
+        public object DisposalD { get; set; }
+
+        [JsonProperty("documents", Required = Required.Always)]
+        public string Documents { get; set; }
+
+        [JsonProperty("drawing_nu", Required = Required.AllowNull)]
+        public string? DrawingNu { get; set; }
+
+        [JsonProperty("file_numbe", Required = Required.AllowNull)]
+        public string? FileNumbe { get; set; }
+
+        [JsonProperty("folder_num", Required = Required.AllowNull)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? FolderNum { get; set; }
+
+        [JsonProperty("funding_ba", Required = Required.AllowNull)]
+        public FundingBa? FundingBa { get; set; }
+
+        [JsonProperty("historic_c", Required = Required.Always)]
+        public long HistoricC { get; set; }
+
+        [JsonProperty("inspection", Required = Required.Always)]
+        public string Inspection { get; set; }
+
+        [JsonProperty("inspectors", Required = Required.AllowNull)]
+        public object Inspectors { get; set; }
+
+        [JsonProperty("last_updat", Required = Required.AllowNull)]
+        public object LastUpdat { get; set; }
+
+        [JsonProperty("level_accu", Required = Required.AllowNull)]
+        public LevelAccu? LevelAccu { get; set; }
+
+        [JsonProperty("material", Required = Required.Always)]
+        public Material Material { get; set; }
+
+        [JsonProperty("mi_prinx", Required = Required.Always)]
+        public long MiPrinx { get; set; }
+
+        [JsonProperty("mi_symbolo", Required = Required.Always)]
+        public MiSymbolo MiSymbolo { get; set; }
+
+        [JsonProperty("number_lan", Required = Required.Always)]
+        public long NumberLan { get; set; }
+
+        [JsonProperty("owner", Required = Required.AllowNull)]
+        public string? Owner { get; set; }
+
+        [JsonProperty("positional", Required = Required.AllowNull)]
+        public LevelAccu? Positional { get; set; }
+
+        [JsonProperty("project_nu", Required = Required.AllowNull)]
+        public string? ProjectNu { get; set; }
+
+        [JsonProperty("rec_id", Required = Required.Always)]
+        public long RecId { get; set; }
+
+        [JsonProperty("record_cre", Required = Required.AllowNull)]
+        public string? RecordCre { get; set; }
+
+        [JsonProperty("shape_area", Required = Required.Always)]
+        public double ShapeArea { get; set; }
+
+        [JsonProperty("shape_leng", Required = Required.Always)]
+        public double ShapeLeng { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("survey_num", Required = Required.AllowNull)]
+        public object SurveyNum { get; set; }
+
+        [JsonProperty("toe_rl", Required = Required.Always)]
+        public double ToeRl { get; set; }
+
+        [JsonProperty("top_rl", Required = Required.Always)]
+        public double TopRl { get; set; }
+
+        [JsonProperty("type", Required = Required.AllowNull)]
+        public PropertiesType? Type { get; set; }
+
+        [JsonProperty("update_dat", Required = Required.Always)]
+        public string UpdateDat { get; set; }
+
+        [JsonProperty("updatedate", Required = Required.AllowNull)]
+        public object Updatedate { get; set; }
+
+        [JsonProperty("updateuser", Required = Required.AllowNull)]
+        public object Updateuser { get; set; }
+    }
+
+    public enum GeometryType { MultiPolygon };
+
+    public enum GeometryName { Geom };
+
+    public enum AddImprov { F, AddImprovF, T };
+
+    public enum FundingBa { NonGccc, Capex, Initial, Contribute };
+
+    public enum LevelAccu { GpsCorrected10M, Approx, GpsCOrrected10M };
+
+    public enum Material { Gravel, Concrete, Bitumen, InterlockConcBlock, Other, Earth };
+
+    public enum MiSymbolo { Pen2265535Brush1016777215 };
+
+    public enum Status { Current };
+
+    public enum PropertiesType { BoatRamp };
+
+    public enum FeatureType { Feature };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                GeometryTypeConverter.Singleton,
+                GeometryNameConverter.Singleton,
+                AddImprovConverter.Singleton,
+                FundingBaConverter.Singleton,
+                LevelAccuConverter.Singleton,
+                MaterialConverter.Singleton,
+                MiSymboloConverter.Singleton,
+                StatusConverter.Singleton,
+                PropertiesTypeConverter.Singleton,
+                FeatureTypeConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class GeometryTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GeometryType) || t == typeof(GeometryType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "MultiPolygon")
+            {
+                return GeometryType.MultiPolygon;
+            }
+            throw new Exception("Cannot unmarshal type GeometryType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GeometryType)untypedValue;
+            if (value == GeometryType.MultiPolygon)
+            {
+                serializer.Serialize(writer, "MultiPolygon");
+                return;
+            }
+            throw new Exception("Cannot marshal type GeometryType");
+        }
+
+        public static readonly GeometryTypeConverter Singleton = new GeometryTypeConverter();
+    }
+
+    internal class GeometryNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GeometryName) || t == typeof(GeometryName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "geom")
+            {
+                return GeometryName.Geom;
+            }
+            throw new Exception("Cannot unmarshal type GeometryName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GeometryName)untypedValue;
+            if (value == GeometryName.Geom)
+            {
+                serializer.Serialize(writer, "geom");
+                return;
+            }
+            throw new Exception("Cannot marshal type GeometryName");
+        }
+
+        public static readonly GeometryNameConverter Singleton = new GeometryNameConverter();
+    }
+
+    internal class AddImprovConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AddImprov) || t == typeof(AddImprov?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "f":
+                    return AddImprov.F;
+                case "F":
+                    return AddImprov.AddImprovF;
+                case "t":
+                    return AddImprov.T;
+            }
+            throw new Exception("Cannot unmarshal type AddImprov");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (AddImprov)untypedValue;
+            switch (value)
+            {
+                case AddImprov.F:
+                    serializer.Serialize(writer, "f");
+                    return;
+                case AddImprov.AddImprovF:
+                    serializer.Serialize(writer, "F");
+                    return;
+                case AddImprov.T:
+                    serializer.Serialize(writer, "t");
+                    return;
+            }
+            throw new Exception("Cannot marshal type AddImprov");
+        }
+
+        public static readonly AddImprovConverter Singleton = new AddImprovConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class FundingBaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FundingBa) || t == typeof(FundingBa?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Non GCCC":
+                    return FundingBa.NonGccc;
+                case "Capex":
+                    return FundingBa.Capex;
+                case "Initial":
+                    return FundingBa.Initial;
+                case "Contribute":
+                    return FundingBa.Contribute;
+            }
+            throw new Exception("Cannot unmarshal type FundingBa");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FundingBa)untypedValue;
+            switch (value)
+            {
+                case FundingBa.NonGccc:
+                    serializer.Serialize(writer, "Non GCCC");
+                    return;
+                case FundingBa.Capex:
+                    serializer.Serialize(writer, "Capex");
+                    return;
+                case FundingBa.Initial:
+                    serializer.Serialize(writer, "Initial");
+                    return;
+                case FundingBa.Contribute:
+                    serializer.Serialize(writer, "Contribute");
+                    return;
+            }
+            throw new Exception("Cannot marshal type FundingBa");
+        }
+
+        public static readonly FundingBaConverter Singleton = new FundingBaConverter();
+    }
+
+    internal class LevelAccuConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LevelAccu) || t == typeof(LevelAccu?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "GPS Corrected 1.0M":
+                    return LevelAccu.GpsCorrected10M;
+                case "APPROX":
+                    return LevelAccu.Approx;
+                case "GPS COrrected 1.0M":
+                    return LevelAccu.GpsCOrrected10M;
+            }
+            throw new Exception("Cannot unmarshal type LevelAccu");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (LevelAccu)untypedValue;
+            switch (value)
+            {
+                case LevelAccu.GpsCorrected10M:
+                    serializer.Serialize(writer, "GPS Corrected 1.0M");
+                    return;
+                case LevelAccu.Approx:
+                    serializer.Serialize(writer, "APPROX");
+                    return;
+                case LevelAccu.GpsCOrrected10M:
+                    serializer.Serialize(writer, "GPS COrrected 1.0M");
+                    return;
+            }
+            throw new Exception("Cannot marshal type LevelAccu");
+        }
+
+        public static readonly LevelAccuConverter Singleton = new LevelAccuConverter();
+    }
+
+    internal class MaterialConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Material) || t == typeof(Material?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Gravel":
+                    return Material.Gravel;
+                case "Concrete":
+                    return Material.Concrete;
+                case "Bitumen":
+                    return Material.Bitumen;
+                case "Interlock Conc Block":
+                    return Material.InterlockConcBlock;
+                case "Other":
+                    return Material.Other;
+                case "Earth":
+                    return Material.Earth;
+            }
+            throw new Exception("Cannot unmarshal type Material");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Material)untypedValue;
+            switch (value)
+            {
+                case Material.Gravel:
+                    serializer.Serialize(writer, "Gravel");
+                    return;
+                case Material.Concrete:
+                    serializer.Serialize(writer, "Concrete");
+                    return;
+                case Material.Bitumen:
+                    serializer.Serialize(writer, "Bitumen");
+                    return;
+                case Material.InterlockConcBlock:
+                    serializer.Serialize(writer, "Interlock Conc Block");
+                    return;
+                case Material.Other:
+                    serializer.Serialize(writer, "Other");
+                    return;
+                case Material.Earth:
+                    serializer.Serialize(writer, "Earth");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Material");
+        }
+
+        public static readonly MaterialConverter Singleton = new MaterialConverter();
+    }
+
+    internal class MiSymboloConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MiSymbolo) || t == typeof(MiSymbolo?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Pen (2, 2, 65535) Brush (1, 0, 16777215)")
+            {
+                return MiSymbolo.Pen2265535Brush1016777215;
+            }
+            throw new Exception("Cannot unmarshal type MiSymbolo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (MiSymbolo)untypedValue;
+            if (value == MiSymbolo.Pen2265535Brush1016777215)
+            {
+                serializer.Serialize(writer, "Pen (2, 2, 65535) Brush (1, 0, 16777215)");
+                return;
+            }
+            throw new Exception("Cannot marshal type MiSymbolo");
+        }
+
+        public static readonly MiSymboloConverter Singleton = new MiSymboloConverter();
+    }
+
+    internal class StatusConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Status) || t == typeof(Status?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "CURRENT")
+            {
+                return Status.Current;
+            }
+            throw new Exception("Cannot unmarshal type Status");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Status)untypedValue;
+            if (value == Status.Current)
+            {
+                serializer.Serialize(writer, "CURRENT");
+                return;
+            }
+            throw new Exception("Cannot marshal type Status");
+        }
+
+        public static readonly StatusConverter Singleton = new StatusConverter();
+    }
+
+    internal class PropertiesTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PropertiesType) || t == typeof(PropertiesType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Boat Ramp")
+            {
+                return PropertiesType.BoatRamp;
+            }
+            throw new Exception("Cannot unmarshal type PropertiesType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PropertiesType)untypedValue;
+            if (value == PropertiesType.BoatRamp)
+            {
+                serializer.Serialize(writer, "Boat Ramp");
+                return;
+            }
+            throw new Exception("Cannot marshal type PropertiesType");
+        }
+
+        public static readonly PropertiesTypeConverter Singleton = new PropertiesTypeConverter();
+    }
+
+    internal class FeatureTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FeatureType) || t == typeof(FeatureType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Feature")
+            {
+                return FeatureType.Feature;
+            }
+            throw new Exception("Cannot unmarshal type FeatureType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FeatureType)untypedValue;
+            if (value == FeatureType.Feature)
+            {
+                serializer.Serialize(writer, "Feature");
+                return;
+            }
+            throw new Exception("Cannot marshal type FeatureType");
+        }
+
+        public static readonly FeatureTypeConverter Singleton = new FeatureTypeConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/b4865.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/b4865.json/default/QuickType.cs
new file mode 100644
index 0000000..ff6eb29
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/b4865.json/default/QuickType.cs
@@ -0,0 +1,255 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty(":@computed_region_cbhk_fwbd", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? ComputedRegionCbhkFwbd { get; set; }
+
+        [JsonProperty(":@computed_region_nnqa_25f4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? ComputedRegionNnqa25F4 { get; set; }
+
+        [JsonProperty("fall", Required = Required.Always)]
+        public Fall Fall { get; set; }
+
+        [JsonProperty("geolocation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Geolocation? Geolocation { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Id { get; set; }
+
+        [JsonProperty("mass", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Mass { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("nametype", Required = Required.Always)]
+        public Nametype Nametype { get; set; }
+
+        [JsonProperty("recclass", Required = Required.Always)]
+        public string Recclass { get; set; }
+
+        [JsonProperty("reclat", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Reclat { get; set; }
+
+        [JsonProperty("reclong", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Reclong { get; set; }
+
+        [JsonProperty("year", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DateTimeOffset? Year { get; set; }
+    }
+
+    public partial record Geolocation
+    {
+        [JsonProperty("coordinates", Required = Required.Always)]
+        public double[] Coordinates { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public enum Fall { Fell, Found };
+
+    public enum TypeEnum { Point };
+
+    public enum Nametype { Valid };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                FallConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                NametypeConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class FallConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fall) || t == typeof(Fall?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Fell":
+                    return Fall.Fell;
+                case "Found":
+                    return Fall.Found;
+            }
+            throw new Exception("Cannot unmarshal type Fall");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Fall)untypedValue;
+            switch (value)
+            {
+                case Fall.Fell:
+                    serializer.Serialize(writer, "Fell");
+                    return;
+                case Fall.Found:
+                    serializer.Serialize(writer, "Found");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Fall");
+        }
+
+        public static readonly FallConverter Singleton = new FallConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Point")
+            {
+                return TypeEnum.Point;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.Point)
+            {
+                serializer.Serialize(writer, "Point");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+
+    internal class NametypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nametype) || t == typeof(Nametype?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Valid")
+            {
+                return Nametype.Valid;
+            }
+            throw new Exception("Cannot unmarshal type Nametype");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Nametype)untypedValue;
+            if (value == Nametype.Valid)
+            {
+                serializer.Serialize(writer, "Valid");
+                return;
+            }
+            throw new Exception("Cannot marshal type Nametype");
+        }
+
+        public static readonly NametypeConverter Singleton = new NametypeConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/b6f2c.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/b6f2c.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/b6f2c.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/b6fe5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/b6fe5.json/default/QuickType.cs
new file mode 100644
index 0000000..46ee56d
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/b6fe5.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("group", Required = Required.Always)]
+        public Uri Group { get; set; }
+
+        [JsonProperty("movie", Required = Required.Always)]
+        public Uri Movie { get; set; }
+
+        [JsonProperty("movie-image", Required = Required.Always)]
+        public Uri MovieImage { get; set; }
+
+        [JsonProperty("theater", Required = Required.Always)]
+        public Uri Theater { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/b9f64.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/b9f64.json/default/QuickType.cs
new file mode 100644
index 0000000..c6b99f9
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/b9f64.json/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("user-agent", Required = Required.Always)]
+        public string UserAgent { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/bb1ec.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/bb1ec.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/bb1ec.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/be234.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/be234.json/default/QuickType.cs
new file mode 100644
index 0000000..aa22b2d
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/be234.json/default/QuickType.cs
@@ -0,0 +1,693 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public TopLevelData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public string Kind { get; set; }
+    }
+
+    public partial record TopLevelData
+    {
+        [JsonProperty("after", Required = Required.Always)]
+        public string After { get; set; }
+
+        [JsonProperty("before", Required = Required.AllowNull)]
+        public object Before { get; set; }
+
+        [JsonProperty("children", Required = Required.Always)]
+        public Child[] Children { get; set; }
+
+        [JsonProperty("modhash", Required = Required.Always)]
+        public string Modhash { get; set; }
+    }
+
+    public partial record Child
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public ChildData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    public partial record ChildData
+    {
+        [JsonProperty("approved_at_utc", Required = Required.AllowNull)]
+        public object ApprovedAtUtc { get; set; }
+
+        [JsonProperty("approved_by", Required = Required.AllowNull)]
+        public object ApprovedBy { get; set; }
+
+        [JsonProperty("archived", Required = Required.Always)]
+        public bool Archived { get; set; }
+
+        [JsonProperty("author", Required = Required.Always)]
+        public string Author { get; set; }
+
+        [JsonProperty("author_flair_css_class", Required = Required.AllowNull)]
+        public object AuthorFlairCssClass { get; set; }
+
+        [JsonProperty("author_flair_text", Required = Required.AllowNull)]
+        public string? AuthorFlairText { get; set; }
+
+        [JsonProperty("banned_at_utc", Required = Required.AllowNull)]
+        public object BannedAtUtc { get; set; }
+
+        [JsonProperty("banned_by", Required = Required.AllowNull)]
+        public object BannedBy { get; set; }
+
+        [JsonProperty("brand_safe", Required = Required.Always)]
+        public bool BrandSafe { get; set; }
+
+        [JsonProperty("can_gild", Required = Required.Always)]
+        public bool CanGild { get; set; }
+
+        [JsonProperty("can_mod_post", Required = Required.Always)]
+        public bool CanModPost { get; set; }
+
+        [JsonProperty("clicked", Required = Required.Always)]
+        public bool Clicked { get; set; }
+
+        [JsonProperty("contest_mode", Required = Required.Always)]
+        public bool ContestMode { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public double Created { get; set; }
+
+        [JsonProperty("created_utc", Required = Required.Always)]
+        public double CreatedUtc { get; set; }
+
+        [JsonProperty("distinguished", Required = Required.AllowNull)]
+        public string? Distinguished { get; set; }
+
+        [JsonProperty("domain", Required = Required.Always)]
+        public Domain Domain { get; set; }
+
+        [JsonProperty("downs", Required = Required.Always)]
+        public long Downs { get; set; }
+
+        [JsonProperty("edited", Required = Required.Always)]
+        public bool Edited { get; set; }
+
+        [JsonProperty("gilded", Required = Required.Always)]
+        public long Gilded { get; set; }
+
+        [JsonProperty("hidden", Required = Required.Always)]
+        public bool Hidden { get; set; }
+
+        [JsonProperty("hide_score", Required = Required.Always)]
+        public bool HideScore { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("is_self", Required = Required.Always)]
+        public bool IsSelf { get; set; }
+
+        [JsonProperty("is_video", Required = Required.Always)]
+        public bool IsVideo { get; set; }
+
+        [JsonProperty("likes", Required = Required.AllowNull)]
+        public object Likes { get; set; }
+
+        [JsonProperty("link_flair_css_class", Required = Required.AllowNull)]
+        public object LinkFlairCssClass { get; set; }
+
+        [JsonProperty("link_flair_text", Required = Required.AllowNull)]
+        public object LinkFlairText { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("media", Required = Required.AllowNull)]
+        public Media? Media { get; set; }
+
+        [JsonProperty("media_embed", Required = Required.Always)]
+        public MediaEmbed MediaEmbed { get; set; }
+
+        [JsonProperty("mod_reports", Required = Required.Always)]
+        public object[] ModReports { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("num_comments", Required = Required.Always)]
+        public long NumComments { get; set; }
+
+        [JsonProperty("num_reports", Required = Required.AllowNull)]
+        public object NumReports { get; set; }
+
+        [JsonProperty("over_18", Required = Required.Always)]
+        public bool Over18 { get; set; }
+
+        [JsonProperty("permalink", Required = Required.Always)]
+        public string Permalink { get; set; }
+
+        [JsonProperty("post_hint", Required = Required.Always)]
+        public PostHint PostHint { get; set; }
+
+        [JsonProperty("preview", Required = Required.Always)]
+        public Preview Preview { get; set; }
+
+        [JsonProperty("quarantine", Required = Required.Always)]
+        public bool Quarantine { get; set; }
+
+        [JsonProperty("removal_reason", Required = Required.AllowNull)]
+        public object RemovalReason { get; set; }
+
+        [JsonProperty("report_reasons", Required = Required.AllowNull)]
+        public object ReportReasons { get; set; }
+
+        [JsonProperty("saved", Required = Required.Always)]
+        public bool Saved { get; set; }
+
+        [JsonProperty("score", Required = Required.Always)]
+        public long Score { get; set; }
+
+        [JsonProperty("secure_media", Required = Required.AllowNull)]
+        public Media? SecureMedia { get; set; }
+
+        [JsonProperty("secure_media_embed", Required = Required.Always)]
+        public MediaEmbed SecureMediaEmbed { get; set; }
+
+        [JsonProperty("selftext", Required = Required.Always)]
+        public string Selftext { get; set; }
+
+        [JsonProperty("selftext_html", Required = Required.AllowNull)]
+        public object SelftextHtml { get; set; }
+
+        [JsonProperty("spoiler", Required = Required.Always)]
+        public bool Spoiler { get; set; }
+
+        [JsonProperty("stickied", Required = Required.Always)]
+        public bool Stickied { get; set; }
+
+        [JsonProperty("subreddit", Required = Required.Always)]
+        public Subreddit Subreddit { get; set; }
+
+        [JsonProperty("subreddit_id", Required = Required.Always)]
+        public SubredditId SubredditId { get; set; }
+
+        [JsonProperty("subreddit_name_prefixed", Required = Required.Always)]
+        public SubredditNamePrefixed SubredditNamePrefixed { get; set; }
+
+        [JsonProperty("subreddit_type", Required = Required.Always)]
+        public SubredditType SubredditType { get; set; }
+
+        [JsonProperty("suggested_sort", Required = Required.AllowNull)]
+        public object SuggestedSort { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public Uri Thumbnail { get; set; }
+
+        [JsonProperty("thumbnail_height", Required = Required.Always)]
+        public long ThumbnailHeight { get; set; }
+
+        [JsonProperty("thumbnail_width", Required = Required.Always)]
+        public long ThumbnailWidth { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ups", Required = Required.Always)]
+        public long Ups { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user_reports", Required = Required.Always)]
+        public object[] UserReports { get; set; }
+
+        [JsonProperty("view_count", Required = Required.AllowNull)]
+        public object ViewCount { get; set; }
+
+        [JsonProperty("visited", Required = Required.Always)]
+        public bool Visited { get; set; }
+    }
+
+    public partial record Media
+    {
+        [JsonProperty("oembed", Required = Required.Always)]
+        public Oembed Oembed { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public Domain Type { get; set; }
+    }
+
+    public partial record Oembed
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("html", Required = Required.Always)]
+        public string Html { get; set; }
+
+        [JsonProperty("provider_name", Required = Required.Always)]
+        public string ProviderName { get; set; }
+
+        [JsonProperty("provider_url", Required = Required.Always)]
+        public Uri ProviderUrl { get; set; }
+
+        [JsonProperty("thumbnail_height", Required = Required.Always)]
+        public long ThumbnailHeight { get; set; }
+
+        [JsonProperty("thumbnail_url", Required = Required.Always)]
+        public Uri ThumbnailUrl { get; set; }
+
+        [JsonProperty("thumbnail_width", Required = Required.Always)]
+        public long ThumbnailWidth { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("version", Required = Required.Always)]
+        public string Version { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record MediaEmbed
+    {
+        [JsonProperty("content", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Content { get; set; }
+
+        [JsonProperty("height", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Height { get; set; }
+
+        [JsonProperty("scrolling", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Scrolling { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Width { get; set; }
+    }
+
+    public partial record Preview
+    {
+        [JsonProperty("enabled", Required = Required.Always)]
+        public bool Enabled { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Image[] Images { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("resolutions", Required = Required.Always)]
+        public Source[] Resolutions { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public Source Source { get; set; }
+
+        [JsonProperty("variants", Required = Required.Always)]
+        public Variants Variants { get; set; }
+    }
+
+    public partial record Source
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record Variants
+    {
+        [JsonProperty("gif", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Gif? Gif { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Gif? Mp4 { get; set; }
+    }
+
+    public partial record Gif
+    {
+        [JsonProperty("resolutions", Required = Required.Always)]
+        public Source[] Resolutions { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public Source Source { get; set; }
+    }
+
+    public enum Domain { RedditCom, IReddIt, IImgurCom, GfycatCom, ImgurCom };
+
+    public enum PostHint { Link, Image, RichVideo };
+
+    public enum Subreddit { Funny };
+
+    public enum SubredditId { T52Qh33 };
+
+    public enum SubredditNamePrefixed { RFunny };
+
+    public enum SubredditType { Public };
+
+    public enum Kind { T3 };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DomainConverter.Singleton,
+                PostHintConverter.Singleton,
+                SubredditConverter.Singleton,
+                SubredditIdConverter.Singleton,
+                SubredditNamePrefixedConverter.Singleton,
+                SubredditTypeConverter.Singleton,
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DomainConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Domain) || t == typeof(Domain?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "reddit.com":
+                    return Domain.RedditCom;
+                case "i.redd.it":
+                    return Domain.IReddIt;
+                case "i.imgur.com":
+                    return Domain.IImgurCom;
+                case "gfycat.com":
+                    return Domain.GfycatCom;
+                case "imgur.com":
+                    return Domain.ImgurCom;
+            }
+            throw new Exception("Cannot unmarshal type Domain");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Domain)untypedValue;
+            switch (value)
+            {
+                case Domain.RedditCom:
+                    serializer.Serialize(writer, "reddit.com");
+                    return;
+                case Domain.IReddIt:
+                    serializer.Serialize(writer, "i.redd.it");
+                    return;
+                case Domain.IImgurCom:
+                    serializer.Serialize(writer, "i.imgur.com");
+                    return;
+                case Domain.GfycatCom:
+                    serializer.Serialize(writer, "gfycat.com");
+                    return;
+                case Domain.ImgurCom:
+                    serializer.Serialize(writer, "imgur.com");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Domain");
+        }
+
+        public static readonly DomainConverter Singleton = new DomainConverter();
+    }
+
+    internal class PostHintConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PostHint) || t == typeof(PostHint?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "link":
+                    return PostHint.Link;
+                case "image":
+                    return PostHint.Image;
+                case "rich:video":
+                    return PostHint.RichVideo;
+            }
+            throw new Exception("Cannot unmarshal type PostHint");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PostHint)untypedValue;
+            switch (value)
+            {
+                case PostHint.Link:
+                    serializer.Serialize(writer, "link");
+                    return;
+                case PostHint.Image:
+                    serializer.Serialize(writer, "image");
+                    return;
+                case PostHint.RichVideo:
+                    serializer.Serialize(writer, "rich:video");
+                    return;
+            }
+            throw new Exception("Cannot marshal type PostHint");
+        }
+
+        public static readonly PostHintConverter Singleton = new PostHintConverter();
+    }
+
+    internal class SubredditConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Subreddit) || t == typeof(Subreddit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "funny")
+            {
+                return Subreddit.Funny;
+            }
+            throw new Exception("Cannot unmarshal type Subreddit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Subreddit)untypedValue;
+            if (value == Subreddit.Funny)
+            {
+                serializer.Serialize(writer, "funny");
+                return;
+            }
+            throw new Exception("Cannot marshal type Subreddit");
+        }
+
+        public static readonly SubredditConverter Singleton = new SubredditConverter();
+    }
+
+    internal class SubredditIdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditId) || t == typeof(SubredditId?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t5_2qh33")
+            {
+                return SubredditId.T52Qh33;
+            }
+            throw new Exception("Cannot unmarshal type SubredditId");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditId)untypedValue;
+            if (value == SubredditId.T52Qh33)
+            {
+                serializer.Serialize(writer, "t5_2qh33");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditId");
+        }
+
+        public static readonly SubredditIdConverter Singleton = new SubredditIdConverter();
+    }
+
+    internal class SubredditNamePrefixedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditNamePrefixed) || t == typeof(SubredditNamePrefixed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "r/funny")
+            {
+                return SubredditNamePrefixed.RFunny;
+            }
+            throw new Exception("Cannot unmarshal type SubredditNamePrefixed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditNamePrefixed)untypedValue;
+            if (value == SubredditNamePrefixed.RFunny)
+            {
+                serializer.Serialize(writer, "r/funny");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditNamePrefixed");
+        }
+
+        public static readonly SubredditNamePrefixedConverter Singleton = new SubredditNamePrefixedConverter();
+    }
+
+    internal class SubredditTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditType) || t == typeof(SubredditType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "public")
+            {
+                return SubredditType.Public;
+            }
+            throw new Exception("Cannot unmarshal type SubredditType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditType)untypedValue;
+            if (value == SubredditType.Public)
+            {
+                serializer.Serialize(writer, "public");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditType");
+        }
+
+        public static readonly SubredditTypeConverter Singleton = new SubredditTypeConverter();
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t3")
+            {
+                return Kind.T3;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.T3)
+            {
+                serializer.Serialize(writer, "t3");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/c0356.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/c0356.json/default/QuickType.cs
new file mode 100644
index 0000000..256781c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/c0356.json/default/QuickType.cs
@@ -0,0 +1,85 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Dictionary<string, Datum> Data { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public Description Description { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("anomaly", Required = Required.Always)]
+        public string Anomaly { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record Description
+    {
+        [JsonProperty("base_period", Required = Required.Always)]
+        public string BasePeriod { get; set; }
+
+        [JsonProperty("missing", Required = Required.Always)]
+        public long Missing { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/c0a3a.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/c0a3a.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/c0a3a.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/c3303.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/c3303.json/default/QuickType.cs
new file mode 100644
index 0000000..27d8540
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/c3303.json/default/QuickType.cs
@@ -0,0 +1,484 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("pagination", Required = Required.Always)]
+        public Pagination Pagination { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("bitly_gif_url", Required = Required.Always)]
+        public Uri BitlyGifUrl { get; set; }
+
+        [JsonProperty("bitly_url", Required = Required.Always)]
+        public Uri BitlyUrl { get; set; }
+
+        [JsonProperty("content_url", Required = Required.Always)]
+        public string ContentUrl { get; set; }
+
+        [JsonProperty("embed_url", Required = Required.Always)]
+        public Uri EmbedUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Images Images { get; set; }
+
+        [JsonProperty("import_datetime", Required = Required.Always)]
+        public string ImportDatetime { get; set; }
+
+        [JsonProperty("is_indexable", Required = Required.Always)]
+        public long IsIndexable { get; set; }
+
+        [JsonProperty("rating", Required = Required.Always)]
+        public Rating Rating { get; set; }
+
+        [JsonProperty("slug", Required = Required.Always)]
+        public string Slug { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public string Source { get; set; }
+
+        [JsonProperty("source_post_url", Required = Required.Always)]
+        public string SourcePostUrl { get; set; }
+
+        [JsonProperty("source_tld", Required = Required.Always)]
+        public string SourceTld { get; set; }
+
+        [JsonProperty("trending_datetime", Required = Required.Always)]
+        public string TrendingDatetime { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public User? User { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public Username Username { get; set; }
+    }
+
+    public partial record Images
+    {
+        [JsonProperty("downsized", Required = Required.Always)]
+        public The480_WStill Downsized { get; set; }
+
+        [JsonProperty("downsized_large", Required = Required.Always)]
+        public The480_WStill DownsizedLarge { get; set; }
+
+        [JsonProperty("downsized_medium", Required = Required.Always)]
+        public The480_WStill DownsizedMedium { get; set; }
+
+        [JsonProperty("downsized_small", Required = Required.Always)]
+        public DownsizedSmall DownsizedSmall { get; set; }
+
+        [JsonProperty("downsized_still", Required = Required.Always)]
+        public The480_WStill DownsizedStill { get; set; }
+
+        [JsonProperty("fixed_height", Required = Required.Always)]
+        public FixedHeight FixedHeight { get; set; }
+
+        [JsonProperty("fixed_height_downsampled", Required = Required.Always)]
+        public FixedHeight FixedHeightDownsampled { get; set; }
+
+        [JsonProperty("fixed_height_small", Required = Required.Always)]
+        public FixedHeight FixedHeightSmall { get; set; }
+
+        [JsonProperty("fixed_height_small_still", Required = Required.Always)]
+        public The480_WStill FixedHeightSmallStill { get; set; }
+
+        [JsonProperty("fixed_height_still", Required = Required.Always)]
+        public The480_WStill FixedHeightStill { get; set; }
+
+        [JsonProperty("fixed_width", Required = Required.Always)]
+        public FixedHeight FixedWidth { get; set; }
+
+        [JsonProperty("fixed_width_downsampled", Required = Required.Always)]
+        public FixedHeight FixedWidthDownsampled { get; set; }
+
+        [JsonProperty("fixed_width_small", Required = Required.Always)]
+        public FixedHeight FixedWidthSmall { get; set; }
+
+        [JsonProperty("fixed_width_small_still", Required = Required.Always)]
+        public The480_WStill FixedWidthSmallStill { get; set; }
+
+        [JsonProperty("fixed_width_still", Required = Required.Always)]
+        public The480_WStill FixedWidthStill { get; set; }
+
+        [JsonProperty("looping", Required = Required.Always)]
+        public Looping Looping { get; set; }
+
+        [JsonProperty("original", Required = Required.Always)]
+        public FixedHeight Original { get; set; }
+
+        [JsonProperty("original_mp4", Required = Required.Always)]
+        public DownsizedSmall OriginalMp4 { get; set; }
+
+        [JsonProperty("original_still", Required = Required.Always)]
+        public The480_WStill OriginalStill { get; set; }
+
+        [JsonProperty("preview", Required = Required.Always)]
+        public DownsizedSmall Preview { get; set; }
+
+        [JsonProperty("preview_gif", Required = Required.Always)]
+        public The480_WStill PreviewGif { get; set; }
+
+        [JsonProperty("preview_webp", Required = Required.Always)]
+        public The480_WStill PreviewWebp { get; set; }
+
+        [JsonProperty("480w_still", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public The480_WStill? The480WStill { get; set; }
+    }
+
+    public partial record The480_WStill
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record DownsizedSmall
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record FixedHeight
+    {
+        [JsonProperty("frames", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Frames { get; set; }
+
+        [JsonProperty("hash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Hash { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Uri? Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Mp4Size { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("webp", Required = Required.Always)]
+        public Uri Webp { get; set; }
+
+        [JsonProperty("webp_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long WebpSize { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Looping
+    {
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+    }
+
+    public partial record User
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("banner_url", Required = Required.Always)]
+        public Uri BannerUrl { get; set; }
+
+        [JsonProperty("display_name", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("profile_url", Required = Required.Always)]
+        public Uri ProfileUrl { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public Username Username { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("msg", Required = Required.Always)]
+        public string Msg { get; set; }
+
+        [JsonProperty("response_id", Required = Required.Always)]
+        public string ResponseId { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Pagination
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("total_count", Required = Required.Always)]
+        public long TotalCount { get; set; }
+    }
+
+    public enum Rating { Pg, G, Pg13 };
+
+    public enum TypeEnum { Gif };
+
+    public enum Username { Empty, Disneypixar };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                RatingConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                UsernameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RatingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rating) || t == typeof(Rating?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "pg":
+                    return Rating.Pg;
+                case "g":
+                    return Rating.G;
+                case "pg-13":
+                    return Rating.Pg13;
+            }
+            throw new Exception("Cannot unmarshal type Rating");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Rating)untypedValue;
+            switch (value)
+            {
+                case Rating.Pg:
+                    serializer.Serialize(writer, "pg");
+                    return;
+                case Rating.G:
+                    serializer.Serialize(writer, "g");
+                    return;
+                case Rating.Pg13:
+                    serializer.Serialize(writer, "pg-13");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Rating");
+        }
+
+        public static readonly RatingConverter Singleton = new RatingConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "gif")
+            {
+                return TypeEnum.Gif;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.Gif)
+            {
+                serializer.Serialize(writer, "gif");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+
+    internal class UsernameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Username) || t == typeof(Username?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Username.Empty;
+                case "disneypixar":
+                    return Username.Disneypixar;
+            }
+            throw new Exception("Cannot unmarshal type Username");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Username)untypedValue;
+            switch (value)
+            {
+                case Username.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Username.Disneypixar:
+                    serializer.Serialize(writer, "disneypixar");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Username");
+        }
+
+        public static readonly UsernameConverter Singleton = new UsernameConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/c6cfd.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/c6cfd.json/default/QuickType.cs
new file mode 100644
index 0000000..90881da
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/c6cfd.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("countries", Required = Required.Always)]
+        public Country[] Countries { get; set; }
+    }
+
+    public partial record Country
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        public string Code { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/c8c7e.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/c8c7e.json/default/QuickType.cs
new file mode 100644
index 0000000..561cc2b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/c8c7e.json/default/QuickType.cs
@@ -0,0 +1,266 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record PurpleTopLevel
+    {
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Date { get; set; }
+
+        [JsonProperty("decimal", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Decimal { get; set; }
+
+        [JsonProperty("indicator", Required = Required.Always)]
+        public Country Indicator { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record Country
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public Id Id { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public Value Value { get; set; }
+    }
+
+    public partial record FluffyTopLevel
+    {
+        [JsonProperty("page", Required = Required.Always)]
+        public long Page { get; set; }
+
+        [JsonProperty("pages", Required = Required.Always)]
+        public long Pages { get; set; }
+
+        [JsonProperty("per_page", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long PerPage { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+    }
+
+    public enum Id { In, NyGdpMktpCd };
+
+    public enum Value { India, GdpCurrentUs };
+
+    public partial struct TopLevelUnion
+    {
+        public FluffyTopLevel? FluffyTopLevel;
+        public PurpleTopLevel[]? PurpleTopLevelArray;
+
+        public static implicit operator TopLevelUnion(FluffyTopLevel FluffyTopLevel) => new TopLevelUnion { FluffyTopLevel = FluffyTopLevel };
+        public static implicit operator TopLevelUnion(PurpleTopLevel[] PurpleTopLevelArray) => new TopLevelUnion { PurpleTopLevelArray = PurpleTopLevelArray };
+    }
+
+    public class TopLevel
+    {
+        public static TopLevelUnion[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevelUnion[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevelUnion[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TopLevelUnionConverter.Singleton,
+                IdConverter.Singleton,
+                ValueConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TopLevelUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TopLevelUnion) || t == typeof(TopLevelUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FluffyTopLevel>(reader);
+                    return new TopLevelUnion { FluffyTopLevel = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<PurpleTopLevel[]>(reader);
+                    return new TopLevelUnion { PurpleTopLevelArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type TopLevelUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TopLevelUnion)untypedValue;
+            if (value.PurpleTopLevelArray != null)
+            {
+                serializer.Serialize(writer, value.PurpleTopLevelArray);
+                return;
+            }
+            if (value.FluffyTopLevel != null)
+            {
+                serializer.Serialize(writer, value.FluffyTopLevel);
+                return;
+            }
+            throw new Exception("Cannot marshal type TopLevelUnion");
+        }
+
+        public static readonly TopLevelUnionConverter Singleton = new TopLevelUnionConverter();
+    }
+
+    internal class IdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Id) || t == typeof(Id?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "IN":
+                    return Id.In;
+                case "NY.GDP.MKTP.CD":
+                    return Id.NyGdpMktpCd;
+            }
+            throw new Exception("Cannot unmarshal type Id");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Id)untypedValue;
+            switch (value)
+            {
+                case Id.In:
+                    serializer.Serialize(writer, "IN");
+                    return;
+                case Id.NyGdpMktpCd:
+                    serializer.Serialize(writer, "NY.GDP.MKTP.CD");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Id");
+        }
+
+        public static readonly IdConverter Singleton = new IdConverter();
+    }
+
+    internal class ValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Value) || t == typeof(Value?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "India":
+                    return Value.India;
+                case "GDP (current US$)":
+                    return Value.GdpCurrentUs;
+            }
+            throw new Exception("Cannot unmarshal type Value");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Value)untypedValue;
+            switch (value)
+            {
+                case Value.India:
+                    serializer.Serialize(writer, "India");
+                    return;
+                case Value.GdpCurrentUs:
+                    serializer.Serialize(writer, "GDP (current US$)");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Value");
+        }
+
+        public static readonly ValueConverter Singleton = new ValueConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/cb0cc.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/cb0cc.json/default/QuickType.cs
new file mode 100644
index 0000000..51e4e78
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/cb0cc.json/default/QuickType.cs
@@ -0,0 +1,192 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("prizes", Required = Required.Always)]
+        public Prize[] Prizes { get; set; }
+    }
+
+    public partial record Prize
+    {
+        [JsonProperty("category", Required = Required.Always)]
+        public Category Category { get; set; }
+
+        [JsonProperty("laureates", Required = Required.Always)]
+        public Laureate[] Laureates { get; set; }
+
+        [JsonProperty("overallMotivation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? OverallMotivation { get; set; }
+
+        [JsonProperty("year", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Year { get; set; }
+    }
+
+    public partial record Laureate
+    {
+        [JsonProperty("firstname", Required = Required.Always)]
+        public string Firstname { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Id { get; set; }
+
+        [JsonProperty("motivation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Motivation { get; set; }
+
+        [JsonProperty("share", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Share { get; set; }
+
+        [JsonProperty("surname", Required = Required.Always)]
+        public string Surname { get; set; }
+    }
+
+    public enum Category { Physics, Chemistry, Medicine, Literature, Peace, Economics };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CategoryConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CategoryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Category) || t == typeof(Category?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "physics":
+                    return Category.Physics;
+                case "chemistry":
+                    return Category.Chemistry;
+                case "medicine":
+                    return Category.Medicine;
+                case "literature":
+                    return Category.Literature;
+                case "peace":
+                    return Category.Peace;
+                case "economics":
+                    return Category.Economics;
+            }
+            throw new Exception("Cannot unmarshal type Category");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Category)untypedValue;
+            switch (value)
+            {
+                case Category.Physics:
+                    serializer.Serialize(writer, "physics");
+                    return;
+                case Category.Chemistry:
+                    serializer.Serialize(writer, "chemistry");
+                    return;
+                case Category.Medicine:
+                    serializer.Serialize(writer, "medicine");
+                    return;
+                case Category.Literature:
+                    serializer.Serialize(writer, "literature");
+                    return;
+                case Category.Peace:
+                    serializer.Serialize(writer, "peace");
+                    return;
+                case Category.Economics:
+                    serializer.Serialize(writer, "economics");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Category");
+        }
+
+        public static readonly CategoryConverter Singleton = new CategoryConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/cb81e.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/cb81e.json/default/QuickType.cs
new file mode 100644
index 0000000..98c915a
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/cb81e.json/default/QuickType.cs
@@ -0,0 +1,79 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Dictionary<string, string> Data { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public Description Description { get; set; }
+    }
+
+    public partial record Description
+    {
+        [JsonProperty("base_period", Required = Required.Always)]
+        public string BasePeriod { get; set; }
+
+        [JsonProperty("missing", Required = Required.Always)]
+        public string Missing { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public string Units { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/ccd18.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/ccd18.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/ccd18.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/cd238.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/cd238.json/default/QuickType.cs
new file mode 100644
index 0000000..36fa558
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/cd238.json/default/QuickType.cs
@@ -0,0 +1,175 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("delay", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool Delay { get; set; }
+
+        [JsonProperty("IATA", Required = Required.Always)]
+        public string Iata { get; set; }
+
+        [JsonProperty("ICAO", Required = Required.Always)]
+        public string Icao { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public Status Status { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public Weather Weather { get; set; }
+    }
+
+    public partial record Status
+    {
+        [JsonProperty("avgDelay", Required = Required.Always)]
+        public string AvgDelay { get; set; }
+
+        [JsonProperty("closureBegin", Required = Required.Always)]
+        public string ClosureBegin { get; set; }
+
+        [JsonProperty("closureEnd", Required = Required.Always)]
+        public string ClosureEnd { get; set; }
+
+        [JsonProperty("endTime", Required = Required.Always)]
+        public string EndTime { get; set; }
+
+        [JsonProperty("maxDelay", Required = Required.Always)]
+        public string MaxDelay { get; set; }
+
+        [JsonProperty("minDelay", Required = Required.Always)]
+        public string MinDelay { get; set; }
+
+        [JsonProperty("reason", Required = Required.Always)]
+        public string Reason { get; set; }
+
+        [JsonProperty("trend", Required = Required.Always)]
+        public string Trend { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Weather
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        public string Temp { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public double Visibility { get; set; }
+
+        [JsonProperty("weather", Required = Required.Always)]
+        public string WeatherWeather { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public string Wind { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("credit", Required = Required.Always)]
+        public string Credit { get; set; }
+
+        [JsonProperty("updated", Required = Required.Always)]
+        public string Updated { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/cd463.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/cd463.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/cd463.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/cda6c.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/cda6c.json/default/QuickType.cs
new file mode 100644
index 0000000..0bc5b9e
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/cda6c.json/default/QuickType.cs
@@ -0,0 +1,267 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record PurpleTopLevel
+    {
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Date { get; set; }
+
+        [JsonProperty("decimal", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Decimal { get; set; }
+
+        [JsonProperty("indicator", Required = Required.Always)]
+        public Country Indicator { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Value { get; set; }
+    }
+
+    public partial record Country
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public Id Id { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public Value Value { get; set; }
+    }
+
+    public partial record FluffyTopLevel
+    {
+        [JsonProperty("page", Required = Required.Always)]
+        public long Page { get; set; }
+
+        [JsonProperty("pages", Required = Required.Always)]
+        public long Pages { get; set; }
+
+        [JsonProperty("per_page", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long PerPage { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+    }
+
+    public enum Id { Cn, SpPopTotl };
+
+    public enum Value { China, PopulationTotal };
+
+    public partial struct TopLevelUnion
+    {
+        public FluffyTopLevel? FluffyTopLevel;
+        public PurpleTopLevel[]? PurpleTopLevelArray;
+
+        public static implicit operator TopLevelUnion(FluffyTopLevel FluffyTopLevel) => new TopLevelUnion { FluffyTopLevel = FluffyTopLevel };
+        public static implicit operator TopLevelUnion(PurpleTopLevel[] PurpleTopLevelArray) => new TopLevelUnion { PurpleTopLevelArray = PurpleTopLevelArray };
+    }
+
+    public class TopLevel
+    {
+        public static TopLevelUnion[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevelUnion[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevelUnion[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TopLevelUnionConverter.Singleton,
+                IdConverter.Singleton,
+                ValueConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TopLevelUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TopLevelUnion) || t == typeof(TopLevelUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FluffyTopLevel>(reader);
+                    return new TopLevelUnion { FluffyTopLevel = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<PurpleTopLevel[]>(reader);
+                    return new TopLevelUnion { PurpleTopLevelArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type TopLevelUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TopLevelUnion)untypedValue;
+            if (value.PurpleTopLevelArray != null)
+            {
+                serializer.Serialize(writer, value.PurpleTopLevelArray);
+                return;
+            }
+            if (value.FluffyTopLevel != null)
+            {
+                serializer.Serialize(writer, value.FluffyTopLevel);
+                return;
+            }
+            throw new Exception("Cannot marshal type TopLevelUnion");
+        }
+
+        public static readonly TopLevelUnionConverter Singleton = new TopLevelUnionConverter();
+    }
+
+    internal class IdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Id) || t == typeof(Id?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "CN":
+                    return Id.Cn;
+                case "SP.POP.TOTL":
+                    return Id.SpPopTotl;
+            }
+            throw new Exception("Cannot unmarshal type Id");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Id)untypedValue;
+            switch (value)
+            {
+                case Id.Cn:
+                    serializer.Serialize(writer, "CN");
+                    return;
+                case Id.SpPopTotl:
+                    serializer.Serialize(writer, "SP.POP.TOTL");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Id");
+        }
+
+        public static readonly IdConverter Singleton = new IdConverter();
+    }
+
+    internal class ValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Value) || t == typeof(Value?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "China":
+                    return Value.China;
+                case "Population, total":
+                    return Value.PopulationTotal;
+            }
+            throw new Exception("Cannot unmarshal type Value");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Value)untypedValue;
+            switch (value)
+            {
+                case Value.China:
+                    serializer.Serialize(writer, "China");
+                    return;
+                case Value.PopulationTotal:
+                    serializer.Serialize(writer, "Population, total");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Value");
+        }
+
+        public static readonly ValueConverter Singleton = new ValueConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/cf0d8.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/cf0d8.json/default/QuickType.cs
new file mode 100644
index 0000000..1069da3
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/cf0d8.json/default/QuickType.cs
@@ -0,0 +1,354 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/cfbce.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/cfbce.json/default/QuickType.cs
new file mode 100644
index 0000000..aeacf3c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/cfbce.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public string Base { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("rates", Required = Required.Always)]
+        public Dictionary<string, double> Rates { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/d0908.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/d0908.json/default/QuickType.cs
new file mode 100644
index 0000000..19213a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/d0908.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("total_population", Required = Required.Always)]
+        public TotalPopulation[] TotalPopulation { get; set; }
+    }
+
+    public partial record TotalPopulation
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("population", Required = Required.Always)]
+        public long Population { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/d23d5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/d23d5.json/default/QuickType.cs
new file mode 100644
index 0000000..379dc55
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/d23d5.json/default/QuickType.cs
@@ -0,0 +1,104 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("facets", Required = Required.Always)]
+        public Facets Facets { get; set; }
+
+        [JsonProperty("limit", Required = Required.Always)]
+        public long Limit { get; set; }
+
+        [JsonProperty("next", Required = Required.Always)]
+        public Uri Next { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("previous", Required = Required.Always)]
+        public bool Previous { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Facets
+    {
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("acronym", Required = Required.AllowNull)]
+        public string? Acronym { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("uri", Required = Required.Always)]
+        public Uri Uri { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/dbfb3.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/dbfb3.json/default/QuickType.cs
new file mode 100644
index 0000000..808828e
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/dbfb3.json/default/QuickType.cs
@@ -0,0 +1,398 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public enum Text { MostlySunny, Sunny };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class TextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Text) || t == typeof(Text?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Mostly Sunny":
+                    return Text.MostlySunny;
+                case "Sunny":
+                    return Text.Sunny;
+            }
+            throw new Exception("Cannot unmarshal type Text");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Text)untypedValue;
+            switch (value)
+            {
+                case Text.MostlySunny:
+                    serializer.Serialize(writer, "Mostly Sunny");
+                    return;
+                case Text.Sunny:
+                    serializer.Serialize(writer, "Sunny");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Text");
+        }
+
+        public static readonly TextConverter Singleton = new TextConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/dc44f.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/dc44f.json/default/QuickType.cs
new file mode 100644
index 0000000..2b7bd44
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/dc44f.json/default/QuickType.cs
@@ -0,0 +1,817 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("booster", Required = Required.Always)]
+        public Booster[] Booster { get; set; }
+
+        [JsonProperty("border", Required = Required.Always)]
+        public string Border { get; set; }
+
+        [JsonProperty("cards", Required = Required.Always)]
+        public Card[] Cards { get; set; }
+
+        [JsonProperty("code", Required = Required.Always)]
+        public string Code { get; set; }
+
+        [JsonProperty("gathererCode", Required = Required.Always)]
+        public string GathererCode { get; set; }
+
+        [JsonProperty("magicCardsInfoCode", Required = Required.Always)]
+        public string MagicCardsInfoCode { get; set; }
+
+        [JsonProperty("mkm_id", Required = Required.Always)]
+        public long MkmId { get; set; }
+
+        [JsonProperty("mkm_name", Required = Required.Always)]
+        public string MkmName { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("releaseDate", Required = Required.Always)]
+        public DateTimeOffset ReleaseDate { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Card
+    {
+        [JsonProperty("artist", Required = Required.Always)]
+        public string Artist { get; set; }
+
+        [JsonProperty("cmc", Required = Required.Always)]
+        public long Cmc { get; set; }
+
+        [JsonProperty("colorIdentity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ColorIdentity[]? ColorIdentity { get; set; }
+
+        [JsonProperty("colors", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Color[]? Colors { get; set; }
+
+        [JsonProperty("flavor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Flavor { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("imageName", Required = Required.Always)]
+        public string ImageName { get; set; }
+
+        [JsonProperty("layout", Required = Required.Always)]
+        public Layout Layout { get; set; }
+
+        [JsonProperty("legalities", Required = Required.Always)]
+        public LegalityElement[] Legalities { get; set; }
+
+        [JsonProperty("manaCost", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? ManaCost { get; set; }
+
+        [JsonProperty("mciNumber", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? MciNumber { get; set; }
+
+        [JsonProperty("multiverseid", Required = Required.Always)]
+        public long Multiverseid { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("originalText", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? OriginalText { get; set; }
+
+        [JsonProperty("originalType", Required = Required.Always)]
+        public string OriginalType { get; set; }
+
+        [JsonProperty("power", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Power { get; set; }
+
+        [JsonProperty("printings", Required = Required.Always)]
+        public string[] Printings { get; set; }
+
+        [JsonProperty("rarity", Required = Required.Always)]
+        public Rarity Rarity { get; set; }
+
+        [JsonProperty("reserved", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Reserved { get; set; }
+
+        [JsonProperty("rulings", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Ruling[]? Rulings { get; set; }
+
+        [JsonProperty("subtypes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Subtypes { get; set; }
+
+        [JsonProperty("supertypes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Supertype[]? Supertypes { get; set; }
+
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+
+        [JsonProperty("toughness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Toughness { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("types", Required = Required.Always)]
+        public TypeElement[] Types { get; set; }
+
+        [JsonProperty("variations", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long[]? Variations { get; set; }
+    }
+
+    public partial record LegalityElement
+    {
+        [JsonProperty("format", Required = Required.Always)]
+        public Format Format { get; set; }
+
+        [JsonProperty("legality", Required = Required.Always)]
+        public LegalityEnum Legality { get; set; }
+    }
+
+    public partial record Ruling
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public enum Booster { Rare, Uncommon, Common };
+
+    public enum ColorIdentity { U, B, W, G, R };
+
+    public enum Color { Blue, Black, White, Green, Red };
+
+    public enum Layout { Normal };
+
+    public enum Format { Commander, Legacy, Modern, Vintage, TimeSpiralBlock, RavnicaBlock, IceAgeBlock, TempestBlock, OnslaughtBlock, MasquesBlock, MirageBlock, UrzaBlock, ScarsOfMirrodinBlock, MirrodinBlock, AmonkhetBlock, BattleForZendikarBlock, InnistradBlock, InvasionBlock, KaladeshBlock, KamigawaBlock, KhansOfTarkirBlock, LorwynShadowmoorBlock, OdysseyBlock, ReturnToRavnicaBlock, ShadowsOverInnistradBlock, ShardsOfAlaraBlock, Standard, TherosBlock, UnSets, ZendikarBlock };
+
+    public enum LegalityEnum { Legal, Banned, Restricted };
+
+    public enum Rarity { Uncommon, Rare, Common, BasicLand };
+
+    public enum Supertype { Basic };
+
+    public enum TypeElement { Creature, Instant, Enchantment, Artifact, Sorcery, Land };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                BoosterConverter.Singleton,
+                ColorIdentityConverter.Singleton,
+                ColorConverter.Singleton,
+                LayoutConverter.Singleton,
+                FormatConverter.Singleton,
+                LegalityEnumConverter.Singleton,
+                RarityConverter.Singleton,
+                SupertypeConverter.Singleton,
+                TypeElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class BoosterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Booster) || t == typeof(Booster?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "rare":
+                    return Booster.Rare;
+                case "uncommon":
+                    return Booster.Uncommon;
+                case "common":
+                    return Booster.Common;
+            }
+            throw new Exception("Cannot unmarshal type Booster");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Booster)untypedValue;
+            switch (value)
+            {
+                case Booster.Rare:
+                    serializer.Serialize(writer, "rare");
+                    return;
+                case Booster.Uncommon:
+                    serializer.Serialize(writer, "uncommon");
+                    return;
+                case Booster.Common:
+                    serializer.Serialize(writer, "common");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Booster");
+        }
+
+        public static readonly BoosterConverter Singleton = new BoosterConverter();
+    }
+
+    internal class ColorIdentityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ColorIdentity) || t == typeof(ColorIdentity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "U":
+                    return ColorIdentity.U;
+                case "B":
+                    return ColorIdentity.B;
+                case "W":
+                    return ColorIdentity.W;
+                case "G":
+                    return ColorIdentity.G;
+                case "R":
+                    return ColorIdentity.R;
+            }
+            throw new Exception("Cannot unmarshal type ColorIdentity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ColorIdentity)untypedValue;
+            switch (value)
+            {
+                case ColorIdentity.U:
+                    serializer.Serialize(writer, "U");
+                    return;
+                case ColorIdentity.B:
+                    serializer.Serialize(writer, "B");
+                    return;
+                case ColorIdentity.W:
+                    serializer.Serialize(writer, "W");
+                    return;
+                case ColorIdentity.G:
+                    serializer.Serialize(writer, "G");
+                    return;
+                case ColorIdentity.R:
+                    serializer.Serialize(writer, "R");
+                    return;
+            }
+            throw new Exception("Cannot marshal type ColorIdentity");
+        }
+
+        public static readonly ColorIdentityConverter Singleton = new ColorIdentityConverter();
+    }
+
+    internal class ColorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Color) || t == typeof(Color?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Blue":
+                    return Color.Blue;
+                case "Black":
+                    return Color.Black;
+                case "White":
+                    return Color.White;
+                case "Green":
+                    return Color.Green;
+                case "Red":
+                    return Color.Red;
+            }
+            throw new Exception("Cannot unmarshal type Color");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Color)untypedValue;
+            switch (value)
+            {
+                case Color.Blue:
+                    serializer.Serialize(writer, "Blue");
+                    return;
+                case Color.Black:
+                    serializer.Serialize(writer, "Black");
+                    return;
+                case Color.White:
+                    serializer.Serialize(writer, "White");
+                    return;
+                case Color.Green:
+                    serializer.Serialize(writer, "Green");
+                    return;
+                case Color.Red:
+                    serializer.Serialize(writer, "Red");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Color");
+        }
+
+        public static readonly ColorConverter Singleton = new ColorConverter();
+    }
+
+    internal class LayoutConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Layout) || t == typeof(Layout?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "normal")
+            {
+                return Layout.Normal;
+            }
+            throw new Exception("Cannot unmarshal type Layout");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Layout)untypedValue;
+            if (value == Layout.Normal)
+            {
+                serializer.Serialize(writer, "normal");
+                return;
+            }
+            throw new Exception("Cannot marshal type Layout");
+        }
+
+        public static readonly LayoutConverter Singleton = new LayoutConverter();
+    }
+
+    internal class FormatConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Format) || t == typeof(Format?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Commander":
+                    return Format.Commander;
+                case "Legacy":
+                    return Format.Legacy;
+                case "Modern":
+                    return Format.Modern;
+                case "Vintage":
+                    return Format.Vintage;
+                case "Time Spiral Block":
+                    return Format.TimeSpiralBlock;
+                case "Ravnica Block":
+                    return Format.RavnicaBlock;
+                case "Ice Age Block":
+                    return Format.IceAgeBlock;
+                case "Tempest Block":
+                    return Format.TempestBlock;
+                case "Onslaught Block":
+                    return Format.OnslaughtBlock;
+                case "Masques Block":
+                    return Format.MasquesBlock;
+                case "Mirage Block":
+                    return Format.MirageBlock;
+                case "Urza Block":
+                    return Format.UrzaBlock;
+                case "Scars of Mirrodin Block":
+                    return Format.ScarsOfMirrodinBlock;
+                case "Mirrodin Block":
+                    return Format.MirrodinBlock;
+                case "Amonkhet Block":
+                    return Format.AmonkhetBlock;
+                case "Battle for Zendikar Block":
+                    return Format.BattleForZendikarBlock;
+                case "Innistrad Block":
+                    return Format.InnistradBlock;
+                case "Invasion Block":
+                    return Format.InvasionBlock;
+                case "Kaladesh Block":
+                    return Format.KaladeshBlock;
+                case "Kamigawa Block":
+                    return Format.KamigawaBlock;
+                case "Khans of Tarkir Block":
+                    return Format.KhansOfTarkirBlock;
+                case "Lorwyn-Shadowmoor Block":
+                    return Format.LorwynShadowmoorBlock;
+                case "Odyssey Block":
+                    return Format.OdysseyBlock;
+                case "Return to Ravnica Block":
+                    return Format.ReturnToRavnicaBlock;
+                case "Shadows over Innistrad Block":
+                    return Format.ShadowsOverInnistradBlock;
+                case "Shards of Alara Block":
+                    return Format.ShardsOfAlaraBlock;
+                case "Standard":
+                    return Format.Standard;
+                case "Theros Block":
+                    return Format.TherosBlock;
+                case "Un-Sets":
+                    return Format.UnSets;
+                case "Zendikar Block":
+                    return Format.ZendikarBlock;
+            }
+            throw new Exception("Cannot unmarshal type Format");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Format)untypedValue;
+            switch (value)
+            {
+                case Format.Commander:
+                    serializer.Serialize(writer, "Commander");
+                    return;
+                case Format.Legacy:
+                    serializer.Serialize(writer, "Legacy");
+                    return;
+                case Format.Modern:
+                    serializer.Serialize(writer, "Modern");
+                    return;
+                case Format.Vintage:
+                    serializer.Serialize(writer, "Vintage");
+                    return;
+                case Format.TimeSpiralBlock:
+                    serializer.Serialize(writer, "Time Spiral Block");
+                    return;
+                case Format.RavnicaBlock:
+                    serializer.Serialize(writer, "Ravnica Block");
+                    return;
+                case Format.IceAgeBlock:
+                    serializer.Serialize(writer, "Ice Age Block");
+                    return;
+                case Format.TempestBlock:
+                    serializer.Serialize(writer, "Tempest Block");
+                    return;
+                case Format.OnslaughtBlock:
+                    serializer.Serialize(writer, "Onslaught Block");
+                    return;
+                case Format.MasquesBlock:
+                    serializer.Serialize(writer, "Masques Block");
+                    return;
+                case Format.MirageBlock:
+                    serializer.Serialize(writer, "Mirage Block");
+                    return;
+                case Format.UrzaBlock:
+                    serializer.Serialize(writer, "Urza Block");
+                    return;
+                case Format.ScarsOfMirrodinBlock:
+                    serializer.Serialize(writer, "Scars of Mirrodin Block");
+                    return;
+                case Format.MirrodinBlock:
+                    serializer.Serialize(writer, "Mirrodin Block");
+                    return;
+                case Format.AmonkhetBlock:
+                    serializer.Serialize(writer, "Amonkhet Block");
+                    return;
+                case Format.BattleForZendikarBlock:
+                    serializer.Serialize(writer, "Battle for Zendikar Block");
+                    return;
+                case Format.InnistradBlock:
+                    serializer.Serialize(writer, "Innistrad Block");
+                    return;
+                case Format.InvasionBlock:
+                    serializer.Serialize(writer, "Invasion Block");
+                    return;
+                case Format.KaladeshBlock:
+                    serializer.Serialize(writer, "Kaladesh Block");
+                    return;
+                case Format.KamigawaBlock:
+                    serializer.Serialize(writer, "Kamigawa Block");
+                    return;
+                case Format.KhansOfTarkirBlock:
+                    serializer.Serialize(writer, "Khans of Tarkir Block");
+                    return;
+                case Format.LorwynShadowmoorBlock:
+                    serializer.Serialize(writer, "Lorwyn-Shadowmoor Block");
+                    return;
+                case Format.OdysseyBlock:
+                    serializer.Serialize(writer, "Odyssey Block");
+                    return;
+                case Format.ReturnToRavnicaBlock:
+                    serializer.Serialize(writer, "Return to Ravnica Block");
+                    return;
+                case Format.ShadowsOverInnistradBlock:
+                    serializer.Serialize(writer, "Shadows over Innistrad Block");
+                    return;
+                case Format.ShardsOfAlaraBlock:
+                    serializer.Serialize(writer, "Shards of Alara Block");
+                    return;
+                case Format.Standard:
+                    serializer.Serialize(writer, "Standard");
+                    return;
+                case Format.TherosBlock:
+                    serializer.Serialize(writer, "Theros Block");
+                    return;
+                case Format.UnSets:
+                    serializer.Serialize(writer, "Un-Sets");
+                    return;
+                case Format.ZendikarBlock:
+                    serializer.Serialize(writer, "Zendikar Block");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Format");
+        }
+
+        public static readonly FormatConverter Singleton = new FormatConverter();
+    }
+
+    internal class LegalityEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LegalityEnum) || t == typeof(LegalityEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Legal":
+                    return LegalityEnum.Legal;
+                case "Banned":
+                    return LegalityEnum.Banned;
+                case "Restricted":
+                    return LegalityEnum.Restricted;
+            }
+            throw new Exception("Cannot unmarshal type LegalityEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (LegalityEnum)untypedValue;
+            switch (value)
+            {
+                case LegalityEnum.Legal:
+                    serializer.Serialize(writer, "Legal");
+                    return;
+                case LegalityEnum.Banned:
+                    serializer.Serialize(writer, "Banned");
+                    return;
+                case LegalityEnum.Restricted:
+                    serializer.Serialize(writer, "Restricted");
+                    return;
+            }
+            throw new Exception("Cannot marshal type LegalityEnum");
+        }
+
+        public static readonly LegalityEnumConverter Singleton = new LegalityEnumConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RarityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rarity) || t == typeof(Rarity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Uncommon":
+                    return Rarity.Uncommon;
+                case "Rare":
+                    return Rarity.Rare;
+                case "Common":
+                    return Rarity.Common;
+                case "Basic Land":
+                    return Rarity.BasicLand;
+            }
+            throw new Exception("Cannot unmarshal type Rarity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Rarity)untypedValue;
+            switch (value)
+            {
+                case Rarity.Uncommon:
+                    serializer.Serialize(writer, "Uncommon");
+                    return;
+                case Rarity.Rare:
+                    serializer.Serialize(writer, "Rare");
+                    return;
+                case Rarity.Common:
+                    serializer.Serialize(writer, "Common");
+                    return;
+                case Rarity.BasicLand:
+                    serializer.Serialize(writer, "Basic Land");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Rarity");
+        }
+
+        public static readonly RarityConverter Singleton = new RarityConverter();
+    }
+
+    internal class SupertypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Supertype) || t == typeof(Supertype?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Basic")
+            {
+                return Supertype.Basic;
+            }
+            throw new Exception("Cannot unmarshal type Supertype");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Supertype)untypedValue;
+            if (value == Supertype.Basic)
+            {
+                serializer.Serialize(writer, "Basic");
+                return;
+            }
+            throw new Exception("Cannot marshal type Supertype");
+        }
+
+        public static readonly SupertypeConverter Singleton = new SupertypeConverter();
+    }
+
+    internal class TypeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeElement) || t == typeof(TypeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Creature":
+                    return TypeElement.Creature;
+                case "Instant":
+                    return TypeElement.Instant;
+                case "Enchantment":
+                    return TypeElement.Enchantment;
+                case "Artifact":
+                    return TypeElement.Artifact;
+                case "Sorcery":
+                    return TypeElement.Sorcery;
+                case "Land":
+                    return TypeElement.Land;
+            }
+            throw new Exception("Cannot unmarshal type TypeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeElement)untypedValue;
+            switch (value)
+            {
+                case TypeElement.Creature:
+                    serializer.Serialize(writer, "Creature");
+                    return;
+                case TypeElement.Instant:
+                    serializer.Serialize(writer, "Instant");
+                    return;
+                case TypeElement.Enchantment:
+                    serializer.Serialize(writer, "Enchantment");
+                    return;
+                case TypeElement.Artifact:
+                    serializer.Serialize(writer, "Artifact");
+                    return;
+                case TypeElement.Sorcery:
+                    serializer.Serialize(writer, "Sorcery");
+                    return;
+                case TypeElement.Land:
+                    serializer.Serialize(writer, "Land");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeElement");
+        }
+
+        public static readonly TypeElementConverter Singleton = new TypeElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/dd1ce.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/dd1ce.json/default/QuickType.cs
new file mode 100644
index 0000000..2b7bd44
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/dd1ce.json/default/QuickType.cs
@@ -0,0 +1,817 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("booster", Required = Required.Always)]
+        public Booster[] Booster { get; set; }
+
+        [JsonProperty("border", Required = Required.Always)]
+        public string Border { get; set; }
+
+        [JsonProperty("cards", Required = Required.Always)]
+        public Card[] Cards { get; set; }
+
+        [JsonProperty("code", Required = Required.Always)]
+        public string Code { get; set; }
+
+        [JsonProperty("gathererCode", Required = Required.Always)]
+        public string GathererCode { get; set; }
+
+        [JsonProperty("magicCardsInfoCode", Required = Required.Always)]
+        public string MagicCardsInfoCode { get; set; }
+
+        [JsonProperty("mkm_id", Required = Required.Always)]
+        public long MkmId { get; set; }
+
+        [JsonProperty("mkm_name", Required = Required.Always)]
+        public string MkmName { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("releaseDate", Required = Required.Always)]
+        public DateTimeOffset ReleaseDate { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Card
+    {
+        [JsonProperty("artist", Required = Required.Always)]
+        public string Artist { get; set; }
+
+        [JsonProperty("cmc", Required = Required.Always)]
+        public long Cmc { get; set; }
+
+        [JsonProperty("colorIdentity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ColorIdentity[]? ColorIdentity { get; set; }
+
+        [JsonProperty("colors", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Color[]? Colors { get; set; }
+
+        [JsonProperty("flavor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Flavor { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("imageName", Required = Required.Always)]
+        public string ImageName { get; set; }
+
+        [JsonProperty("layout", Required = Required.Always)]
+        public Layout Layout { get; set; }
+
+        [JsonProperty("legalities", Required = Required.Always)]
+        public LegalityElement[] Legalities { get; set; }
+
+        [JsonProperty("manaCost", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? ManaCost { get; set; }
+
+        [JsonProperty("mciNumber", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? MciNumber { get; set; }
+
+        [JsonProperty("multiverseid", Required = Required.Always)]
+        public long Multiverseid { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("originalText", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? OriginalText { get; set; }
+
+        [JsonProperty("originalType", Required = Required.Always)]
+        public string OriginalType { get; set; }
+
+        [JsonProperty("power", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Power { get; set; }
+
+        [JsonProperty("printings", Required = Required.Always)]
+        public string[] Printings { get; set; }
+
+        [JsonProperty("rarity", Required = Required.Always)]
+        public Rarity Rarity { get; set; }
+
+        [JsonProperty("reserved", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Reserved { get; set; }
+
+        [JsonProperty("rulings", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Ruling[]? Rulings { get; set; }
+
+        [JsonProperty("subtypes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Subtypes { get; set; }
+
+        [JsonProperty("supertypes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Supertype[]? Supertypes { get; set; }
+
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+
+        [JsonProperty("toughness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Toughness { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("types", Required = Required.Always)]
+        public TypeElement[] Types { get; set; }
+
+        [JsonProperty("variations", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long[]? Variations { get; set; }
+    }
+
+    public partial record LegalityElement
+    {
+        [JsonProperty("format", Required = Required.Always)]
+        public Format Format { get; set; }
+
+        [JsonProperty("legality", Required = Required.Always)]
+        public LegalityEnum Legality { get; set; }
+    }
+
+    public partial record Ruling
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public enum Booster { Rare, Uncommon, Common };
+
+    public enum ColorIdentity { U, B, W, G, R };
+
+    public enum Color { Blue, Black, White, Green, Red };
+
+    public enum Layout { Normal };
+
+    public enum Format { Commander, Legacy, Modern, Vintage, TimeSpiralBlock, RavnicaBlock, IceAgeBlock, TempestBlock, OnslaughtBlock, MasquesBlock, MirageBlock, UrzaBlock, ScarsOfMirrodinBlock, MirrodinBlock, AmonkhetBlock, BattleForZendikarBlock, InnistradBlock, InvasionBlock, KaladeshBlock, KamigawaBlock, KhansOfTarkirBlock, LorwynShadowmoorBlock, OdysseyBlock, ReturnToRavnicaBlock, ShadowsOverInnistradBlock, ShardsOfAlaraBlock, Standard, TherosBlock, UnSets, ZendikarBlock };
+
+    public enum LegalityEnum { Legal, Banned, Restricted };
+
+    public enum Rarity { Uncommon, Rare, Common, BasicLand };
+
+    public enum Supertype { Basic };
+
+    public enum TypeElement { Creature, Instant, Enchantment, Artifact, Sorcery, Land };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                BoosterConverter.Singleton,
+                ColorIdentityConverter.Singleton,
+                ColorConverter.Singleton,
+                LayoutConverter.Singleton,
+                FormatConverter.Singleton,
+                LegalityEnumConverter.Singleton,
+                RarityConverter.Singleton,
+                SupertypeConverter.Singleton,
+                TypeElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class BoosterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Booster) || t == typeof(Booster?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "rare":
+                    return Booster.Rare;
+                case "uncommon":
+                    return Booster.Uncommon;
+                case "common":
+                    return Booster.Common;
+            }
+            throw new Exception("Cannot unmarshal type Booster");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Booster)untypedValue;
+            switch (value)
+            {
+                case Booster.Rare:
+                    serializer.Serialize(writer, "rare");
+                    return;
+                case Booster.Uncommon:
+                    serializer.Serialize(writer, "uncommon");
+                    return;
+                case Booster.Common:
+                    serializer.Serialize(writer, "common");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Booster");
+        }
+
+        public static readonly BoosterConverter Singleton = new BoosterConverter();
+    }
+
+    internal class ColorIdentityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ColorIdentity) || t == typeof(ColorIdentity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "U":
+                    return ColorIdentity.U;
+                case "B":
+                    return ColorIdentity.B;
+                case "W":
+                    return ColorIdentity.W;
+                case "G":
+                    return ColorIdentity.G;
+                case "R":
+                    return ColorIdentity.R;
+            }
+            throw new Exception("Cannot unmarshal type ColorIdentity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ColorIdentity)untypedValue;
+            switch (value)
+            {
+                case ColorIdentity.U:
+                    serializer.Serialize(writer, "U");
+                    return;
+                case ColorIdentity.B:
+                    serializer.Serialize(writer, "B");
+                    return;
+                case ColorIdentity.W:
+                    serializer.Serialize(writer, "W");
+                    return;
+                case ColorIdentity.G:
+                    serializer.Serialize(writer, "G");
+                    return;
+                case ColorIdentity.R:
+                    serializer.Serialize(writer, "R");
+                    return;
+            }
+            throw new Exception("Cannot marshal type ColorIdentity");
+        }
+
+        public static readonly ColorIdentityConverter Singleton = new ColorIdentityConverter();
+    }
+
+    internal class ColorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Color) || t == typeof(Color?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Blue":
+                    return Color.Blue;
+                case "Black":
+                    return Color.Black;
+                case "White":
+                    return Color.White;
+                case "Green":
+                    return Color.Green;
+                case "Red":
+                    return Color.Red;
+            }
+            throw new Exception("Cannot unmarshal type Color");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Color)untypedValue;
+            switch (value)
+            {
+                case Color.Blue:
+                    serializer.Serialize(writer, "Blue");
+                    return;
+                case Color.Black:
+                    serializer.Serialize(writer, "Black");
+                    return;
+                case Color.White:
+                    serializer.Serialize(writer, "White");
+                    return;
+                case Color.Green:
+                    serializer.Serialize(writer, "Green");
+                    return;
+                case Color.Red:
+                    serializer.Serialize(writer, "Red");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Color");
+        }
+
+        public static readonly ColorConverter Singleton = new ColorConverter();
+    }
+
+    internal class LayoutConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Layout) || t == typeof(Layout?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "normal")
+            {
+                return Layout.Normal;
+            }
+            throw new Exception("Cannot unmarshal type Layout");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Layout)untypedValue;
+            if (value == Layout.Normal)
+            {
+                serializer.Serialize(writer, "normal");
+                return;
+            }
+            throw new Exception("Cannot marshal type Layout");
+        }
+
+        public static readonly LayoutConverter Singleton = new LayoutConverter();
+    }
+
+    internal class FormatConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Format) || t == typeof(Format?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Commander":
+                    return Format.Commander;
+                case "Legacy":
+                    return Format.Legacy;
+                case "Modern":
+                    return Format.Modern;
+                case "Vintage":
+                    return Format.Vintage;
+                case "Time Spiral Block":
+                    return Format.TimeSpiralBlock;
+                case "Ravnica Block":
+                    return Format.RavnicaBlock;
+                case "Ice Age Block":
+                    return Format.IceAgeBlock;
+                case "Tempest Block":
+                    return Format.TempestBlock;
+                case "Onslaught Block":
+                    return Format.OnslaughtBlock;
+                case "Masques Block":
+                    return Format.MasquesBlock;
+                case "Mirage Block":
+                    return Format.MirageBlock;
+                case "Urza Block":
+                    return Format.UrzaBlock;
+                case "Scars of Mirrodin Block":
+                    return Format.ScarsOfMirrodinBlock;
+                case "Mirrodin Block":
+                    return Format.MirrodinBlock;
+                case "Amonkhet Block":
+                    return Format.AmonkhetBlock;
+                case "Battle for Zendikar Block":
+                    return Format.BattleForZendikarBlock;
+                case "Innistrad Block":
+                    return Format.InnistradBlock;
+                case "Invasion Block":
+                    return Format.InvasionBlock;
+                case "Kaladesh Block":
+                    return Format.KaladeshBlock;
+                case "Kamigawa Block":
+                    return Format.KamigawaBlock;
+                case "Khans of Tarkir Block":
+                    return Format.KhansOfTarkirBlock;
+                case "Lorwyn-Shadowmoor Block":
+                    return Format.LorwynShadowmoorBlock;
+                case "Odyssey Block":
+                    return Format.OdysseyBlock;
+                case "Return to Ravnica Block":
+                    return Format.ReturnToRavnicaBlock;
+                case "Shadows over Innistrad Block":
+                    return Format.ShadowsOverInnistradBlock;
+                case "Shards of Alara Block":
+                    return Format.ShardsOfAlaraBlock;
+                case "Standard":
+                    return Format.Standard;
+                case "Theros Block":
+                    return Format.TherosBlock;
+                case "Un-Sets":
+                    return Format.UnSets;
+                case "Zendikar Block":
+                    return Format.ZendikarBlock;
+            }
+            throw new Exception("Cannot unmarshal type Format");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Format)untypedValue;
+            switch (value)
+            {
+                case Format.Commander:
+                    serializer.Serialize(writer, "Commander");
+                    return;
+                case Format.Legacy:
+                    serializer.Serialize(writer, "Legacy");
+                    return;
+                case Format.Modern:
+                    serializer.Serialize(writer, "Modern");
+                    return;
+                case Format.Vintage:
+                    serializer.Serialize(writer, "Vintage");
+                    return;
+                case Format.TimeSpiralBlock:
+                    serializer.Serialize(writer, "Time Spiral Block");
+                    return;
+                case Format.RavnicaBlock:
+                    serializer.Serialize(writer, "Ravnica Block");
+                    return;
+                case Format.IceAgeBlock:
+                    serializer.Serialize(writer, "Ice Age Block");
+                    return;
+                case Format.TempestBlock:
+                    serializer.Serialize(writer, "Tempest Block");
+                    return;
+                case Format.OnslaughtBlock:
+                    serializer.Serialize(writer, "Onslaught Block");
+                    return;
+                case Format.MasquesBlock:
+                    serializer.Serialize(writer, "Masques Block");
+                    return;
+                case Format.MirageBlock:
+                    serializer.Serialize(writer, "Mirage Block");
+                    return;
+                case Format.UrzaBlock:
+                    serializer.Serialize(writer, "Urza Block");
+                    return;
+                case Format.ScarsOfMirrodinBlock:
+                    serializer.Serialize(writer, "Scars of Mirrodin Block");
+                    return;
+                case Format.MirrodinBlock:
+                    serializer.Serialize(writer, "Mirrodin Block");
+                    return;
+                case Format.AmonkhetBlock:
+                    serializer.Serialize(writer, "Amonkhet Block");
+                    return;
+                case Format.BattleForZendikarBlock:
+                    serializer.Serialize(writer, "Battle for Zendikar Block");
+                    return;
+                case Format.InnistradBlock:
+                    serializer.Serialize(writer, "Innistrad Block");
+                    return;
+                case Format.InvasionBlock:
+                    serializer.Serialize(writer, "Invasion Block");
+                    return;
+                case Format.KaladeshBlock:
+                    serializer.Serialize(writer, "Kaladesh Block");
+                    return;
+                case Format.KamigawaBlock:
+                    serializer.Serialize(writer, "Kamigawa Block");
+                    return;
+                case Format.KhansOfTarkirBlock:
+                    serializer.Serialize(writer, "Khans of Tarkir Block");
+                    return;
+                case Format.LorwynShadowmoorBlock:
+                    serializer.Serialize(writer, "Lorwyn-Shadowmoor Block");
+                    return;
+                case Format.OdysseyBlock:
+                    serializer.Serialize(writer, "Odyssey Block");
+                    return;
+                case Format.ReturnToRavnicaBlock:
+                    serializer.Serialize(writer, "Return to Ravnica Block");
+                    return;
+                case Format.ShadowsOverInnistradBlock:
+                    serializer.Serialize(writer, "Shadows over Innistrad Block");
+                    return;
+                case Format.ShardsOfAlaraBlock:
+                    serializer.Serialize(writer, "Shards of Alara Block");
+                    return;
+                case Format.Standard:
+                    serializer.Serialize(writer, "Standard");
+                    return;
+                case Format.TherosBlock:
+                    serializer.Serialize(writer, "Theros Block");
+                    return;
+                case Format.UnSets:
+                    serializer.Serialize(writer, "Un-Sets");
+                    return;
+                case Format.ZendikarBlock:
+                    serializer.Serialize(writer, "Zendikar Block");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Format");
+        }
+
+        public static readonly FormatConverter Singleton = new FormatConverter();
+    }
+
+    internal class LegalityEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LegalityEnum) || t == typeof(LegalityEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Legal":
+                    return LegalityEnum.Legal;
+                case "Banned":
+                    return LegalityEnum.Banned;
+                case "Restricted":
+                    return LegalityEnum.Restricted;
+            }
+            throw new Exception("Cannot unmarshal type LegalityEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (LegalityEnum)untypedValue;
+            switch (value)
+            {
+                case LegalityEnum.Legal:
+                    serializer.Serialize(writer, "Legal");
+                    return;
+                case LegalityEnum.Banned:
+                    serializer.Serialize(writer, "Banned");
+                    return;
+                case LegalityEnum.Restricted:
+                    serializer.Serialize(writer, "Restricted");
+                    return;
+            }
+            throw new Exception("Cannot marshal type LegalityEnum");
+        }
+
+        public static readonly LegalityEnumConverter Singleton = new LegalityEnumConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RarityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rarity) || t == typeof(Rarity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Uncommon":
+                    return Rarity.Uncommon;
+                case "Rare":
+                    return Rarity.Rare;
+                case "Common":
+                    return Rarity.Common;
+                case "Basic Land":
+                    return Rarity.BasicLand;
+            }
+            throw new Exception("Cannot unmarshal type Rarity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Rarity)untypedValue;
+            switch (value)
+            {
+                case Rarity.Uncommon:
+                    serializer.Serialize(writer, "Uncommon");
+                    return;
+                case Rarity.Rare:
+                    serializer.Serialize(writer, "Rare");
+                    return;
+                case Rarity.Common:
+                    serializer.Serialize(writer, "Common");
+                    return;
+                case Rarity.BasicLand:
+                    serializer.Serialize(writer, "Basic Land");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Rarity");
+        }
+
+        public static readonly RarityConverter Singleton = new RarityConverter();
+    }
+
+    internal class SupertypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Supertype) || t == typeof(Supertype?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Basic")
+            {
+                return Supertype.Basic;
+            }
+            throw new Exception("Cannot unmarshal type Supertype");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Supertype)untypedValue;
+            if (value == Supertype.Basic)
+            {
+                serializer.Serialize(writer, "Basic");
+                return;
+            }
+            throw new Exception("Cannot marshal type Supertype");
+        }
+
+        public static readonly SupertypeConverter Singleton = new SupertypeConverter();
+    }
+
+    internal class TypeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeElement) || t == typeof(TypeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Creature":
+                    return TypeElement.Creature;
+                case "Instant":
+                    return TypeElement.Instant;
+                case "Enchantment":
+                    return TypeElement.Enchantment;
+                case "Artifact":
+                    return TypeElement.Artifact;
+                case "Sorcery":
+                    return TypeElement.Sorcery;
+                case "Land":
+                    return TypeElement.Land;
+            }
+            throw new Exception("Cannot unmarshal type TypeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeElement)untypedValue;
+            switch (value)
+            {
+                case TypeElement.Creature:
+                    serializer.Serialize(writer, "Creature");
+                    return;
+                case TypeElement.Instant:
+                    serializer.Serialize(writer, "Instant");
+                    return;
+                case TypeElement.Enchantment:
+                    serializer.Serialize(writer, "Enchantment");
+                    return;
+                case TypeElement.Artifact:
+                    serializer.Serialize(writer, "Artifact");
+                    return;
+                case TypeElement.Sorcery:
+                    serializer.Serialize(writer, "Sorcery");
+                    return;
+                case TypeElement.Land:
+                    serializer.Serialize(writer, "Land");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeElement");
+        }
+
+        public static readonly TypeElementConverter Singleton = new TypeElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/dec3a.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/dec3a.json/default/QuickType.cs
new file mode 100644
index 0000000..72591e9
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/dec3a.json/default/QuickType.cs
@@ -0,0 +1,243 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("metadata", Required = Required.Always)]
+        public Metadata Metadata { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Metadata
+    {
+        [JsonProperty("executionTime", Required = Required.Always)]
+        public double ExecutionTime { get; set; }
+
+        [JsonProperty("responseInfo", Required = Required.Always)]
+        public ResponseInfo ResponseInfo { get; set; }
+
+        [JsonProperty("resultset", Required = Required.Always)]
+        public Resultset Resultset { get; set; }
+    }
+
+    public partial record ResponseInfo
+    {
+        [JsonProperty("developerMessage", Required = Required.Always)]
+        public string DeveloperMessage { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Resultset
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("page", Required = Required.Always)]
+        public long Page { get; set; }
+
+        [JsonProperty("pagesize", Required = Required.Always)]
+        public long Pagesize { get; set; }
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("about_office", Required = Required.Always)]
+        public string AboutOffice { get; set; }
+
+        [JsonProperty("application_process", Required = Required.Always)]
+        public string ApplicationProcess { get; set; }
+
+        [JsonProperty("body", Required = Required.Always)]
+        public string Body { get; set; }
+
+        [JsonProperty("changed", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Changed { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Created { get; set; }
+
+        [JsonProperty("deadline", Required = Required.AllowNull)]
+        public object Deadline { get; set; }
+
+        [JsonProperty("hiring_office", Required = Required.AllowNull)]
+        public object HiringOffice { get; set; }
+
+        [JsonProperty("hiring_org", Required = Required.Always)]
+        public HiringOrg HiringOrg { get; set; }
+
+        [JsonProperty("job_id", Required = Required.AllowNull)]
+        public object JobId { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("num_positions", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long NumPositions { get; set; }
+
+        [JsonProperty("position", Required = Required.Always)]
+        public string Position { get; set; }
+
+        [JsonProperty("practice_area", Required = Required.Always)]
+        public string PracticeArea { get; set; }
+
+        [JsonProperty("qualifications", Required = Required.Always)]
+        public string Qualifications { get; set; }
+
+        [JsonProperty("relocation_expenses", Required = Required.AllowNull)]
+        public object RelocationExpenses { get; set; }
+
+        [JsonProperty("salary", Required = Required.Always)]
+        public string Salary { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("travel", Required = Required.Always)]
+        public string Travel { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("uuid", Required = Required.Always)]
+        public Guid Uuid { get; set; }
+
+        [JsonProperty("vuuid", Required = Required.Always)]
+        public Guid Vuuid { get; set; }
+    }
+
+    public partial record HiringOrg
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("uuid", Required = Required.Always)]
+        public Guid Uuid { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("administrative_area", Required = Required.Always)]
+        public string AdministrativeArea { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("fax_number", Required = Required.Always)]
+        public string FaxNumber { get; set; }
+
+        [JsonProperty("locality", Required = Required.Always)]
+        public string Locality { get; set; }
+
+        [JsonProperty("mobile_number", Required = Required.Always)]
+        public string MobileNumber { get; set; }
+
+        [JsonProperty("phone_number", Required = Required.Always)]
+        public string PhoneNumber { get; set; }
+
+        [JsonProperty("phone_number_extension", Required = Required.Always)]
+        public string PhoneNumberExtension { get; set; }
+
+        [JsonProperty("postal_code", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long PostalCode { get; set; }
+
+        [JsonProperty("sub_premise", Required = Required.AllowNull)]
+        public object SubPremise { get; set; }
+
+        [JsonProperty("thoroughfare", Required = Required.Always)]
+        public string Thoroughfare { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/df957.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/df957.json/default/QuickType.cs
new file mode 100644
index 0000000..1069da3
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/df957.json/default/QuickType.cs
@@ -0,0 +1,354 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/e0ac7.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/e0ac7.json/default/QuickType.cs
new file mode 100644
index 0000000..8d42d1c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/e0ac7.json/default/QuickType.cs
@@ -0,0 +1,443 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("pagination", Required = Required.Always)]
+        public Pagination Pagination { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("bitly_gif_url", Required = Required.Always)]
+        public Uri BitlyGifUrl { get; set; }
+
+        [JsonProperty("bitly_url", Required = Required.Always)]
+        public Uri BitlyUrl { get; set; }
+
+        [JsonProperty("content_url", Required = Required.Always)]
+        public string ContentUrl { get; set; }
+
+        [JsonProperty("embed_url", Required = Required.Always)]
+        public Uri EmbedUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Images Images { get; set; }
+
+        [JsonProperty("import_datetime", Required = Required.Always)]
+        public string ImportDatetime { get; set; }
+
+        [JsonProperty("is_indexable", Required = Required.Always)]
+        public long IsIndexable { get; set; }
+
+        [JsonProperty("rating", Required = Required.Always)]
+        public Rating Rating { get; set; }
+
+        [JsonProperty("slug", Required = Required.Always)]
+        public string Slug { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public string Source { get; set; }
+
+        [JsonProperty("source_post_url", Required = Required.Always)]
+        public string SourcePostUrl { get; set; }
+
+        [JsonProperty("source_tld", Required = Required.Always)]
+        public string SourceTld { get; set; }
+
+        [JsonProperty("trending_datetime", Required = Required.Always)]
+        public string TrendingDatetime { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public User? User { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public string Username { get; set; }
+    }
+
+    public partial record Images
+    {
+        [JsonProperty("downsized", Required = Required.Always)]
+        public Downsized Downsized { get; set; }
+
+        [JsonProperty("downsized_large", Required = Required.Always)]
+        public Downsized DownsizedLarge { get; set; }
+
+        [JsonProperty("downsized_medium", Required = Required.Always)]
+        public Downsized DownsizedMedium { get; set; }
+
+        [JsonProperty("downsized_small", Required = Required.Always)]
+        public DownsizedSmall DownsizedSmall { get; set; }
+
+        [JsonProperty("downsized_still", Required = Required.Always)]
+        public Downsized DownsizedStill { get; set; }
+
+        [JsonProperty("fixed_height", Required = Required.Always)]
+        public FixedHeight FixedHeight { get; set; }
+
+        [JsonProperty("fixed_height_downsampled", Required = Required.Always)]
+        public FixedHeight FixedHeightDownsampled { get; set; }
+
+        [JsonProperty("fixed_height_small", Required = Required.Always)]
+        public FixedHeight FixedHeightSmall { get; set; }
+
+        [JsonProperty("fixed_height_small_still", Required = Required.Always)]
+        public Downsized FixedHeightSmallStill { get; set; }
+
+        [JsonProperty("fixed_height_still", Required = Required.Always)]
+        public Downsized FixedHeightStill { get; set; }
+
+        [JsonProperty("fixed_width", Required = Required.Always)]
+        public FixedHeight FixedWidth { get; set; }
+
+        [JsonProperty("fixed_width_downsampled", Required = Required.Always)]
+        public FixedHeight FixedWidthDownsampled { get; set; }
+
+        [JsonProperty("fixed_width_small", Required = Required.Always)]
+        public FixedHeight FixedWidthSmall { get; set; }
+
+        [JsonProperty("fixed_width_small_still", Required = Required.Always)]
+        public Downsized FixedWidthSmallStill { get; set; }
+
+        [JsonProperty("fixed_width_still", Required = Required.Always)]
+        public Downsized FixedWidthStill { get; set; }
+
+        [JsonProperty("hd", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DownsizedSmall? Hd { get; set; }
+
+        [JsonProperty("looping", Required = Required.Always)]
+        public Looping Looping { get; set; }
+
+        [JsonProperty("original", Required = Required.Always)]
+        public FixedHeight Original { get; set; }
+
+        [JsonProperty("original_mp4", Required = Required.Always)]
+        public DownsizedSmall OriginalMp4 { get; set; }
+
+        [JsonProperty("original_still", Required = Required.Always)]
+        public Downsized OriginalStill { get; set; }
+
+        [JsonProperty("preview", Required = Required.Always)]
+        public DownsizedSmall Preview { get; set; }
+
+        [JsonProperty("preview_gif", Required = Required.Always)]
+        public Downsized PreviewGif { get; set; }
+
+        [JsonProperty("preview_webp", Required = Required.Always)]
+        public Downsized PreviewWebp { get; set; }
+    }
+
+    public partial record Downsized
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record DownsizedSmall
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record FixedHeight
+    {
+        [JsonProperty("frames", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Frames { get; set; }
+
+        [JsonProperty("hash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Hash { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Uri? Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Mp4Size { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("webp", Required = Required.Always)]
+        public Uri Webp { get; set; }
+
+        [JsonProperty("webp_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long WebpSize { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Looping
+    {
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+    }
+
+    public partial record User
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("banner_url", Required = Required.Always)]
+        public string BannerUrl { get; set; }
+
+        [JsonProperty("display_name", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("profile_url", Required = Required.Always)]
+        public Uri ProfileUrl { get; set; }
+
+        [JsonProperty("twitter", Required = Required.Always)]
+        public string Twitter { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public string Username { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("msg", Required = Required.Always)]
+        public string Msg { get; set; }
+
+        [JsonProperty("response_id", Required = Required.Always)]
+        public string ResponseId { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Pagination
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("total_count", Required = Required.Always)]
+        public long TotalCount { get; set; }
+    }
+
+    public enum Rating { G, Pg, Y };
+
+    public enum TypeEnum { Gif };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                RatingConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RatingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rating) || t == typeof(Rating?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "g":
+                    return Rating.G;
+                case "pg":
+                    return Rating.Pg;
+                case "y":
+                    return Rating.Y;
+            }
+            throw new Exception("Cannot unmarshal type Rating");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Rating)untypedValue;
+            switch (value)
+            {
+                case Rating.G:
+                    serializer.Serialize(writer, "g");
+                    return;
+                case Rating.Pg:
+                    serializer.Serialize(writer, "pg");
+                    return;
+                case Rating.Y:
+                    serializer.Serialize(writer, "y");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Rating");
+        }
+
+        public static readonly RatingConverter Singleton = new RatingConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "gif")
+            {
+                return TypeEnum.Gif;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.Gif)
+            {
+                serializer.Serialize(writer, "gif");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/e2915.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/e2915.json/default/QuickType.cs
new file mode 100644
index 0000000..ac8b50b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/e2915.json/default/QuickType.cs
@@ -0,0 +1,391 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public DateTimeOffset Created { get; set; }
+
+        [JsonProperty("lang", Required = Required.Always)]
+        public string Lang { get; set; }
+
+        [JsonProperty("results", Required = Required.Always)]
+        public Results Results { get; set; }
+    }
+
+    public partial record Results
+    {
+        [JsonProperty("channel", Required = Required.Always)]
+        public Channel Channel { get; set; }
+    }
+
+    public partial record Channel
+    {
+        [JsonProperty("astronomy", Required = Required.Always)]
+        public Astronomy Astronomy { get; set; }
+
+        [JsonProperty("atmosphere", Required = Required.Always)]
+        public Atmosphere Atmosphere { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("image", Required = Required.Always)]
+        public Image Image { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public Item Item { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("lastBuildDate", Required = Required.Always)]
+        public string LastBuildDate { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("location", Required = Required.Always)]
+        public Location Location { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ttl", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Ttl { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public Units Units { get; set; }
+
+        [JsonProperty("wind", Required = Required.Always)]
+        public Wind Wind { get; set; }
+    }
+
+    public partial record Astronomy
+    {
+        [JsonProperty("sunrise", Required = Required.Always)]
+        public string Sunrise { get; set; }
+
+        [JsonProperty("sunset", Required = Required.Always)]
+        public string Sunset { get; set; }
+    }
+
+    public partial record Atmosphere
+    {
+        [JsonProperty("humidity", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Humidity { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("rising", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Rising { get; set; }
+
+        [JsonProperty("visibility", Required = Required.Always)]
+        public string Visibility { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("condition", Required = Required.Always)]
+        public Condition Condition { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("forecast", Required = Required.Always)]
+        public Forecast[] Forecast { get; set; }
+
+        [JsonProperty("guid", Required = Required.Always)]
+        public GuidClass Guid { get; set; }
+
+        [JsonProperty("lat", Required = Required.Always)]
+        public string Lat { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public string Long { get; set; }
+
+        [JsonProperty("pubDate", Required = Required.Always)]
+        public string PubDate { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record Condition
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("temp", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Temp { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record Forecast
+    {
+        [JsonProperty("code", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("day", Required = Required.Always)]
+        public string Day { get; set; }
+
+        [JsonProperty("high", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long High { get; set; }
+
+        [JsonProperty("low", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Low { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public Text Text { get; set; }
+    }
+
+    public partial record GuidClass
+    {
+        [JsonProperty("isPermaLink", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool IsPermaLink { get; set; }
+    }
+
+    public partial record Location
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("region", Required = Required.Always)]
+        public string Region { get; set; }
+    }
+
+    public partial record Units
+    {
+        [JsonProperty("distance", Required = Required.Always)]
+        public string Distance { get; set; }
+
+        [JsonProperty("pressure", Required = Required.Always)]
+        public string Pressure { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        public string Speed { get; set; }
+
+        [JsonProperty("temperature", Required = Required.Always)]
+        public string Temperature { get; set; }
+    }
+
+    public partial record Wind
+    {
+        [JsonProperty("chill", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Chill { get; set; }
+
+        [JsonProperty("direction", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Direction { get; set; }
+
+        [JsonProperty("speed", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Speed { get; set; }
+    }
+
+    public enum Text { Sunny };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class TextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Text) || t == typeof(Text?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Sunny")
+            {
+                return Text.Sunny;
+            }
+            throw new Exception("Cannot unmarshal type Text");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Text)untypedValue;
+            if (value == Text.Sunny)
+            {
+                serializer.Serialize(writer, "Sunny");
+                return;
+            }
+            throw new Exception("Cannot marshal type Text");
+        }
+
+        public static readonly TextConverter Singleton = new TextConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/e2a58.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/e2a58.json/default/QuickType.cs
new file mode 100644
index 0000000..64cf691
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/e2a58.json/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public string Date { get; set; }
+
+        [JsonProperty("stop-and-search", Required = Required.Always)]
+        public string[] StopAndSearch { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/e324e.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/e324e.json/default/QuickType.cs
new file mode 100644
index 0000000..ed84b13
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/e324e.json/default/QuickType.cs
@@ -0,0 +1,233 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("basePath", Required = Required.Always)]
+        public string BasePath { get; set; }
+
+        [JsonProperty("definitions", Required = Required.Always)]
+        public Definitions Definitions { get; set; }
+
+        [JsonProperty("host", Required = Required.Always)]
+        public string Host { get; set; }
+
+        [JsonProperty("info", Required = Required.Always)]
+        public Info Info { get; set; }
+
+        [JsonProperty("paths", Required = Required.Always)]
+        public Paths Paths { get; set; }
+
+        [JsonProperty("produces", Required = Required.Always)]
+        public string[] Produces { get; set; }
+
+        [JsonProperty("schemes", Required = Required.Always)]
+        public string[] Schemes { get; set; }
+
+        [JsonProperty("swagger", Required = Required.Always)]
+        public string Swagger { get; set; }
+    }
+
+    public partial record Definitions
+    {
+        [JsonProperty("Rate", Required = Required.Always)]
+        public Rate Rate { get; set; }
+    }
+
+    public partial record Rate
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public Dictionary<string, Property> Properties { get; set; }
+    }
+
+    public partial record Property
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record Info
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("version", Required = Required.Always)]
+        public string Version { get; set; }
+    }
+
+    public partial record Paths
+    {
+        [JsonProperty("/tariff_rates/search", Required = Required.Always)]
+        public TariffRatesSearch TariffRatesSearch { get; set; }
+    }
+
+    public partial record TariffRatesSearch
+    {
+        [JsonProperty("get", Required = Required.Always)]
+        public Get Get { get; set; }
+    }
+
+    public partial record Get
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("parameters", Required = Required.Always)]
+        public Parameter[] Parameters { get; set; }
+
+        [JsonProperty("responses", Required = Required.Always)]
+        public Responses Responses { get; set; }
+
+        [JsonProperty("summary", Required = Required.Always)]
+        public string Summary { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+    }
+
+    public partial record Parameter
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public TypeEnum Format { get; set; }
+
+        [JsonProperty("in", Required = Required.Always)]
+        public string In { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("required", Required = Required.Always)]
+        public bool ParameterRequired { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record Responses
+    {
+        [JsonProperty("200", Required = Required.Always)]
+        public The200 The200 { get; set; }
+    }
+
+    public partial record The200
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("schema", Required = Required.Always)]
+        public Schema Schema { get; set; }
+    }
+
+    public partial record Schema
+    {
+        [JsonProperty("items", Required = Required.Always)]
+        public Items Items { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Items
+    {
+        [JsonProperty("$ref", Required = Required.Always)]
+        public string Ref { get; set; }
+    }
+
+    public enum TypeEnum { String };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TypeEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "string")
+            {
+                return TypeEnum.String;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.String)
+            {
+                serializer.Serialize(writer, "string");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/e53b5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/e53b5.json/default/QuickType.cs
new file mode 100644
index 0000000..ad1e161
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/e53b5.json/default/QuickType.cs
@@ -0,0 +1,267 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record PurpleTopLevel
+    {
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Date { get; set; }
+
+        [JsonProperty("decimal", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Decimal { get; set; }
+
+        [JsonProperty("indicator", Required = Required.Always)]
+        public Country Indicator { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Value { get; set; }
+    }
+
+    public partial record Country
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public Id Id { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public Value Value { get; set; }
+    }
+
+    public partial record FluffyTopLevel
+    {
+        [JsonProperty("page", Required = Required.Always)]
+        public long Page { get; set; }
+
+        [JsonProperty("pages", Required = Required.Always)]
+        public long Pages { get; set; }
+
+        [JsonProperty("per_page", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long PerPage { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+    }
+
+    public enum Id { In, SpPopTotl };
+
+    public enum Value { India, PopulationTotal };
+
+    public partial struct TopLevelUnion
+    {
+        public FluffyTopLevel? FluffyTopLevel;
+        public PurpleTopLevel[]? PurpleTopLevelArray;
+
+        public static implicit operator TopLevelUnion(FluffyTopLevel FluffyTopLevel) => new TopLevelUnion { FluffyTopLevel = FluffyTopLevel };
+        public static implicit operator TopLevelUnion(PurpleTopLevel[] PurpleTopLevelArray) => new TopLevelUnion { PurpleTopLevelArray = PurpleTopLevelArray };
+    }
+
+    public class TopLevel
+    {
+        public static TopLevelUnion[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevelUnion[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevelUnion[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TopLevelUnionConverter.Singleton,
+                IdConverter.Singleton,
+                ValueConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TopLevelUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TopLevelUnion) || t == typeof(TopLevelUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FluffyTopLevel>(reader);
+                    return new TopLevelUnion { FluffyTopLevel = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<PurpleTopLevel[]>(reader);
+                    return new TopLevelUnion { PurpleTopLevelArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type TopLevelUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TopLevelUnion)untypedValue;
+            if (value.PurpleTopLevelArray != null)
+            {
+                serializer.Serialize(writer, value.PurpleTopLevelArray);
+                return;
+            }
+            if (value.FluffyTopLevel != null)
+            {
+                serializer.Serialize(writer, value.FluffyTopLevel);
+                return;
+            }
+            throw new Exception("Cannot marshal type TopLevelUnion");
+        }
+
+        public static readonly TopLevelUnionConverter Singleton = new TopLevelUnionConverter();
+    }
+
+    internal class IdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Id) || t == typeof(Id?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "IN":
+                    return Id.In;
+                case "SP.POP.TOTL":
+                    return Id.SpPopTotl;
+            }
+            throw new Exception("Cannot unmarshal type Id");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Id)untypedValue;
+            switch (value)
+            {
+                case Id.In:
+                    serializer.Serialize(writer, "IN");
+                    return;
+                case Id.SpPopTotl:
+                    serializer.Serialize(writer, "SP.POP.TOTL");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Id");
+        }
+
+        public static readonly IdConverter Singleton = new IdConverter();
+    }
+
+    internal class ValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Value) || t == typeof(Value?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "India":
+                    return Value.India;
+                case "Population, total":
+                    return Value.PopulationTotal;
+            }
+            throw new Exception("Cannot unmarshal type Value");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Value)untypedValue;
+            switch (value)
+            {
+                case Value.India:
+                    serializer.Serialize(writer, "India");
+                    return;
+                case Value.PopulationTotal:
+                    serializer.Serialize(writer, "Population, total");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Value");
+        }
+
+        public static readonly ValueConverter Singleton = new ValueConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/e64a0.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/e64a0.json/default/QuickType.cs
new file mode 100644
index 0000000..543b9bd
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/e64a0.json/default/QuickType.cs
@@ -0,0 +1,89 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("args", Required = Required.Always)]
+        public Args Args { get; set; }
+
+        [JsonProperty("headers", Required = Required.Always)]
+        public Headers Headers { get; set; }
+
+        [JsonProperty("origin", Required = Required.Always)]
+        public string Origin { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Args
+    {
+    }
+
+    public partial record Headers
+    {
+        [JsonProperty("Accept-Encoding", Required = Required.Always)]
+        public string AcceptEncoding { get; set; }
+
+        [JsonProperty("Connection", Required = Required.Always)]
+        public string Connection { get; set; }
+
+        [JsonProperty("Host", Required = Required.Always)]
+        public string Host { get; set; }
+
+        [JsonProperty("User-Agent", Required = Required.Always)]
+        public string UserAgent { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/e8a0b.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/e8a0b.json/default/QuickType.cs
new file mode 100644
index 0000000..80f8e48
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/e8a0b.json/default/QuickType.cs
@@ -0,0 +1,113 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("age", Required = Required.Always)]
+        public long Age { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("females", Required = Required.Always)]
+        public long Females { get; set; }
+
+        [JsonProperty("males", Required = Required.Always)]
+        public long Males { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+
+        [JsonProperty("year", Required = Required.Always)]
+        public long Year { get; set; }
+    }
+
+    public enum Country { UnitedStates };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CountryConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CountryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Country) || t == typeof(Country?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "United States")
+            {
+                return Country.UnitedStates;
+            }
+            throw new Exception("Cannot unmarshal type Country");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Country)untypedValue;
+            if (value == Country.UnitedStates)
+            {
+                serializer.Serialize(writer, "United States");
+                return;
+            }
+            throw new Exception("Cannot marshal type Country");
+        }
+
+        public static readonly CountryConverter Singleton = new CountryConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/e8b04.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/e8b04.json/default/QuickType.cs
new file mode 100644
index 0000000..2197c10
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/e8b04.json/default/QuickType.cs
@@ -0,0 +1,1304 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("averageRating", Required = Required.Always)]
+        public long AverageRating { get; set; }
+
+        [JsonProperty("category", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Category { get; set; }
+
+        [JsonProperty("createdAt", Required = Required.Always)]
+        public long CreatedAt { get; set; }
+
+        [JsonProperty("description", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Description { get; set; }
+
+        [JsonProperty("displayType", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DisplayType? DisplayType { get; set; }
+
+        [JsonProperty("downloadCount", Required = Required.Always)]
+        public long DownloadCount { get; set; }
+
+        [JsonProperty("flags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TopLevelFlag[]? Flags { get; set; }
+
+        [JsonProperty("grants", Required = Required.Always)]
+        public Grant[] Grants { get; set; }
+
+        [JsonProperty("hideFromCatalog", Required = Required.Always)]
+        public bool HideFromCatalog { get; set; }
+
+        [JsonProperty("hideFromDataJson", Required = Required.Always)]
+        public bool HideFromDataJson { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("indexUpdatedAt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? IndexUpdatedAt { get; set; }
+
+        [JsonProperty("locale", Required = Required.Always)]
+        public string Locale { get; set; }
+
+        [JsonProperty("metadata", Required = Required.Always)]
+        public TopLevelMetadata Metadata { get; set; }
+
+        [JsonProperty("moderationStatus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ModerationStatus { get; set; }
+
+        [JsonProperty("modifyingViewUid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ModifyingViewUid? ModifyingViewUid { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("newBackend", Required = Required.Always)]
+        public bool NewBackend { get; set; }
+
+        [JsonProperty("numberOfComments", Required = Required.Always)]
+        public long NumberOfComments { get; set; }
+
+        [JsonProperty("oid", Required = Required.Always)]
+        public long Oid { get; set; }
+
+        [JsonProperty("owner", Required = Required.Always)]
+        public Owner Owner { get; set; }
+
+        [JsonProperty("provenance", Required = Required.Always)]
+        public Provenance Provenance { get; set; }
+
+        [JsonProperty("publicationAppendEnabled", Required = Required.Always)]
+        public bool PublicationAppendEnabled { get; set; }
+
+        [JsonProperty("publicationDate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? PublicationDate { get; set; }
+
+        [JsonProperty("publicationGroup", Required = Required.Always)]
+        public long PublicationGroup { get; set; }
+
+        [JsonProperty("publicationStage", Required = Required.Always)]
+        public PublicationStage PublicationStage { get; set; }
+
+        [JsonProperty("ratings", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Ratings? Ratings { get; set; }
+
+        [JsonProperty("resourceName", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? ResourceName { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public Right[] Rights { get; set; }
+
+        [JsonProperty("rowClass", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? RowClass { get; set; }
+
+        [JsonProperty("rowIdentifierColumnId", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? RowIdentifierColumnId { get; set; }
+
+        [JsonProperty("rowsUpdatedAt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? RowsUpdatedAt { get; set; }
+
+        [JsonProperty("rowsUpdatedBy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public RowsUpdatedBy? RowsUpdatedBy { get; set; }
+
+        [JsonProperty("tableAuthor", Required = Required.Always)]
+        public TableAuthor TableAuthor { get; set; }
+
+        [JsonProperty("tableId", Required = Required.Always)]
+        public long TableId { get; set; }
+
+        [JsonProperty("tags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Tags { get; set; }
+
+        [JsonProperty("totalTimesRated", Required = Required.Always)]
+        public long TotalTimesRated { get; set; }
+
+        [JsonProperty("viewCount", Required = Required.Always)]
+        public long ViewCount { get; set; }
+
+        [JsonProperty("viewLastModified", Required = Required.Always)]
+        public long ViewLastModified { get; set; }
+
+        [JsonProperty("viewType", Required = Required.Always)]
+        public ViewType ViewType { get; set; }
+    }
+
+    public partial record Grant
+    {
+        [JsonProperty("flags", Required = Required.Always)]
+        public GrantFlag[] Flags { get; set; }
+
+        [JsonProperty("inherited", Required = Required.Always)]
+        public bool Inherited { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public GrantType Type { get; set; }
+    }
+
+    public partial record TopLevelMetadata
+    {
+        [JsonProperty("availableDisplayTypes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DisplayType[]? AvailableDisplayTypes { get; set; }
+
+        [JsonProperty("custom_fields", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public CustomFields? CustomFields { get; set; }
+
+        [JsonProperty("jsonQuery", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public JsonQuery? JsonQuery { get; set; }
+
+        [JsonProperty("rdfClass", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? RdfClass { get; set; }
+
+        [JsonProperty("rdfSubject", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? RdfSubject { get; set; }
+
+        [JsonProperty("renderTypeConfig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MetadataRenderTypeConfig? RenderTypeConfig { get; set; }
+
+        [JsonProperty("richRendererConfigs", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public RichRendererConfigs? RichRendererConfigs { get; set; }
+
+        [JsonProperty("rowIdentifier", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? RowIdentifier { get; set; }
+
+        [JsonProperty("rowLabel", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? RowLabel { get; set; }
+
+        [JsonProperty("v1_archived_properties", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public V1ArchivedProperties? V1ArchivedProperties { get; set; }
+    }
+
+    public partial record CustomFields
+    {
+        [JsonProperty("TEST", Required = Required.Always)]
+        public Test Test { get; set; }
+    }
+
+    public partial record Test
+    {
+        [JsonProperty("CFPB1", Required = Required.Always)]
+        public string Cfpb1 { get; set; }
+    }
+
+    public partial record JsonQuery
+    {
+        [JsonProperty("group", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Group[]? Group { get; set; }
+
+        [JsonProperty("order", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Order[]? Order { get; set; }
+
+        [JsonProperty("select", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Select[]? Select { get; set; }
+
+        [JsonProperty("where", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Where? Where { get; set; }
+    }
+
+    public partial record Group
+    {
+        [JsonProperty("columnFieldName", Required = Required.Always)]
+        public string ColumnFieldName { get; set; }
+    }
+
+    public partial record Order
+    {
+        [JsonProperty("ascending", Required = Required.Always)]
+        public bool Ascending { get; set; }
+
+        [JsonProperty("columnFieldName", Required = Required.Always)]
+        public OrderColumnFieldName ColumnFieldName { get; set; }
+    }
+
+    public partial record Select
+    {
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Aggregate { get; set; }
+
+        [JsonProperty("columnFieldName", Required = Required.Always)]
+        public string ColumnFieldName { get; set; }
+    }
+
+    public partial record Where
+    {
+        [JsonProperty("children", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Child[]? Children { get; set; }
+
+        [JsonProperty("columnFieldName", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ChildColumnFieldName? ColumnFieldName { get; set; }
+
+        [JsonProperty("metadata", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ChildMetadata? Metadata { get; set; }
+
+        [JsonProperty("operator", Required = Required.Always)]
+        public WhereOperator Operator { get; set; }
+
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Value { get; set; }
+    }
+
+    public partial record Child
+    {
+        [JsonProperty("columnFieldName", Required = Required.Always)]
+        public ChildColumnFieldName ColumnFieldName { get; set; }
+
+        [JsonProperty("metadata", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ChildMetadata? Metadata { get; set; }
+
+        [JsonProperty("operator", Required = Required.Always)]
+        public ChildOperator Operator { get; set; }
+
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Value { get; set; }
+    }
+
+    public partial record ChildMetadata
+    {
+        [JsonProperty("customValues", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? CustomValues { get; set; }
+
+        [JsonProperty("freeform", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Freeform { get; set; }
+
+        [JsonProperty("includeAuto", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? IncludeAuto { get; set; }
+
+        [JsonProperty("operator", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MetadataOperator? Operator { get; set; }
+
+        [JsonProperty("tableColumnId", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TableColumnId? TableColumnId { get; set; }
+
+        [JsonProperty("unifiedVersion", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? UnifiedVersion { get; set; }
+    }
+
+    public partial record TableColumnId
+    {
+        [JsonProperty("2819740", Required = Required.Always)]
+        public long The2819740 { get; set; }
+    }
+
+    public partial record MetadataRenderTypeConfig
+    {
+        [JsonProperty("visible", Required = Required.Always)]
+        public PurpleVisible Visible { get; set; }
+    }
+
+    public partial record PurpleVisible
+    {
+        [JsonProperty("fatrow", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Fatrow { get; set; }
+
+        [JsonProperty("table", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Table { get; set; }
+    }
+
+    public partial record RichRendererConfigs
+    {
+        [JsonProperty("fatRow", Required = Required.Always)]
+        public FatRow FatRow { get; set; }
+    }
+
+    public partial record FatRow
+    {
+        [JsonProperty("columns", Required = Required.Always)]
+        public Column[] Columns { get; set; }
+    }
+
+    public partial record Column
+    {
+        [JsonProperty("rows", Required = Required.Always)]
+        public Row[] Rows { get; set; }
+
+        [JsonProperty("styles", Required = Required.Always)]
+        public Styles Styles { get; set; }
+    }
+
+    public partial record Row
+    {
+        [JsonProperty("fields", Required = Required.Always)]
+        public Field[] Fields { get; set; }
+    }
+
+    public partial record Field
+    {
+        [JsonProperty("tableColumnId", Required = Required.Always)]
+        public long TableColumnId { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public FieldType Type { get; set; }
+    }
+
+    public partial record Styles
+    {
+        [JsonProperty("width", Required = Required.Always)]
+        public Width Width { get; set; }
+    }
+
+    public partial record V1ArchivedProperties
+    {
+        [JsonProperty("accessPoints", Required = Required.Always)]
+        public AccessPoints AccessPoints { get; set; }
+
+        [JsonProperty("blist_id", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long BlistId { get; set; }
+
+        [JsonProperty("renderTypeConfig", Required = Required.Always)]
+        public V1ArchivedPropertiesRenderTypeConfig RenderTypeConfig { get; set; }
+    }
+
+    public partial record AccessPoints
+    {
+        [JsonProperty("new_view", Required = Required.Always)]
+        public Uri NewView { get; set; }
+    }
+
+    public partial record V1ArchivedPropertiesRenderTypeConfig
+    {
+        [JsonProperty("visible", Required = Required.Always)]
+        public FluffyVisible Visible { get; set; }
+    }
+
+    public partial record FluffyVisible
+    {
+        [JsonProperty("href", Required = Required.Always)]
+        public bool Href { get; set; }
+    }
+
+    public partial record Owner
+    {
+        [JsonProperty("displayName", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("flags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("lastNotificationSeenAt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? LastNotificationSeenAt { get; set; }
+
+        [JsonProperty("profileImageUrlLarge", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? ProfileImageUrlLarge { get; set; }
+
+        [JsonProperty("profileImageUrlMedium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? ProfileImageUrlMedium { get; set; }
+
+        [JsonProperty("profileImageUrlSmall", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? ProfileImageUrlSmall { get; set; }
+
+        [JsonProperty("rights", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Rights { get; set; }
+
+        [JsonProperty("roleName", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public RoleName? RoleName { get; set; }
+
+        [JsonProperty("screenName", Required = Required.Always)]
+        public string ScreenName { get; set; }
+    }
+
+    public partial record Ratings
+    {
+        [JsonProperty("rating", Required = Required.Always)]
+        public long Rating { get; set; }
+    }
+
+    public partial record TableAuthor
+    {
+        [JsonProperty("displayName", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("rights", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Rights { get; set; }
+
+        [JsonProperty("roleName", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public RoleName? RoleName { get; set; }
+
+        [JsonProperty("screenName", Required = Required.Always)]
+        public string ScreenName { get; set; }
+    }
+
+    public enum DisplayType { Table, DataLens, Fatrow, Page };
+
+    public enum TopLevelFlag { Default, Restorable, RestorePossibleForType };
+
+    public enum GrantFlag { Public };
+
+    public enum GrantType { Viewer };
+
+    public enum OrderColumnFieldName { DateReceived, AgreementDate, InEffectAsOf1_1_2012 };
+
+    public enum ChildColumnFieldName { Product, ComplaintWhatHappened, SubProduct, Issue };
+
+    public enum MetadataOperator { Equals, Blank };
+
+    public enum ChildOperator { Equals, IsNotBlank };
+
+    public enum WhereOperator { Equals, And };
+
+    public enum FieldType { ColumnLabel, ColumnData };
+
+    public enum Width { The27, The40, The30, The33 };
+
+    public enum ModifyingViewUid { S6EwH6Mp };
+
+    public enum RoleName { Administrator, Publisher };
+
+    public enum Provenance { Official };
+
+    public enum PublicationStage { Published };
+
+    public enum Right { Read };
+
+    public enum RowsUpdatedBy { PjxgVe4M, The54A3Qyun, The9E3M2843, VvcaFr6G };
+
+    public enum ViewType { Tabular };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DisplayTypeConverter.Singleton,
+                TopLevelFlagConverter.Singleton,
+                GrantFlagConverter.Singleton,
+                GrantTypeConverter.Singleton,
+                OrderColumnFieldNameConverter.Singleton,
+                ChildColumnFieldNameConverter.Singleton,
+                MetadataOperatorConverter.Singleton,
+                ChildOperatorConverter.Singleton,
+                WhereOperatorConverter.Singleton,
+                FieldTypeConverter.Singleton,
+                WidthConverter.Singleton,
+                ModifyingViewUidConverter.Singleton,
+                RoleNameConverter.Singleton,
+                ProvenanceConverter.Singleton,
+                PublicationStageConverter.Singleton,
+                RightConverter.Singleton,
+                RowsUpdatedByConverter.Singleton,
+                ViewTypeConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DisplayTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DisplayType) || t == typeof(DisplayType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "table":
+                    return DisplayType.Table;
+                case "data_lens":
+                    return DisplayType.DataLens;
+                case "fatrow":
+                    return DisplayType.Fatrow;
+                case "page":
+                    return DisplayType.Page;
+            }
+            throw new Exception("Cannot unmarshal type DisplayType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (DisplayType)untypedValue;
+            switch (value)
+            {
+                case DisplayType.Table:
+                    serializer.Serialize(writer, "table");
+                    return;
+                case DisplayType.DataLens:
+                    serializer.Serialize(writer, "data_lens");
+                    return;
+                case DisplayType.Fatrow:
+                    serializer.Serialize(writer, "fatrow");
+                    return;
+                case DisplayType.Page:
+                    serializer.Serialize(writer, "page");
+                    return;
+            }
+            throw new Exception("Cannot marshal type DisplayType");
+        }
+
+        public static readonly DisplayTypeConverter Singleton = new DisplayTypeConverter();
+    }
+
+    internal class TopLevelFlagConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TopLevelFlag) || t == typeof(TopLevelFlag?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "default":
+                    return TopLevelFlag.Default;
+                case "restorable":
+                    return TopLevelFlag.Restorable;
+                case "restorePossibleForType":
+                    return TopLevelFlag.RestorePossibleForType;
+            }
+            throw new Exception("Cannot unmarshal type TopLevelFlag");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TopLevelFlag)untypedValue;
+            switch (value)
+            {
+                case TopLevelFlag.Default:
+                    serializer.Serialize(writer, "default");
+                    return;
+                case TopLevelFlag.Restorable:
+                    serializer.Serialize(writer, "restorable");
+                    return;
+                case TopLevelFlag.RestorePossibleForType:
+                    serializer.Serialize(writer, "restorePossibleForType");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TopLevelFlag");
+        }
+
+        public static readonly TopLevelFlagConverter Singleton = new TopLevelFlagConverter();
+    }
+
+    internal class GrantFlagConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GrantFlag) || t == typeof(GrantFlag?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "public")
+            {
+                return GrantFlag.Public;
+            }
+            throw new Exception("Cannot unmarshal type GrantFlag");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GrantFlag)untypedValue;
+            if (value == GrantFlag.Public)
+            {
+                serializer.Serialize(writer, "public");
+                return;
+            }
+            throw new Exception("Cannot marshal type GrantFlag");
+        }
+
+        public static readonly GrantFlagConverter Singleton = new GrantFlagConverter();
+    }
+
+    internal class GrantTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GrantType) || t == typeof(GrantType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "viewer")
+            {
+                return GrantType.Viewer;
+            }
+            throw new Exception("Cannot unmarshal type GrantType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GrantType)untypedValue;
+            if (value == GrantType.Viewer)
+            {
+                serializer.Serialize(writer, "viewer");
+                return;
+            }
+            throw new Exception("Cannot marshal type GrantType");
+        }
+
+        public static readonly GrantTypeConverter Singleton = new GrantTypeConverter();
+    }
+
+    internal class OrderColumnFieldNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OrderColumnFieldName) || t == typeof(OrderColumnFieldName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "date_received":
+                    return OrderColumnFieldName.DateReceived;
+                case "agreement_date":
+                    return OrderColumnFieldName.AgreementDate;
+                case "in_effect_as_of_1_1_2012":
+                    return OrderColumnFieldName.InEffectAsOf1_1_2012;
+            }
+            throw new Exception("Cannot unmarshal type OrderColumnFieldName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (OrderColumnFieldName)untypedValue;
+            switch (value)
+            {
+                case OrderColumnFieldName.DateReceived:
+                    serializer.Serialize(writer, "date_received");
+                    return;
+                case OrderColumnFieldName.AgreementDate:
+                    serializer.Serialize(writer, "agreement_date");
+                    return;
+                case OrderColumnFieldName.InEffectAsOf1_1_2012:
+                    serializer.Serialize(writer, "in_effect_as_of_1_1_2012");
+                    return;
+            }
+            throw new Exception("Cannot marshal type OrderColumnFieldName");
+        }
+
+        public static readonly OrderColumnFieldNameConverter Singleton = new OrderColumnFieldNameConverter();
+    }
+
+    internal class ChildColumnFieldNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChildColumnFieldName) || t == typeof(ChildColumnFieldName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "product":
+                    return ChildColumnFieldName.Product;
+                case "complaint_what_happened":
+                    return ChildColumnFieldName.ComplaintWhatHappened;
+                case "sub_product":
+                    return ChildColumnFieldName.SubProduct;
+                case "issue":
+                    return ChildColumnFieldName.Issue;
+            }
+            throw new Exception("Cannot unmarshal type ChildColumnFieldName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ChildColumnFieldName)untypedValue;
+            switch (value)
+            {
+                case ChildColumnFieldName.Product:
+                    serializer.Serialize(writer, "product");
+                    return;
+                case ChildColumnFieldName.ComplaintWhatHappened:
+                    serializer.Serialize(writer, "complaint_what_happened");
+                    return;
+                case ChildColumnFieldName.SubProduct:
+                    serializer.Serialize(writer, "sub_product");
+                    return;
+                case ChildColumnFieldName.Issue:
+                    serializer.Serialize(writer, "issue");
+                    return;
+            }
+            throw new Exception("Cannot marshal type ChildColumnFieldName");
+        }
+
+        public static readonly ChildColumnFieldNameConverter Singleton = new ChildColumnFieldNameConverter();
+    }
+
+    internal class MetadataOperatorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MetadataOperator) || t == typeof(MetadataOperator?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "EQUALS":
+                    return MetadataOperator.Equals;
+                case "blank?":
+                    return MetadataOperator.Blank;
+            }
+            throw new Exception("Cannot unmarshal type MetadataOperator");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (MetadataOperator)untypedValue;
+            switch (value)
+            {
+                case MetadataOperator.Equals:
+                    serializer.Serialize(writer, "EQUALS");
+                    return;
+                case MetadataOperator.Blank:
+                    serializer.Serialize(writer, "blank?");
+                    return;
+            }
+            throw new Exception("Cannot marshal type MetadataOperator");
+        }
+
+        public static readonly MetadataOperatorConverter Singleton = new MetadataOperatorConverter();
+    }
+
+    internal class ChildOperatorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChildOperator) || t == typeof(ChildOperator?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "EQUALS":
+                    return ChildOperator.Equals;
+                case "IS_NOT_BLANK":
+                    return ChildOperator.IsNotBlank;
+            }
+            throw new Exception("Cannot unmarshal type ChildOperator");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ChildOperator)untypedValue;
+            switch (value)
+            {
+                case ChildOperator.Equals:
+                    serializer.Serialize(writer, "EQUALS");
+                    return;
+                case ChildOperator.IsNotBlank:
+                    serializer.Serialize(writer, "IS_NOT_BLANK");
+                    return;
+            }
+            throw new Exception("Cannot marshal type ChildOperator");
+        }
+
+        public static readonly ChildOperatorConverter Singleton = new ChildOperatorConverter();
+    }
+
+    internal class WhereOperatorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(WhereOperator) || t == typeof(WhereOperator?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "EQUALS":
+                    return WhereOperator.Equals;
+                case "AND":
+                    return WhereOperator.And;
+            }
+            throw new Exception("Cannot unmarshal type WhereOperator");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (WhereOperator)untypedValue;
+            switch (value)
+            {
+                case WhereOperator.Equals:
+                    serializer.Serialize(writer, "EQUALS");
+                    return;
+                case WhereOperator.And:
+                    serializer.Serialize(writer, "AND");
+                    return;
+            }
+            throw new Exception("Cannot marshal type WhereOperator");
+        }
+
+        public static readonly WhereOperatorConverter Singleton = new WhereOperatorConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class FieldTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FieldType) || t == typeof(FieldType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "columnLabel":
+                    return FieldType.ColumnLabel;
+                case "columnData":
+                    return FieldType.ColumnData;
+            }
+            throw new Exception("Cannot unmarshal type FieldType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FieldType)untypedValue;
+            switch (value)
+            {
+                case FieldType.ColumnLabel:
+                    serializer.Serialize(writer, "columnLabel");
+                    return;
+                case FieldType.ColumnData:
+                    serializer.Serialize(writer, "columnData");
+                    return;
+            }
+            throw new Exception("Cannot marshal type FieldType");
+        }
+
+        public static readonly FieldTypeConverter Singleton = new FieldTypeConverter();
+    }
+
+    internal class WidthConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Width) || t == typeof(Width?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "27%":
+                    return Width.The27;
+                case "40%":
+                    return Width.The40;
+                case "30%":
+                    return Width.The30;
+                case "33%":
+                    return Width.The33;
+            }
+            throw new Exception("Cannot unmarshal type Width");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Width)untypedValue;
+            switch (value)
+            {
+                case Width.The27:
+                    serializer.Serialize(writer, "27%");
+                    return;
+                case Width.The40:
+                    serializer.Serialize(writer, "40%");
+                    return;
+                case Width.The30:
+                    serializer.Serialize(writer, "30%");
+                    return;
+                case Width.The33:
+                    serializer.Serialize(writer, "33%");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Width");
+        }
+
+        public static readonly WidthConverter Singleton = new WidthConverter();
+    }
+
+    internal class ModifyingViewUidConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ModifyingViewUid) || t == typeof(ModifyingViewUid?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "s6ew-h6mp")
+            {
+                return ModifyingViewUid.S6EwH6Mp;
+            }
+            throw new Exception("Cannot unmarshal type ModifyingViewUid");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ModifyingViewUid)untypedValue;
+            if (value == ModifyingViewUid.S6EwH6Mp)
+            {
+                serializer.Serialize(writer, "s6ew-h6mp");
+                return;
+            }
+            throw new Exception("Cannot marshal type ModifyingViewUid");
+        }
+
+        public static readonly ModifyingViewUidConverter Singleton = new ModifyingViewUidConverter();
+    }
+
+    internal class RoleNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RoleName) || t == typeof(RoleName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "administrator":
+                    return RoleName.Administrator;
+                case "publisher":
+                    return RoleName.Publisher;
+            }
+            throw new Exception("Cannot unmarshal type RoleName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (RoleName)untypedValue;
+            switch (value)
+            {
+                case RoleName.Administrator:
+                    serializer.Serialize(writer, "administrator");
+                    return;
+                case RoleName.Publisher:
+                    serializer.Serialize(writer, "publisher");
+                    return;
+            }
+            throw new Exception("Cannot marshal type RoleName");
+        }
+
+        public static readonly RoleNameConverter Singleton = new RoleNameConverter();
+    }
+
+    internal class ProvenanceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Provenance) || t == typeof(Provenance?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "official")
+            {
+                return Provenance.Official;
+            }
+            throw new Exception("Cannot unmarshal type Provenance");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Provenance)untypedValue;
+            if (value == Provenance.Official)
+            {
+                serializer.Serialize(writer, "official");
+                return;
+            }
+            throw new Exception("Cannot marshal type Provenance");
+        }
+
+        public static readonly ProvenanceConverter Singleton = new ProvenanceConverter();
+    }
+
+    internal class PublicationStageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PublicationStage) || t == typeof(PublicationStage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "published")
+            {
+                return PublicationStage.Published;
+            }
+            throw new Exception("Cannot unmarshal type PublicationStage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PublicationStage)untypedValue;
+            if (value == PublicationStage.Published)
+            {
+                serializer.Serialize(writer, "published");
+                return;
+            }
+            throw new Exception("Cannot marshal type PublicationStage");
+        }
+
+        public static readonly PublicationStageConverter Singleton = new PublicationStageConverter();
+    }
+
+    internal class RightConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Right) || t == typeof(Right?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "read")
+            {
+                return Right.Read;
+            }
+            throw new Exception("Cannot unmarshal type Right");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Right)untypedValue;
+            if (value == Right.Read)
+            {
+                serializer.Serialize(writer, "read");
+                return;
+            }
+            throw new Exception("Cannot marshal type Right");
+        }
+
+        public static readonly RightConverter Singleton = new RightConverter();
+    }
+
+    internal class RowsUpdatedByConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RowsUpdatedBy) || t == typeof(RowsUpdatedBy?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "pjxg-ve4m":
+                    return RowsUpdatedBy.PjxgVe4M;
+                case "54a3-qyun":
+                    return RowsUpdatedBy.The54A3Qyun;
+                case "9e3m-2843":
+                    return RowsUpdatedBy.The9E3M2843;
+                case "vvca-fr6g":
+                    return RowsUpdatedBy.VvcaFr6G;
+            }
+            throw new Exception("Cannot unmarshal type RowsUpdatedBy");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (RowsUpdatedBy)untypedValue;
+            switch (value)
+            {
+                case RowsUpdatedBy.PjxgVe4M:
+                    serializer.Serialize(writer, "pjxg-ve4m");
+                    return;
+                case RowsUpdatedBy.The54A3Qyun:
+                    serializer.Serialize(writer, "54a3-qyun");
+                    return;
+                case RowsUpdatedBy.The9E3M2843:
+                    serializer.Serialize(writer, "9e3m-2843");
+                    return;
+                case RowsUpdatedBy.VvcaFr6G:
+                    serializer.Serialize(writer, "vvca-fr6g");
+                    return;
+            }
+            throw new Exception("Cannot marshal type RowsUpdatedBy");
+        }
+
+        public static readonly RowsUpdatedByConverter Singleton = new RowsUpdatedByConverter();
+    }
+
+    internal class ViewTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ViewType) || t == typeof(ViewType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "tabular")
+            {
+                return ViewType.Tabular;
+            }
+            throw new Exception("Cannot unmarshal type ViewType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ViewType)untypedValue;
+            if (value == ViewType.Tabular)
+            {
+                serializer.Serialize(writer, "tabular");
+                return;
+            }
+            throw new Exception("Cannot marshal type ViewType");
+        }
+
+        public static readonly ViewTypeConverter Singleton = new ViewTypeConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/ed095.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/ed095.json/default/QuickType.cs
new file mode 100644
index 0000000..4c88ec2
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/ed095.json/default/QuickType.cs
@@ -0,0 +1,55 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public class TopLevel
+    {
+        public static Dictionary<string, Uri> FromJson(string json) => JsonConvert.DeserializeObject<Dictionary<string, Uri>>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this Dictionary<string, Uri> self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/f22f5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/f22f5.json/default/QuickType.cs
new file mode 100644
index 0000000..7ec7455
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/f22f5.json/default/QuickType.cs
@@ -0,0 +1,460 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public TopLevelData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public string Kind { get; set; }
+    }
+
+    public partial record TopLevelData
+    {
+        [JsonProperty("after", Required = Required.Always)]
+        public string After { get; set; }
+
+        [JsonProperty("before", Required = Required.AllowNull)]
+        public object Before { get; set; }
+
+        [JsonProperty("children", Required = Required.Always)]
+        public Child[] Children { get; set; }
+
+        [JsonProperty("modhash", Required = Required.Always)]
+        public string Modhash { get; set; }
+    }
+
+    public partial record Child
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public ChildData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    public partial record ChildData
+    {
+        [JsonProperty("approved_at_utc", Required = Required.AllowNull)]
+        public object ApprovedAtUtc { get; set; }
+
+        [JsonProperty("approved_by", Required = Required.AllowNull)]
+        public object ApprovedBy { get; set; }
+
+        [JsonProperty("archived", Required = Required.Always)]
+        public bool Archived { get; set; }
+
+        [JsonProperty("author", Required = Required.Always)]
+        public string Author { get; set; }
+
+        [JsonProperty("author_flair_css_class", Required = Required.AllowNull)]
+        public object AuthorFlairCssClass { get; set; }
+
+        [JsonProperty("author_flair_text", Required = Required.AllowNull)]
+        public object AuthorFlairText { get; set; }
+
+        [JsonProperty("banned_at_utc", Required = Required.AllowNull)]
+        public object BannedAtUtc { get; set; }
+
+        [JsonProperty("banned_by", Required = Required.AllowNull)]
+        public object BannedBy { get; set; }
+
+        [JsonProperty("brand_safe", Required = Required.Always)]
+        public bool BrandSafe { get; set; }
+
+        [JsonProperty("can_gild", Required = Required.Always)]
+        public bool CanGild { get; set; }
+
+        [JsonProperty("can_mod_post", Required = Required.Always)]
+        public bool CanModPost { get; set; }
+
+        [JsonProperty("clicked", Required = Required.Always)]
+        public bool Clicked { get; set; }
+
+        [JsonProperty("contest_mode", Required = Required.Always)]
+        public bool ContestMode { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public double Created { get; set; }
+
+        [JsonProperty("created_utc", Required = Required.Always)]
+        public double CreatedUtc { get; set; }
+
+        [JsonProperty("distinguished", Required = Required.AllowNull)]
+        public object Distinguished { get; set; }
+
+        [JsonProperty("domain", Required = Required.Always)]
+        public string Domain { get; set; }
+
+        [JsonProperty("downs", Required = Required.Always)]
+        public long Downs { get; set; }
+
+        [JsonProperty("edited", Required = Required.Always)]
+        public bool Edited { get; set; }
+
+        [JsonProperty("gilded", Required = Required.Always)]
+        public long Gilded { get; set; }
+
+        [JsonProperty("hidden", Required = Required.Always)]
+        public bool Hidden { get; set; }
+
+        [JsonProperty("hide_score", Required = Required.Always)]
+        public bool HideScore { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("is_self", Required = Required.Always)]
+        public bool IsSelf { get; set; }
+
+        [JsonProperty("is_video", Required = Required.Always)]
+        public bool IsVideo { get; set; }
+
+        [JsonProperty("likes", Required = Required.AllowNull)]
+        public object Likes { get; set; }
+
+        [JsonProperty("link_flair_css_class", Required = Required.AllowNull)]
+        public string? LinkFlairCssClass { get; set; }
+
+        [JsonProperty("link_flair_text", Required = Required.AllowNull)]
+        public string? LinkFlairText { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("media", Required = Required.AllowNull)]
+        public object Media { get; set; }
+
+        [JsonProperty("media_embed", Required = Required.Always)]
+        public MediaEmbed MediaEmbed { get; set; }
+
+        [JsonProperty("mod_reports", Required = Required.Always)]
+        public object[] ModReports { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("num_comments", Required = Required.Always)]
+        public long NumComments { get; set; }
+
+        [JsonProperty("num_reports", Required = Required.AllowNull)]
+        public object NumReports { get; set; }
+
+        [JsonProperty("over_18", Required = Required.Always)]
+        public bool Over18 { get; set; }
+
+        [JsonProperty("permalink", Required = Required.Always)]
+        public string Permalink { get; set; }
+
+        [JsonProperty("quarantine", Required = Required.Always)]
+        public bool Quarantine { get; set; }
+
+        [JsonProperty("removal_reason", Required = Required.AllowNull)]
+        public object RemovalReason { get; set; }
+
+        [JsonProperty("report_reasons", Required = Required.AllowNull)]
+        public object ReportReasons { get; set; }
+
+        [JsonProperty("saved", Required = Required.Always)]
+        public bool Saved { get; set; }
+
+        [JsonProperty("score", Required = Required.Always)]
+        public long Score { get; set; }
+
+        [JsonProperty("secure_media", Required = Required.AllowNull)]
+        public object SecureMedia { get; set; }
+
+        [JsonProperty("secure_media_embed", Required = Required.Always)]
+        public MediaEmbed SecureMediaEmbed { get; set; }
+
+        [JsonProperty("selftext", Required = Required.Always)]
+        public string Selftext { get; set; }
+
+        [JsonProperty("selftext_html", Required = Required.AllowNull)]
+        public object SelftextHtml { get; set; }
+
+        [JsonProperty("spoiler", Required = Required.Always)]
+        public bool Spoiler { get; set; }
+
+        [JsonProperty("stickied", Required = Required.Always)]
+        public bool Stickied { get; set; }
+
+        [JsonProperty("subreddit", Required = Required.Always)]
+        public Subreddit Subreddit { get; set; }
+
+        [JsonProperty("subreddit_id", Required = Required.Always)]
+        public SubredditId SubredditId { get; set; }
+
+        [JsonProperty("subreddit_name_prefixed", Required = Required.Always)]
+        public SubredditNamePrefixed SubredditNamePrefixed { get; set; }
+
+        [JsonProperty("subreddit_type", Required = Required.Always)]
+        public SubredditType SubredditType { get; set; }
+
+        [JsonProperty("suggested_sort", Required = Required.AllowNull)]
+        public object SuggestedSort { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public string Thumbnail { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ups", Required = Required.Always)]
+        public long Ups { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user_reports", Required = Required.Always)]
+        public object[] UserReports { get; set; }
+
+        [JsonProperty("view_count", Required = Required.AllowNull)]
+        public object ViewCount { get; set; }
+
+        [JsonProperty("visited", Required = Required.Always)]
+        public bool Visited { get; set; }
+    }
+
+    public partial record MediaEmbed
+    {
+    }
+
+    public enum Subreddit { Worldnews };
+
+    public enum SubredditId { T52Qh13 };
+
+    public enum SubredditNamePrefixed { RWorldnews };
+
+    public enum SubredditType { Public };
+
+    public enum Kind { T3 };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                SubredditConverter.Singleton,
+                SubredditIdConverter.Singleton,
+                SubredditNamePrefixedConverter.Singleton,
+                SubredditTypeConverter.Singleton,
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class SubredditConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Subreddit) || t == typeof(Subreddit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "worldnews")
+            {
+                return Subreddit.Worldnews;
+            }
+            throw new Exception("Cannot unmarshal type Subreddit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Subreddit)untypedValue;
+            if (value == Subreddit.Worldnews)
+            {
+                serializer.Serialize(writer, "worldnews");
+                return;
+            }
+            throw new Exception("Cannot marshal type Subreddit");
+        }
+
+        public static readonly SubredditConverter Singleton = new SubredditConverter();
+    }
+
+    internal class SubredditIdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditId) || t == typeof(SubredditId?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t5_2qh13")
+            {
+                return SubredditId.T52Qh13;
+            }
+            throw new Exception("Cannot unmarshal type SubredditId");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditId)untypedValue;
+            if (value == SubredditId.T52Qh13)
+            {
+                serializer.Serialize(writer, "t5_2qh13");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditId");
+        }
+
+        public static readonly SubredditIdConverter Singleton = new SubredditIdConverter();
+    }
+
+    internal class SubredditNamePrefixedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditNamePrefixed) || t == typeof(SubredditNamePrefixed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "r/worldnews")
+            {
+                return SubredditNamePrefixed.RWorldnews;
+            }
+            throw new Exception("Cannot unmarshal type SubredditNamePrefixed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditNamePrefixed)untypedValue;
+            if (value == SubredditNamePrefixed.RWorldnews)
+            {
+                serializer.Serialize(writer, "r/worldnews");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditNamePrefixed");
+        }
+
+        public static readonly SubredditNamePrefixedConverter Singleton = new SubredditNamePrefixedConverter();
+    }
+
+    internal class SubredditTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditType) || t == typeof(SubredditType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "public")
+            {
+                return SubredditType.Public;
+            }
+            throw new Exception("Cannot unmarshal type SubredditType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditType)untypedValue;
+            if (value == SubredditType.Public)
+            {
+                serializer.Serialize(writer, "public");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditType");
+        }
+
+        public static readonly SubredditTypeConverter Singleton = new SubredditTypeConverter();
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t3")
+            {
+                return Kind.T3;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.T3)
+            {
+                serializer.Serialize(writer, "t3");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/f3139.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/f3139.json/default/QuickType.cs
new file mode 100644
index 0000000..296e3a2
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/f3139.json/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/f3edf.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/f3edf.json/default/QuickType.cs
new file mode 100644
index 0000000..80f8e48
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/f3edf.json/default/QuickType.cs
@@ -0,0 +1,113 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("age", Required = Required.Always)]
+        public long Age { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("females", Required = Required.Always)]
+        public long Females { get; set; }
+
+        [JsonProperty("males", Required = Required.Always)]
+        public long Males { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+
+        [JsonProperty("year", Required = Required.Always)]
+        public long Year { get; set; }
+    }
+
+    public enum Country { UnitedStates };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CountryConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CountryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Country) || t == typeof(Country?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "United States")
+            {
+                return Country.UnitedStates;
+            }
+            throw new Exception("Cannot unmarshal type Country");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Country)untypedValue;
+            if (value == Country.UnitedStates)
+            {
+                serializer.Serialize(writer, "United States");
+                return;
+            }
+            throw new Exception("Cannot marshal type Country");
+        }
+
+        public static readonly CountryConverter Singleton = new CountryConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/f466a.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/f466a.json/default/QuickType.cs
new file mode 100644
index 0000000..80f8e48
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/f466a.json/default/QuickType.cs
@@ -0,0 +1,113 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("age", Required = Required.Always)]
+        public long Age { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public Country Country { get; set; }
+
+        [JsonProperty("females", Required = Required.Always)]
+        public long Females { get; set; }
+
+        [JsonProperty("males", Required = Required.Always)]
+        public long Males { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+
+        [JsonProperty("year", Required = Required.Always)]
+        public long Year { get; set; }
+    }
+
+    public enum Country { UnitedStates };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CountryConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CountryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Country) || t == typeof(Country?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "United States")
+            {
+                return Country.UnitedStates;
+            }
+            throw new Exception("Cannot unmarshal type Country");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Country)untypedValue;
+            if (value == Country.UnitedStates)
+            {
+                serializer.Serialize(writer, "United States");
+                return;
+            }
+            throw new Exception("Cannot marshal type Country");
+        }
+
+        public static readonly CountryConverter Singleton = new CountryConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/f6a65.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/f6a65.json/default/QuickType.cs
new file mode 100644
index 0000000..f73da11
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/f6a65.json/default/QuickType.cs
@@ -0,0 +1,502 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("pagination", Required = Required.Always)]
+        public Pagination Pagination { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("bitly_gif_url", Required = Required.Always)]
+        public Uri BitlyGifUrl { get; set; }
+
+        [JsonProperty("bitly_url", Required = Required.Always)]
+        public Uri BitlyUrl { get; set; }
+
+        [JsonProperty("content_url", Required = Required.Always)]
+        public string ContentUrl { get; set; }
+
+        [JsonProperty("embed_url", Required = Required.Always)]
+        public Uri EmbedUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Images Images { get; set; }
+
+        [JsonProperty("import_datetime", Required = Required.Always)]
+        public string ImportDatetime { get; set; }
+
+        [JsonProperty("is_indexable", Required = Required.Always)]
+        public long IsIndexable { get; set; }
+
+        [JsonProperty("rating", Required = Required.Always)]
+        public Rating Rating { get; set; }
+
+        [JsonProperty("slug", Required = Required.Always)]
+        public string Slug { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public string Source { get; set; }
+
+        [JsonProperty("source_post_url", Required = Required.Always)]
+        public string SourcePostUrl { get; set; }
+
+        [JsonProperty("source_tld", Required = Required.Always)]
+        public string SourceTld { get; set; }
+
+        [JsonProperty("trending_datetime", Required = Required.Always)]
+        public string TrendingDatetime { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public User? User { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public Username Username { get; set; }
+    }
+
+    public partial record Images
+    {
+        [JsonProperty("downsized", Required = Required.Always)]
+        public The480_WStill Downsized { get; set; }
+
+        [JsonProperty("downsized_large", Required = Required.Always)]
+        public The480_WStill DownsizedLarge { get; set; }
+
+        [JsonProperty("downsized_medium", Required = Required.Always)]
+        public The480_WStill DownsizedMedium { get; set; }
+
+        [JsonProperty("downsized_small", Required = Required.Always)]
+        public DownsizedSmall DownsizedSmall { get; set; }
+
+        [JsonProperty("downsized_still", Required = Required.Always)]
+        public The480_WStill DownsizedStill { get; set; }
+
+        [JsonProperty("fixed_height", Required = Required.Always)]
+        public FixedHeight FixedHeight { get; set; }
+
+        [JsonProperty("fixed_height_downsampled", Required = Required.Always)]
+        public FixedHeight FixedHeightDownsampled { get; set; }
+
+        [JsonProperty("fixed_height_small", Required = Required.Always)]
+        public FixedHeight FixedHeightSmall { get; set; }
+
+        [JsonProperty("fixed_height_small_still", Required = Required.Always)]
+        public The480_WStill FixedHeightSmallStill { get; set; }
+
+        [JsonProperty("fixed_height_still", Required = Required.Always)]
+        public The480_WStill FixedHeightStill { get; set; }
+
+        [JsonProperty("fixed_width", Required = Required.Always)]
+        public FixedHeight FixedWidth { get; set; }
+
+        [JsonProperty("fixed_width_downsampled", Required = Required.Always)]
+        public FixedHeight FixedWidthDownsampled { get; set; }
+
+        [JsonProperty("fixed_width_small", Required = Required.Always)]
+        public FixedHeight FixedWidthSmall { get; set; }
+
+        [JsonProperty("fixed_width_small_still", Required = Required.Always)]
+        public The480_WStill FixedWidthSmallStill { get; set; }
+
+        [JsonProperty("fixed_width_still", Required = Required.Always)]
+        public The480_WStill FixedWidthStill { get; set; }
+
+        [JsonProperty("looping", Required = Required.Always)]
+        public Looping Looping { get; set; }
+
+        [JsonProperty("original", Required = Required.Always)]
+        public FixedHeight Original { get; set; }
+
+        [JsonProperty("original_mp4", Required = Required.Always)]
+        public DownsizedSmall OriginalMp4 { get; set; }
+
+        [JsonProperty("original_still", Required = Required.Always)]
+        public The480_WStill OriginalStill { get; set; }
+
+        [JsonProperty("preview", Required = Required.Always)]
+        public DownsizedSmall Preview { get; set; }
+
+        [JsonProperty("preview_gif", Required = Required.Always)]
+        public The480_WStill PreviewGif { get; set; }
+
+        [JsonProperty("preview_webp", Required = Required.Always)]
+        public The480_WStill PreviewWebp { get; set; }
+
+        [JsonProperty("480w_still", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public The480_WStill? The480WStill { get; set; }
+    }
+
+    public partial record The480_WStill
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record DownsizedSmall
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record FixedHeight
+    {
+        [JsonProperty("frames", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Frames { get; set; }
+
+        [JsonProperty("hash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Hash { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Height { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Uri? Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Mp4Size { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Size { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("webp", Required = Required.Always)]
+        public Uri Webp { get; set; }
+
+        [JsonProperty("webp_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long WebpSize { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Width { get; set; }
+    }
+
+    public partial record Looping
+    {
+        [JsonProperty("mp4", Required = Required.Always)]
+        public Uri Mp4 { get; set; }
+
+        [JsonProperty("mp4_size", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Mp4Size { get; set; }
+    }
+
+    public partial record User
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("banner_url", Required = Required.Always)]
+        public Uri BannerUrl { get; set; }
+
+        [JsonProperty("display_name", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("profile_url", Required = Required.Always)]
+        public Uri ProfileUrl { get; set; }
+
+        [JsonProperty("twitter", Required = Required.Always)]
+        public string Twitter { get; set; }
+
+        [JsonProperty("username", Required = Required.Always)]
+        public Username Username { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("msg", Required = Required.Always)]
+        public string Msg { get; set; }
+
+        [JsonProperty("response_id", Required = Required.Always)]
+        public string ResponseId { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public long Status { get; set; }
+    }
+
+    public partial record Pagination
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("total_count", Required = Required.Always)]
+        public long TotalCount { get; set; }
+    }
+
+    public enum Rating { G, Y, Pg, Pg13 };
+
+    public enum TypeEnum { Gif };
+
+    public enum Username { Empty, Producthunt, Meetaiko, Cheezburger };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                RatingConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                UsernameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RatingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rating) || t == typeof(Rating?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "g":
+                    return Rating.G;
+                case "y":
+                    return Rating.Y;
+                case "pg":
+                    return Rating.Pg;
+                case "pg-13":
+                    return Rating.Pg13;
+            }
+            throw new Exception("Cannot unmarshal type Rating");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Rating)untypedValue;
+            switch (value)
+            {
+                case Rating.G:
+                    serializer.Serialize(writer, "g");
+                    return;
+                case Rating.Y:
+                    serializer.Serialize(writer, "y");
+                    return;
+                case Rating.Pg:
+                    serializer.Serialize(writer, "pg");
+                    return;
+                case Rating.Pg13:
+                    serializer.Serialize(writer, "pg-13");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Rating");
+        }
+
+        public static readonly RatingConverter Singleton = new RatingConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "gif")
+            {
+                return TypeEnum.Gif;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.Gif)
+            {
+                serializer.Serialize(writer, "gif");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+
+    internal class UsernameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Username) || t == typeof(Username?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Username.Empty;
+                case "producthunt":
+                    return Username.Producthunt;
+                case "meetaiko":
+                    return Username.Meetaiko;
+                case "cheezburger":
+                    return Username.Cheezburger;
+            }
+            throw new Exception("Cannot unmarshal type Username");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Username)untypedValue;
+            switch (value)
+            {
+                case Username.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Username.Producthunt:
+                    serializer.Serialize(writer, "producthunt");
+                    return;
+                case Username.Meetaiko:
+                    serializer.Serialize(writer, "meetaiko");
+                    return;
+                case Username.Cheezburger:
+                    serializer.Serialize(writer, "cheezburger");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Username");
+        }
+
+        public static readonly UsernameConverter Singleton = new UsernameConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/f74d5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/f74d5.json/default/QuickType.cs
new file mode 100644
index 0000000..d480056
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/f74d5.json/default/QuickType.cs
@@ -0,0 +1,448 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[][] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("view", Required = Required.Always)]
+        public View View { get; set; }
+    }
+
+    public partial record View
+    {
+        [JsonProperty("averageRating", Required = Required.Always)]
+        public long AverageRating { get; set; }
+
+        [JsonProperty("category", Required = Required.Always)]
+        public string Category { get; set; }
+
+        [JsonProperty("columns", Required = Required.Always)]
+        public Column[] Columns { get; set; }
+
+        [JsonProperty("createdAt", Required = Required.Always)]
+        public long CreatedAt { get; set; }
+
+        [JsonProperty("displayType", Required = Required.Always)]
+        public string DisplayType { get; set; }
+
+        [JsonProperty("downloadCount", Required = Required.Always)]
+        public long DownloadCount { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("grants", Required = Required.Always)]
+        public Grant[] Grants { get; set; }
+
+        [JsonProperty("hideFromCatalog", Required = Required.Always)]
+        public bool HideFromCatalog { get; set; }
+
+        [JsonProperty("hideFromDataJson", Required = Required.Always)]
+        public bool HideFromDataJson { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("indexUpdatedAt", Required = Required.Always)]
+        public long IndexUpdatedAt { get; set; }
+
+        [JsonProperty("license", Required = Required.Always)]
+        public License License { get; set; }
+
+        [JsonProperty("licenseId", Required = Required.Always)]
+        public string LicenseId { get; set; }
+
+        [JsonProperty("locale", Required = Required.Always)]
+        public string Locale { get; set; }
+
+        [JsonProperty("metadata", Required = Required.Always)]
+        public Metadata Metadata { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("newBackend", Required = Required.Always)]
+        public bool NewBackend { get; set; }
+
+        [JsonProperty("numberOfComments", Required = Required.Always)]
+        public long NumberOfComments { get; set; }
+
+        [JsonProperty("oid", Required = Required.Always)]
+        public long Oid { get; set; }
+
+        [JsonProperty("owner", Required = Required.Always)]
+        public Owner Owner { get; set; }
+
+        [JsonProperty("provenance", Required = Required.Always)]
+        public string Provenance { get; set; }
+
+        [JsonProperty("publicationAppendEnabled", Required = Required.Always)]
+        public bool PublicationAppendEnabled { get; set; }
+
+        [JsonProperty("publicationDate", Required = Required.Always)]
+        public long PublicationDate { get; set; }
+
+        [JsonProperty("publicationGroup", Required = Required.Always)]
+        public long PublicationGroup { get; set; }
+
+        [JsonProperty("publicationStage", Required = Required.Always)]
+        public string PublicationStage { get; set; }
+
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public string[] Rights { get; set; }
+
+        [JsonProperty("rowClass", Required = Required.Always)]
+        public string RowClass { get; set; }
+
+        [JsonProperty("rowsUpdatedAt", Required = Required.Always)]
+        public long RowsUpdatedAt { get; set; }
+
+        [JsonProperty("rowsUpdatedBy", Required = Required.Always)]
+        public string RowsUpdatedBy { get; set; }
+
+        [JsonProperty("tableAuthor", Required = Required.Always)]
+        public Owner TableAuthor { get; set; }
+
+        [JsonProperty("tableId", Required = Required.Always)]
+        public long TableId { get; set; }
+
+        [JsonProperty("totalTimesRated", Required = Required.Always)]
+        public long TotalTimesRated { get; set; }
+
+        [JsonProperty("viewCount", Required = Required.Always)]
+        public long ViewCount { get; set; }
+
+        [JsonProperty("viewLastModified", Required = Required.Always)]
+        public long ViewLastModified { get; set; }
+
+        [JsonProperty("viewType", Required = Required.Always)]
+        public string ViewType { get; set; }
+    }
+
+    public partial record Column
+    {
+        [JsonProperty("cachedContents", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public CachedContents? CachedContents { get; set; }
+
+        [JsonProperty("dataTypeName", Required = Required.Always)]
+        public TypeName DataTypeName { get; set; }
+
+        [JsonProperty("fieldName", Required = Required.Always)]
+        public string FieldName { get; set; }
+
+        [JsonProperty("flags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Flags { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public Query Format { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("position", Required = Required.Always)]
+        public long Position { get; set; }
+
+        [JsonProperty("renderTypeName", Required = Required.Always)]
+        public TypeName RenderTypeName { get; set; }
+
+        [JsonProperty("tableColumnId", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? TableColumnId { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Width { get; set; }
+    }
+
+    public partial record CachedContents
+    {
+        [JsonProperty("average", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Average { get; set; }
+
+        [JsonProperty("largest", Required = Required.Always)]
+        public string Largest { get; set; }
+
+        [JsonProperty("non_null", Required = Required.Always)]
+        public long NonNull { get; set; }
+
+        [JsonProperty("null", Required = Required.Always)]
+        public long Null { get; set; }
+
+        [JsonProperty("smallest", Required = Required.Always)]
+        public string Smallest { get; set; }
+
+        [JsonProperty("sum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Sum { get; set; }
+
+        [JsonProperty("top", Required = Required.Always)]
+        public Top[] Top { get; set; }
+    }
+
+    public partial record Top
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public string Item { get; set; }
+    }
+
+    public partial record Query
+    {
+    }
+
+    public partial record Grant
+    {
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("inherited", Required = Required.Always)]
+        public bool Inherited { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record License
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record Metadata
+    {
+        [JsonProperty("availableDisplayTypes", Required = Required.Always)]
+        public string[] AvailableDisplayTypes { get; set; }
+
+        [JsonProperty("rdfClass", Required = Required.Always)]
+        public string RdfClass { get; set; }
+
+        [JsonProperty("rdfSubject", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long RdfSubject { get; set; }
+
+        [JsonProperty("renderTypeConfig", Required = Required.Always)]
+        public RenderTypeConfig RenderTypeConfig { get; set; }
+
+        [JsonProperty("rowIdentifier", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long RowIdentifier { get; set; }
+    }
+
+    public partial record RenderTypeConfig
+    {
+        [JsonProperty("visible", Required = Required.Always)]
+        public Visible Visible { get; set; }
+    }
+
+    public partial record Visible
+    {
+        [JsonProperty("table", Required = Required.Always)]
+        public bool Table { get; set; }
+    }
+
+    public partial record Owner
+    {
+        [JsonProperty("displayName", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("screenName", Required = Required.Always)]
+        public string ScreenName { get; set; }
+    }
+
+    public enum TypeName { MetaData, Number, Text };
+
+    public partial struct Datum
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Datum(long Integer) => new Datum { Integer = Integer };
+        public static implicit operator Datum(string String) => new Datum { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DatumConverter.Singleton,
+                TypeNameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DatumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Datum) || t == typeof(Datum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Datum { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Datum { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Datum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Datum)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Datum");
+        }
+
+        public static readonly DatumConverter Singleton = new DatumConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class TypeNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeName) || t == typeof(TypeName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "meta_data":
+                    return TypeName.MetaData;
+                case "number":
+                    return TypeName.Number;
+                case "text":
+                    return TypeName.Text;
+            }
+            throw new Exception("Cannot unmarshal type TypeName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeName)untypedValue;
+            switch (value)
+            {
+                case TypeName.MetaData:
+                    serializer.Serialize(writer, "meta_data");
+                    return;
+                case TypeName.Number:
+                    serializer.Serialize(writer, "number");
+                    return;
+                case TypeName.Text:
+                    serializer.Serialize(writer, "text");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeName");
+        }
+
+        public static readonly TypeNameConverter Singleton = new TypeNameConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/f82d9.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/f82d9.json/default/QuickType.cs
new file mode 100644
index 0000000..8b2dfdf
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/f82d9.json/default/QuickType.cs
@@ -0,0 +1,266 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("basePath", Required = Required.Always)]
+        public string BasePath { get; set; }
+
+        [JsonProperty("definitions", Required = Required.Always)]
+        public Definitions Definitions { get; set; }
+
+        [JsonProperty("host", Required = Required.Always)]
+        public string Host { get; set; }
+
+        [JsonProperty("info", Required = Required.Always)]
+        public Info Info { get; set; }
+
+        [JsonProperty("paths", Required = Required.Always)]
+        public Paths Paths { get; set; }
+
+        [JsonProperty("produces", Required = Required.Always)]
+        public string[] Produces { get; set; }
+
+        [JsonProperty("schemes", Required = Required.Always)]
+        public string[] Schemes { get; set; }
+
+        [JsonProperty("swagger", Required = Required.Always)]
+        public string Swagger { get; set; }
+    }
+
+    public partial record Definitions
+    {
+        [JsonProperty("Report", Required = Required.Always)]
+        public Report Report { get; set; }
+    }
+
+    public partial record Report
+    {
+        [JsonProperty("properties", Required = Required.Always)]
+        public Properties Properties { get; set; }
+    }
+
+    public partial record Properties
+    {
+        [JsonProperty("click_url", Required = Required.Always)]
+        public ClickUrl ClickUrl { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public ClickUrl Country { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public ClickUrl Description { get; set; }
+
+        [JsonProperty("expiration_date", Required = Required.Always)]
+        public ClickUrl ExpirationDate { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public ClickUrl Id { get; set; }
+
+        [JsonProperty("industry", Required = Required.Always)]
+        public ClickUrl Industry { get; set; }
+
+        [JsonProperty("report_type", Required = Required.Always)]
+        public ClickUrl ReportType { get; set; }
+
+        [JsonProperty("source_industry", Required = Required.Always)]
+        public ClickUrl SourceIndustry { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public ClickUrl Title { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public ClickUrl Url { get; set; }
+    }
+
+    public partial record ClickUrl
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record Info
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("version", Required = Required.Always)]
+        public string Version { get; set; }
+    }
+
+    public partial record Paths
+    {
+        [JsonProperty("/market_research_library/search", Required = Required.Always)]
+        public MarketResearchLibrarySearch MarketResearchLibrarySearch { get; set; }
+    }
+
+    public partial record MarketResearchLibrarySearch
+    {
+        [JsonProperty("get", Required = Required.Always)]
+        public Get Get { get; set; }
+    }
+
+    public partial record Get
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("parameters", Required = Required.Always)]
+        public Parameter[] Parameters { get; set; }
+
+        [JsonProperty("responses", Required = Required.Always)]
+        public Responses Responses { get; set; }
+
+        [JsonProperty("summary", Required = Required.Always)]
+        public string Summary { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+    }
+
+    public partial record Parameter
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public TypeEnum Format { get; set; }
+
+        [JsonProperty("in", Required = Required.Always)]
+        public string In { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("required", Required = Required.Always)]
+        public bool ParameterRequired { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record Responses
+    {
+        [JsonProperty("200", Required = Required.Always)]
+        public The200 The200 { get; set; }
+    }
+
+    public partial record The200
+    {
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("schema", Required = Required.Always)]
+        public Schema Schema { get; set; }
+    }
+
+    public partial record Schema
+    {
+        [JsonProperty("items", Required = Required.Always)]
+        public Items Items { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Items
+    {
+        [JsonProperty("$ref", Required = Required.Always)]
+        public string Ref { get; set; }
+    }
+
+    public enum TypeEnum { String };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TypeEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "string")
+            {
+                return TypeEnum.String;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            if (value == TypeEnum.String)
+            {
+                serializer.Serialize(writer, "string");
+                return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/f974d.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/f974d.json/default/QuickType.cs
new file mode 100644
index 0000000..20a560e
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/f974d.json/default/QuickType.cs
@@ -0,0 +1,73 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("block_index", Required = Required.Always)]
+        public long BlockIndex { get; set; }
+
+        [JsonProperty("hash", Required = Required.Always)]
+        public string Hash { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("time", Required = Required.Always)]
+        public long Time { get; set; }
+
+        [JsonProperty("txIndexes", Required = Required.Always)]
+        public long[] TxIndexes { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/faff5.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/faff5.json/default/QuickType.cs
new file mode 100644
index 0000000..24ff2ee
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/faff5.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("response", Required = Required.Always)]
+        public Response Response { get; set; }
+    }
+
+    public partial record Response
+    {
+        [JsonProperty("player_count", Required = Required.Always)]
+        public long PlayerCount { get; set; }
+
+        [JsonProperty("result", Required = Required.Always)]
+        public long Result { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/fcca3.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/fcca3.json/default/QuickType.cs
new file mode 100644
index 0000000..3dfafa1
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/fcca3.json/default/QuickType.cs
@@ -0,0 +1,688 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Datum[][] Data { get; set; }
+
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("view", Required = Required.Always)]
+        public View View { get; set; }
+    }
+
+    public partial record View
+    {
+        [JsonProperty("attribution", Required = Required.Always)]
+        public string Attribution { get; set; }
+
+        [JsonProperty("averageRating", Required = Required.Always)]
+        public long AverageRating { get; set; }
+
+        [JsonProperty("category", Required = Required.Always)]
+        public string Category { get; set; }
+
+        [JsonProperty("columns", Required = Required.Always)]
+        public Column[] Columns { get; set; }
+
+        [JsonProperty("createdAt", Required = Required.Always)]
+        public long CreatedAt { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("displayType", Required = Required.Always)]
+        public string DisplayType { get; set; }
+
+        [JsonProperty("downloadCount", Required = Required.Always)]
+        public long DownloadCount { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("grants", Required = Required.Always)]
+        public Grant[] Grants { get; set; }
+
+        [JsonProperty("hideFromCatalog", Required = Required.Always)]
+        public bool HideFromCatalog { get; set; }
+
+        [JsonProperty("hideFromDataJson", Required = Required.Always)]
+        public bool HideFromDataJson { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("indexUpdatedAt", Required = Required.Always)]
+        public long IndexUpdatedAt { get; set; }
+
+        [JsonProperty("locale", Required = Required.Always)]
+        public string Locale { get; set; }
+
+        [JsonProperty("metadata", Required = Required.Always)]
+        public ViewMetadata Metadata { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("newBackend", Required = Required.Always)]
+        public bool NewBackend { get; set; }
+
+        [JsonProperty("numberOfComments", Required = Required.Always)]
+        public long NumberOfComments { get; set; }
+
+        [JsonProperty("oid", Required = Required.Always)]
+        public long Oid { get; set; }
+
+        [JsonProperty("owner", Required = Required.Always)]
+        public Owner Owner { get; set; }
+
+        [JsonProperty("provenance", Required = Required.Always)]
+        public string Provenance { get; set; }
+
+        [JsonProperty("publicationAppendEnabled", Required = Required.Always)]
+        public bool PublicationAppendEnabled { get; set; }
+
+        [JsonProperty("publicationDate", Required = Required.Always)]
+        public long PublicationDate { get; set; }
+
+        [JsonProperty("publicationGroup", Required = Required.Always)]
+        public long PublicationGroup { get; set; }
+
+        [JsonProperty("publicationStage", Required = Required.Always)]
+        public string PublicationStage { get; set; }
+
+        [JsonProperty("query", Required = Required.Always)]
+        public Query Query { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public string[] Rights { get; set; }
+
+        [JsonProperty("rowsUpdatedAt", Required = Required.Always)]
+        public long RowsUpdatedAt { get; set; }
+
+        [JsonProperty("rowsUpdatedBy", Required = Required.Always)]
+        public string RowsUpdatedBy { get; set; }
+
+        [JsonProperty("tableAuthor", Required = Required.Always)]
+        public Owner TableAuthor { get; set; }
+
+        [JsonProperty("tableId", Required = Required.Always)]
+        public long TableId { get; set; }
+
+        [JsonProperty("tags", Required = Required.Always)]
+        public string[] Tags { get; set; }
+
+        [JsonProperty("totalTimesRated", Required = Required.Always)]
+        public long TotalTimesRated { get; set; }
+
+        [JsonProperty("viewCount", Required = Required.Always)]
+        public long ViewCount { get; set; }
+
+        [JsonProperty("viewLastModified", Required = Required.Always)]
+        public long ViewLastModified { get; set; }
+
+        [JsonProperty("viewType", Required = Required.Always)]
+        public string ViewType { get; set; }
+    }
+
+    public partial record Column
+    {
+        [JsonProperty("cachedContents", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public CachedContents? CachedContents { get; set; }
+
+        [JsonProperty("dataTypeName", Required = Required.Always)]
+        public TypeName DataTypeName { get; set; }
+
+        [JsonProperty("description", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Description { get; set; }
+
+        [JsonProperty("fieldName", Required = Required.Always)]
+        public string FieldName { get; set; }
+
+        [JsonProperty("flags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Flags { get; set; }
+
+        [JsonProperty("format", Required = Required.Always)]
+        public Format Format { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("position", Required = Required.Always)]
+        public long Position { get; set; }
+
+        [JsonProperty("renderTypeName", Required = Required.Always)]
+        public TypeName RenderTypeName { get; set; }
+
+        [JsonProperty("tableColumnId", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? TableColumnId { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Width { get; set; }
+    }
+
+    public partial record CachedContents
+    {
+        [JsonProperty("average", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Average { get; set; }
+
+        [JsonProperty("largest", Required = Required.Always)]
+        public string Largest { get; set; }
+
+        [JsonProperty("non_null", Required = Required.Always)]
+        public long NonNull { get; set; }
+
+        [JsonProperty("null", Required = Required.Always)]
+        public long Null { get; set; }
+
+        [JsonProperty("smallest", Required = Required.Always)]
+        public string Smallest { get; set; }
+
+        [JsonProperty("sum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long? Sum { get; set; }
+
+        [JsonProperty("top", Required = Required.Always)]
+        public Top[] Top { get; set; }
+    }
+
+    public partial record Top
+    {
+        [JsonProperty("count", Required = Required.Always)]
+        public long Count { get; set; }
+
+        [JsonProperty("item", Required = Required.Always)]
+        public string Item { get; set; }
+    }
+
+    public partial record Format
+    {
+        [JsonProperty("align", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Align { get; set; }
+
+        [JsonProperty("noCommas", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool? NoCommas { get; set; }
+
+        [JsonProperty("precisionStyle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? PrecisionStyle { get; set; }
+    }
+
+    public partial record Grant
+    {
+        [JsonProperty("flags", Required = Required.Always)]
+        public string[] Flags { get; set; }
+
+        [JsonProperty("inherited", Required = Required.Always)]
+        public bool Inherited { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record ViewMetadata
+    {
+        [JsonProperty("attachments", Required = Required.Always)]
+        public Attachment[] Attachments { get; set; }
+
+        [JsonProperty("availableDisplayTypes", Required = Required.Always)]
+        public string[] AvailableDisplayTypes { get; set; }
+
+        [JsonProperty("custom_fields", Required = Required.Always)]
+        public CustomFields CustomFields { get; set; }
+
+        [JsonProperty("filterCondition", Required = Required.Always)]
+        public FilterCondition FilterCondition { get; set; }
+
+        [JsonProperty("jsonQuery", Required = Required.Always)]
+        public JsonQuery JsonQuery { get; set; }
+
+        [JsonProperty("rdfSubject", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long RdfSubject { get; set; }
+
+        [JsonProperty("renderTypeConfig", Required = Required.Always)]
+        public RenderTypeConfig RenderTypeConfig { get; set; }
+
+        [JsonProperty("rowLabel", Required = Required.Always)]
+        public string RowLabel { get; set; }
+    }
+
+    public partial record Attachment
+    {
+        [JsonProperty("assetId", Required = Required.Always)]
+        public string AssetId { get; set; }
+
+        [JsonProperty("blobId", Required = Required.Always)]
+        public string BlobId { get; set; }
+
+        [JsonProperty("filename", Required = Required.Always)]
+        public string Filename { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record CustomFields
+    {
+        [JsonProperty("Common Core", Required = Required.Always)]
+        public CommonCore CommonCore { get; set; }
+
+        [JsonProperty("Dataset Information", Required = Required.Always)]
+        public DatasetInformation DatasetInformation { get; set; }
+
+        [JsonProperty("Dataset Summary", Required = Required.Always)]
+        public DatasetSummary DatasetSummary { get; set; }
+
+        [JsonProperty("Disclaimers", Required = Required.Always)]
+        public Disclaimers Disclaimers { get; set; }
+    }
+
+    public partial record CommonCore
+    {
+        [JsonProperty("Contact Email", Required = Required.Always)]
+        public string ContactEmail { get; set; }
+
+        [JsonProperty("Contact Name", Required = Required.Always)]
+        public string ContactName { get; set; }
+
+        [JsonProperty("Publisher", Required = Required.Always)]
+        public string Publisher { get; set; }
+    }
+
+    public partial record DatasetInformation
+    {
+        [JsonProperty("Agency", Required = Required.Always)]
+        public string Agency { get; set; }
+    }
+
+    public partial record DatasetSummary
+    {
+        [JsonProperty("Contact Information", Required = Required.Always)]
+        public string ContactInformation { get; set; }
+
+        [JsonProperty("Coverage", Required = Required.Always)]
+        public string Coverage { get; set; }
+
+        [JsonProperty("Granularity", Required = Required.Always)]
+        public string Granularity { get; set; }
+
+        [JsonProperty("Organization", Required = Required.Always)]
+        public string Organization { get; set; }
+
+        [JsonProperty("Posting Frequency", Required = Required.Always)]
+        public string PostingFrequency { get; set; }
+
+        [JsonProperty("Time Period", Required = Required.Always)]
+        public string TimePeriod { get; set; }
+    }
+
+    public partial record Disclaimers
+    {
+        [JsonProperty("Disclaimer", Required = Required.Always)]
+        public string Disclaimer { get; set; }
+
+        [JsonProperty("Limitations", Required = Required.Always)]
+        public string Limitations { get; set; }
+    }
+
+    public partial record FilterCondition
+    {
+        [JsonProperty("children", Required = Required.Always)]
+        public Child[] Children { get; set; }
+
+        [JsonProperty("metadata", Required = Required.Always)]
+        public FilterConditionMetadata Metadata { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record Child
+    {
+        [JsonProperty("metadata", Required = Required.Always)]
+        public ChildMetadata Metadata { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record ChildMetadata
+    {
+        [JsonProperty("customValues", Required = Required.Always)]
+        public string[][] CustomValues { get; set; }
+
+        [JsonProperty("operator", Required = Required.Always)]
+        public string Operator { get; set; }
+
+        [JsonProperty("tableColumnId", Required = Required.Always)]
+        public TableColumnId TableColumnId { get; set; }
+    }
+
+    public partial record TableColumnId
+    {
+        [JsonProperty("703610", Required = Required.Always)]
+        public long The703610 { get; set; }
+    }
+
+    public partial record FilterConditionMetadata
+    {
+        [JsonProperty("advanced", Required = Required.Always)]
+        public bool Advanced { get; set; }
+
+        [JsonProperty("unifiedVersion", Required = Required.Always)]
+        public long UnifiedVersion { get; set; }
+    }
+
+    public partial record JsonQuery
+    {
+        [JsonProperty("order", Required = Required.Always)]
+        public Order[] Order { get; set; }
+    }
+
+    public partial record Order
+    {
+        [JsonProperty("ascending", Required = Required.Always)]
+        public bool Ascending { get; set; }
+
+        [JsonProperty("columnFieldName", Required = Required.Always)]
+        public string ColumnFieldName { get; set; }
+    }
+
+    public partial record RenderTypeConfig
+    {
+        [JsonProperty("visible", Required = Required.Always)]
+        public Visible Visible { get; set; }
+    }
+
+    public partial record Visible
+    {
+        [JsonProperty("table", Required = Required.Always)]
+        public bool Table { get; set; }
+    }
+
+    public partial record Owner
+    {
+        [JsonProperty("displayName", Required = Required.Always)]
+        public string DisplayName { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("profileImageUrlLarge", Required = Required.Always)]
+        public string ProfileImageUrlLarge { get; set; }
+
+        [JsonProperty("profileImageUrlMedium", Required = Required.Always)]
+        public string ProfileImageUrlMedium { get; set; }
+
+        [JsonProperty("profileImageUrlSmall", Required = Required.Always)]
+        public string ProfileImageUrlSmall { get; set; }
+
+        [JsonProperty("rights", Required = Required.Always)]
+        public string[] Rights { get; set; }
+
+        [JsonProperty("roleName", Required = Required.Always)]
+        public string RoleName { get; set; }
+
+        [JsonProperty("screenName", Required = Required.Always)]
+        public string ScreenName { get; set; }
+    }
+
+    public partial record Query
+    {
+        [JsonProperty("orderBys", Required = Required.Always)]
+        public OrderBy[] OrderBys { get; set; }
+    }
+
+    public partial record OrderBy
+    {
+        [JsonProperty("ascending", Required = Required.Always)]
+        public bool Ascending { get; set; }
+
+        [JsonProperty("expression", Required = Required.Always)]
+        public Expression Expression { get; set; }
+    }
+
+    public partial record Expression
+    {
+        [JsonProperty("columnId", Required = Required.Always)]
+        public long ColumnId { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public enum TypeName { MetaData, Number, Text };
+
+    public partial struct Datum
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Datum(long Integer) => new Datum { Integer = Integer };
+        public static implicit operator Datum(string String) => new Datum { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DatumConverter.Singleton,
+                TypeNameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DatumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Datum) || t == typeof(Datum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Datum { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Datum { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Datum { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Datum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Datum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Datum");
+        }
+
+        public static readonly DatumConverter Singleton = new DatumConverter();
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class TypeNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeName) || t == typeof(TypeName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "meta_data":
+                    return TypeName.MetaData;
+                case "number":
+                    return TypeName.Number;
+                case "text":
+                    return TypeName.Text;
+            }
+            throw new Exception("Cannot unmarshal type TypeName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeName)untypedValue;
+            switch (value)
+            {
+                case TypeName.MetaData:
+                    serializer.Serialize(writer, "meta_data");
+                    return;
+                case TypeName.Number:
+                    serializer.Serialize(writer, "number");
+                    return;
+                case TypeName.Text:
+                    serializer.Serialize(writer, "text");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeName");
+        }
+
+        public static readonly TypeNameConverter Singleton = new TypeNameConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/misc/fd329.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/misc/fd329.json/default/QuickType.cs
new file mode 100644
index 0000000..64ace20
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/misc/fd329.json/default/QuickType.cs
@@ -0,0 +1,88 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Dictionary<string, Datum> Data { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public Description Description { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("anomaly", Required = Required.Always)]
+        public string Anomaly { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record Description
+    {
+        [JsonProperty("base_period", Required = Required.Always)]
+        public string BasePeriod { get; set; }
+
+        [JsonProperty("missing", Required = Required.Always)]
+        public long Missing { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public string Units { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/blns-object.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/blns-object.json/default/QuickType.cs
new file mode 100644
index 0000000..b929b10
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/blns-object.json/default/QuickType.cs
@@ -0,0 +1,1896 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("a", Required = Required.Always)]
+        public A A { get; set; }
+
+        [JsonProperty("b", Required = Required.Always)]
+        public B B { get; set; }
+
+        [JsonProperty("c", Required = Required.Always)]
+        public C C { get; set; }
+    }
+
+    public partial record A
+    {
+        [JsonProperty("-0", Required = Required.Always)]
+        public string A0 { get; set; }
+
+        [JsonProperty("0,00", Required = Required.Always)]
+        public string A000 { get; set; }
+
+        [JsonProperty("0.0/0.0", Required = Required.Always)]
+        public string A0000 { get; set; }
+
+        [JsonProperty("-1", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long A1 { get; set; }
+
+        [JsonProperty("1/0", Required = Required.Always)]
+        public string A10 { get; set; }
+
+        [JsonProperty("1'000'000.00", Required = Required.Always)]
+        public string A100000000 { get; set; }
+
+        [JsonProperty("1/2", Required = Required.Always)]
+        public string A12 { get; set; }
+
+        [JsonProperty("1E02", Required = Required.Always)]
+        public string A1E02 { get; set; }
+
+        [JsonProperty("';alert(123);t='", Required = Required.Always)]
+        public string AAlert123T { get; set; }
+
+        [JsonProperty("false", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool AFalse { get; set; }
+
+        [JsonProperty("<a href=java&#1&#2&#3&#4&#5&#6&#7&#8&#11&#12script:javascript:alert(1)>XXX</a>", Required = Required.Always)]
+        public string AHrefJava123456781112ScriptJavascriptAlert1XxxA { get; set; }
+
+        [JsonProperty("<a href=\"javascript\\x09:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefJavascriptX09JavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"javascript\\x0A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefJavascriptX0AJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"javascript\\x3A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefJavascriptX3AJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x01javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX01JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x05javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX05JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x08javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX08JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x09javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX09JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x0Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX0CjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x10javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX10JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x11javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX11JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x13javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX13JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x17javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX17JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x1Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX1FjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xC2\\xA0javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXC2XA0JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE1\\x9A\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE1X9AX80JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE1\\xA0\\x8Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE1XA0X8EjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\x83javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80X83JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\x84javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80X84JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\x86javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80X86JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\x87javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80X87JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\xA8javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80XA8JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("\u202btest\u202b", Required = Required.Always)]
+        public string ATest { get; set; }
+
+        [JsonProperty("True", Required = Required.Always)]
+        public string ATrue { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:exp\\x00ression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXExpX00RessionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:exp\\x5Cression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXExpX5CressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\x09expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXX09ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\x0Bexpression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXX0BexpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\x20expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXX20ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x\\x3Aexpression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXX3AexpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xC2\\xA0expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXC2XA0ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x80expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X80ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x84expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X84ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x89expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X89ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x8Bexpression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X8BexpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty(";alert(123);", Required = Required.Always)]
+        public string Alert123 { get; set; }
+
+        [JsonProperty("\";alert(123);t=\"", Required = Required.Always)]
+        public string Alert123T { get; set; }
+
+        [JsonProperty("\\\";alert('XSS');//", Required = Required.Always)]
+        public string AlertXss { get; set; }
+
+        [JsonProperty("-.", Required = Required.Always)]
+        public string Ambitious { get; set; }
+
+        [JsonProperty("# and U+200B (ZERO WIDTH SPACE), which are in the C categories but are often", Required = Required.Always)]
+        public string AndU200BZeroWidthSpaceWhichAreInTheCCategoriesButAreOften { get; set; }
+
+        [JsonProperty("Arsenal canal", Required = Required.Always)]
+        public string ArsenalCanal { get; set; }
+
+        [JsonProperty("\" autofocus onkeyup=\"javascript:alert(123)", Required = Required.Always)]
+        public string AutofocusOnkeyupJavascriptAlert123 { get; set; }
+
+        [JsonProperty("AUX", Required = Required.Always)]
+        public string Aux { get; set; }
+
+        [JsonProperty("₀₁₂", Required = Required.Always)]
+        public string Braggadocious { get; set; }
+
+        [JsonProperty("#\tChanging length when lowercased", Required = Required.Always)]
+        public string ChangingLengthWhenLowercased { get; set; }
+
+        [JsonProperty("#\tCharacters which increase in length (2 to 3 bytes) when lowercased", Required = Required.Always)]
+        public string CharactersWhichIncreaseInLength2To3BytesWhenLowercased { get; set; }
+
+        [JsonProperty("classic", Required = Required.Always)]
+        public string Classic { get; set; }
+
+        [JsonProperty("#\tCommand Injection (Ruby)", Required = Required.Always)]
+        public string CommandInjectionRuby { get; set; }
+
+        [JsonProperty("<>?:\"{}|_+", Required = Required.Always)]
+        public string Cunning { get; set; }
+
+        [JsonProperty("%d", Required = Required.Always)]
+        public string D { get; set; }
+
+        [JsonProperty("Dick Van Dyke", Required = Required.Always)]
+        public string DickVanDyke { get; set; }
+
+        [JsonProperty("dontMakeAMap", Required = Required.Always)]
+        public bool DontMakeAMap { get; set; }
+
+        [JsonProperty("Dr. Herman I. Libshitz", Required = Required.Always)]
+        public string DrHermanILibshitz { get; set; }
+
+        [JsonProperty(" ", Required = Required.Always)]
+        public string Empty { get; set; }
+
+        [JsonProperty("$ENV{'HOME'}", Required = Required.Always)]
+        public string EnvHome { get; set; }
+
+        [JsonProperty("../../../../../../../../../../../etc/hosts", Required = Required.Always)]
+        public string EtcHosts { get; set; }
+
+        [JsonProperty("../../../../../../../../../../../etc/passwd%00", Required = Required.Always)]
+        public string EtcPasswd00 { get; set; }
+
+        [JsonProperty("`⁄€‹›ﬁﬂ‡°·‚—±", Required = Required.Always)]
+        public string FIﬂ { get; set; }
+
+        [JsonProperty("False", Required = Required.Always)]
+        public string False { get; set; }
+
+        [JsonProperty("'", Required = Required.Always)]
+        public string Fluffy { get; set; }
+
+        [JsonProperty("{0}", Required = Required.Always)]
+        public string Fluffy0 { get; set; }
+
+        [JsonProperty("#       fonts, and have a number of special behaviors", Required = Required.Always)]
+        public string FontsAndHaveANumberOfSpecialBehaviors { get; set; }
+
+        [JsonProperty("<foo val=`bar' />", Required = Required.Always)]
+        public string FooValBar { get; set; }
+
+        [JsonProperty("\u0080\u0081\u0082\u0083\u0084\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f", Required = Required.Always)]
+        public string Frisky { get; set; }
+
+        [JsonProperty("-,", Required = Required.Always)]
+        public string Hilarious { get; set; }
+
+        [JsonProperty("$HOME", Required = Required.Always)]
+        public string Home { get; set; }
+
+        [JsonProperty("#\tHuman injection", Required = Required.Always)]
+        public string HumanInjection { get; set; }
+
+        [JsonProperty("̡͓̞ͅI̗̘̦͝n͇͇͙v̮̫ok̲̫̙͈i̖͙̭̹̠̞n̡̻̮̣̺g̲͈͙̭͙̬͎ ̰t͔̦h̞̲e̢̤ ͍̬̲͖f̴̘͕̣è͖ẹ̥̩l͖͔͚i͓͚̦͠n͖͍̗͓̳̮g͍ ̨o͚̪͡f̘̣̬ ̖̘͖̟͙̮c҉͔̫͖͓͇͖ͅh̵̤̣͚͔á̗̼͕ͅo̼̣̥s̱͈̺̖̦̻͢.̛̖̞̠̫̰", Required = Required.Always)]
+        public string INVOkINGTHEFÈẸLINGOFCHÁOS { get; set; }
+
+        [JsonProperty("<!--[if<img src=x onerror=javascript:alert(1)//]> -->", Required = Required.Always)]
+        public string IfImgSrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<!--[if]><script>javascript:alert(1)</script -->", Required = Required.Always)]
+        public string IfScriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>", Required = Required.Always)]
+        public string ImgSrc106971189711599114105112116589710810111411640398883833941 { get; set; }
+
+        [JsonProperty("<IMG SRC=\"jav   ascript:alert('XSS');\">", Required = Required.Always)]
+        public string ImgSrcJavAscriptAlertXss { get; set; }
+
+        [JsonProperty("<IMG SRC=\"jav&#x0A;ascript:alert('XSS');\">", Required = Required.Always)]
+        public string ImgSrcJavX0AAscriptAlertXss { get; set; }
+
+        [JsonProperty("<IMG SRC=\"jav&#x0D;ascript:alert('XSS');\">", Required = Required.Always)]
+        public string ImgSrcJavX0DAscriptAlertXss { get; set; }
+
+        [JsonProperty("<img src\\x09=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcX09XOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src\\x11=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcX11XOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src=x onerror=\\x00\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcXOnerrorX00JavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src=x onerror=\\x09\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcXOnerrorX09JavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src=x\\x09onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcXX09OnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src=x\\x10onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcXX10OnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src=x\\x11onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcXX11OnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src=x\\x12onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcXX12OnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src=x\\x13onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcXX13OnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("`\"'><img src=xxx:x \\x00onerror=javascript:alert(1)>", Required = Required.Always)]
+        public string ImgSrcXxxXX00OnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("`\"'><img src=xxx:x \\x0Bonerror=javascript:alert(1)>", Required = Required.Always)]
+        public string ImgSrcXxxXX0BonerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("`\"'><img src=xxx:x \\x2Fonerror=javascript:alert(1)>", Required = Required.Always)]
+        public string ImgSrcXxxXX2FonerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img \\x00src=x onerror=\"alert(1)\">", Required = Required.Always)]
+        public string ImgX00SrcXOnerrorAlert1 { get; set; }
+
+        [JsonProperty("<img\\x10src=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgX10SrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img\\x13src=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgX13SrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img\\x32src=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgX32SrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img \\x39src=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgX39SrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty(",./;'[]\\-=", Required = Required.Always)]
+        public string Indecent { get; set; }
+
+        [JsonProperty(",", Required = Required.Always)]
+        public string Indigo { get; set; }
+
+        [JsonProperty("INF", Required = Required.Always)]
+        public string Inf { get; set; }
+
+        [JsonProperty("-Infinity", Required = Required.Always)]
+        public string Infinity { get; set; }
+
+        [JsonProperty("#\tInnocuous strings which may be blocked by profanity filters (https://en.wikipedia.org/wiki/Scunthorpe_problem)", Required = Required.Always)]
+        public string InnocuousStringsWhichMayBeBlockedByProfanityFiltersHttpsEnWikipediaOrgWikiScunthorpeProblem { get; set; }
+
+        [JsonProperty("Jimmy Clitheroe", Required = Required.Always)]
+        public string JimmyClitheroe { get; set; }
+
+        [JsonProperty("Kernel.exit(1)", Required = Required.Always)]
+        public string KernelExit1 { get; set; }
+
+        [JsonProperty("#\tKnown CVEs and Vulnerabilities", Required = Required.Always)]
+        public string KnownCvEsAndVulnerabilities { get; set; }
+
+        [JsonProperty("Lightwater Country Park", Required = Required.Always)]
+        public string LightwaterCountryPark { get; set; }
+
+        [JsonProperty("LPT2", Required = Required.Always)]
+        public string Lpt2 { get; set; }
+
+        [JsonProperty("LPT3", Required = Required.Always)]
+        public string Lpt3 { get; set; }
+
+        [JsonProperty("`ls -al /`", Required = Required.Always)]
+        public string LsAl { get; set; }
+
+        [JsonProperty("\\", Required = Required.Always)]
+        public string Magenta { get; set; }
+
+        [JsonProperty("\u00ad\u0600\u0601\u0602\u0603\u0604\u0605\u061c\u06dd\u070f\u180e\u200b\u200c\u200d\u200e\u200f\u202a\u202b\u202c\u202d\u202e\u2060\u2061\u2062\u2063\u2064\u2066\u2067\u2068\u2069\u206a\u206b\u206c\u206d\u206e\u206f\ufeff\ufff9\ufffa\ufffb\ud804\udcbd\ud82f\udca0\ud82f\udca1\ud82f\udca2\ud82f\udca3\ud834\udd73\ud834\udd74\ud834\udd75\ud834\udd76\ud834\udd77\ud834\udd78\ud834\udd79\ud834\udd7a\udb40\udc01\udb40\udc20\udb40\udc21\udb40\udc22\udb40\udc23\udb40\udc24\udb40\udc25\udb40\udc26\udb40\udc27\udb40\udc28\udb40\udc29\udb40\udc2a\udb40\udc2b\udb40\udc2c\udb40\udc2d\udb40\udc2e\udb40\udc2f\udb40\udc30\udb40\udc31\udb40\udc32\udb40\udc33\udb40\udc34\udb40\udc35\udb40\udc36\udb40\udc37\udb40\udc38\udb40\udc39\udb40\udc3a\udb40\udc3b\udb40\udc3c\udb40\udc3d\udb40\udc3e\udb40\udc3f\udb40\udc40\udb40\udc41\udb40\udc42\udb40\udc43\udb40\udc44\udb40\udc45\udb40\udc46\udb40\udc47\udb40\udc48\udb40\udc49\udb40\udc4a\udb40\udc4b\udb40\udc4c\udb40\udc4d\udb40\udc4e\udb40\udc4f\udb40\udc50\udb40\udc51\udb40\udc52\udb40\udc53\udb40\udc54\udb40\udc55\udb40\udc56\udb40\udc57\udb40\udc58\udb40\udc59\udb40\udc5a\udb40\udc5b\udb40\udc5c\udb40\udc5d\udb40\udc5e\udb40\udc5f\udb40\udc60\udb40\udc61\udb40\udc62\udb40\udc63\udb40\udc64\udb40\udc65\udb40\udc66\udb40\udc67\udb40\udc68\udb40\udc69\udb40\udc6a\udb40\udc6b\udb40\udc6c\udb40\udc6d\udb40\udc6e\udb40\udc6f\udb40\udc70\udb40\udc71\udb40\udc72\udb40\udc73\udb40\udc74\udb40\udc75\udb40\udc76\udb40\udc77\udb40\udc78\udb40\udc79\udb40\udc7a\udb40\udc7b\udb40\udc7c\udb40\udc7d\udb40\udc7e\udb40\udc7f", Required = Required.Always)]
+        public string Mischievous { get; set; }
+
+        [JsonProperty("#\tMSDOS/Windows Special Filenames", Required = Required.Always)]
+        public string MsdosWindowsSpecialFilenames { get; set; }
+
+        [JsonProperty("nil", Required = Required.Always)]
+        public string Nil { get; set; }
+
+        [JsonProperty("# Non-whitespace C1 controls: U+0080 through U+0084 and U+0086 through U+009F.", Required = Required.Always)]
+        public string NonWhitespaceC1ControlsU0080ThroughU0084AndU0086ThroughU009F { get; set; }
+
+        [JsonProperty("None", Required = Required.Always)]
+        public string None { get; set; }
+
+        [JsonProperty("(null)", Required = Required.Always)]
+        public string Null { get; set; }
+
+        [JsonProperty(" onfocus=JaVaSCript:alert(123) autofocus", Required = Required.Always)]
+        public string OnfocusJaVaSCriptAlert123Autofocus { get; set; }
+
+        [JsonProperty("' OR '1'='1", Required = Required.Always)]
+        public string Or11 { get; set; }
+
+        [JsonProperty("Penistone Community Church", Required = Required.Always)]
+        public string PenistoneCommunityChurch { get; set; }
+
+        [JsonProperty("perl -e 'print \"<IMG SRC=java\\0script:alert(\\\"XSS\\\")>\";' > out", Required = Required.Always)]
+        public string PerlEPrintImgSrcJava0ScriptAlertXssOut { get; set; }
+
+        [JsonProperty("PRN", Required = Required.Always)]
+        public string Prn { get; set; }
+
+        [JsonProperty("!@#$%^&*()`~", Required = Required.Always)]
+        public string Purple { get; set; }
+
+        [JsonProperty("0", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Purple0 { get; set; }
+
+        [JsonProperty("1", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleParseStringConverter))]
+        public long Purple1 { get; set; }
+
+        [JsonProperty("\u2066test\u2067", Required = Required.Always)]
+        public string PurpleTest { get; set; }
+
+        [JsonProperty("RomansInSussex.co.uk", Required = Required.Always)]
+        public string RomansInSussexCoUk { get; set; }
+
+        [JsonProperty("%s", Required = Required.Always)]
+        public string S { get; set; }
+
+        [JsonProperty("<<< %s(un='%s') = %u", Required = Required.Always)]
+        public string SUnSU { get; set; }
+
+        [JsonProperty("<sc<script>ript>alert(123)</sc</script>ript>", Required = Required.Always)]
+        public string ScScriptRiptAlert123ScScriptRipt { get; set; }
+
+        [JsonProperty("\"><script>alert(123);</script x=\"", Required = Required.Always)]
+        public string ScriptAlert123ScriptX { get; set; }
+
+        [JsonProperty("#\tScript Injection", Required = Required.Always)]
+        public string ScriptInjection { get; set; }
+
+        [JsonProperty("</script><script>alert(123)</script>", Required = Required.Always)]
+        public string ScriptScriptAlert123Script { get; set; }
+
+        [JsonProperty("<SCRIPT SRC=http://ha.ckers.org/xss.js?< B >", Required = Required.Always)]
+        public string ScriptSrcHttpHaCkersOrgXssJsB { get; set; }
+
+        [JsonProperty("<SCRIPT/SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>", Required = Required.Always)]
+        public string ScriptSrcHttpHaCkersOrgXssJsScript { get; set; }
+
+        [JsonProperty("\"`'><script>\\x00javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptX00JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("<script\\x09type=\"text/javascript\">javascript:alert(1);</script>", Required = Required.Always)]
+        public string ScriptX09TypeTextJavascriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\x0Cjavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptX0CjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\x0Djavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptX0DjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("<script\\x20type=\"text/javascript\">javascript:alert(1);</script>", Required = Required.Always)]
+        public string ScriptX20TypeTextJavascriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("<script\\x3Etype=\"text/javascript\">javascript:alert(1);</script>", Required = Required.Always)]
+        public string ScriptX3EtypeTextJavascriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xC2\\x85javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXC2X85JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xC2\\xA0javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXC2XA0JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE1\\x9A\\x80javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE1X9AX80JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE1\\xA0\\x8Ejavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE1XA0X8EjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x81javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X81JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x86javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X86JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x89javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X89JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x81\\x9Fjavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X81X9FjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xEF\\xBB\\xBFjavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXEfXBbXBFjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xF0\\x90\\x96\\x9Ajavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXF0X90X96X9AjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("<SCRIPT/XSS SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>", Required = Required.Always)]
+        public string ScriptXssSrcHttpHaCkersOrgXssJsScript { get; set; }
+
+        [JsonProperty("#\tSQL Injection", Required = Required.Always)]
+        public string SqlInjection { get; set; }
+
+        [JsonProperty("(╯°□°）╯︵ ┻━┻)", Required = Required.Always)]
+        public string Sticky { get; set; }
+
+        [JsonProperty("#\tString which can reveal system files when parsed by a badly configured XML parser", Required = Required.Always)]
+        public string StringWhichCanRevealSystemFilesWhenParsedByABadlyConfiguredXmlParser { get; set; }
+
+        [JsonProperty("#\tStrings that test for known vulnerabilities", Required = Required.Always)]
+        public string StringsThatTestForKnownVulnerabilities { get; set; }
+
+        [JsonProperty("#\tStrings which can be accidentally expanded into different strings if evaluated in the wrong context, e.g. used as a printf format string or via Perl or shell eval. Might expose sensitive data from the program doing the interpolation, or might just represent the wrong string.", Required = Required.Always)]
+        public string StringsWhichCanBeAccidentallyExpandedIntoDifferentStringsIfEvaluatedInTheWrongContextEGUsedAsAPrintfFormatStringOrViaPerlOrShellEvalMightExposeSensitiveDataFromTheProgramDoingTheInterpolationOrMightJustRepresentTheWrongString { get; set; }
+
+        [JsonProperty("#\tStrings which can call system commands within Ruby/Rails applications", Required = Required.Always)]
+        public string StringsWhichCanCallSystemCommandsWithinRubyRailsApplications { get; set; }
+
+        [JsonProperty("#\tStrings which consists of Japanese-style emoticons which are popular on the web", Required = Required.Always)]
+        public string StringsWhichConsistsOfJapaneseStyleEmoticonsWhichArePopularOnTheWeb { get; set; }
+
+        [JsonProperty("#\tStrings which contain bold/italic/etc. versions of normal characters", Required = Required.Always)]
+        public string StringsWhichContainBoldItalicEtcVersionsOfNormalCharacters { get; set; }
+
+        [JsonProperty("#\tStrings which contain common unicode symbols (e.g. smart quotes)", Required = Required.Always)]
+        public string StringsWhichContainCommonUnicodeSymbolsEGSmartQuotes { get; set; }
+
+        [JsonProperty("#\tStrings which contain Emoji; should be the same behavior as two-byte characters, but not always", Required = Required.Always)]
+        public string StringsWhichContainEmojiShouldBeTheSameBehaviorAsTwoByteCharactersButNotAlways { get; set; }
+
+        [JsonProperty("#\tStrings which contain misplaced quotation marks; can cause encoding errors", Required = Required.Always)]
+        public string StringsWhichContainMisplacedQuotationMarksCanCauseEncodingErrors { get; set; }
+
+        [JsonProperty("#\tStrings which contain unicode subscripts/superscripts; can cause rendering issues", Required = Required.Always)]
+        public string StringsWhichContainUnicodeSubscriptsSuperscriptsCanCauseRenderingIssues { get; set; }
+
+        [JsonProperty("#\tStrings which crashed iMessage in various versions of iOS", Required = Required.Always)]
+        public string StringsWhichCrashedIMessageInVariousVersionsOfIOs { get; set; }
+
+        [JsonProperty("#\tStrings which may cause human to reinterpret worldview", Required = Required.Always)]
+        public string StringsWhichMayCauseHumanToReinterpretWorldview { get; set; }
+
+        [JsonProperty("Super Bowl XXX", Required = Required.Always)]
+        public string SuperBowlXxx { get; set; }
+
+        [JsonProperty("'\"'", Required = Required.Always)]
+        public string Tentacled { get; set; }
+
+        [JsonProperty("\u202a\u202atest\u202a", Required = Required.Always)]
+        public string Test { get; set; }
+
+        [JsonProperty("</textarea><script>alert(123)</script>", Required = Required.Always)]
+        public string TextareaScriptAlert123Script { get; set; }
+
+        [JsonProperty("+0", Required = Required.Always)]
+        public string The0 { get; set; }
+
+        [JsonProperty("0..0", Required = Required.Always)]
+        public string The00 { get; set; }
+
+        [JsonProperty("0,0,0", Required = Required.Always)]
+        public string The000 { get; set; }
+
+        [JsonProperty("0,0/0,0", Required = Required.Always)]
+        public string The0000 { get; set; }
+
+        [JsonProperty("00˙Ɩ$-", Required = Required.Always)]
+        public string The00Ɩ { get; set; }
+
+        [JsonProperty("0x0", Required = Required.Always)]
+        public string The0X0 { get; set; }
+
+        [JsonProperty("⒯⒣⒠ ⒬⒰⒤⒞⒦ ⒝⒭⒪⒲⒩ ⒡⒪⒳ ⒥⒰⒨⒫⒮ ⒪⒱⒠⒭ ⒯⒣⒠ ⒧⒜⒵⒴ ⒟⒪⒢", Required = Required.Always)]
+        public string The1 { get; set; }
+
+        [JsonProperty("﷽", Required = Required.Always)]
+        public string The10 { get; set; }
+
+        [JsonProperty("1.00", Required = Required.Always)]
+        public string The100 { get; set; }
+
+        [JsonProperty("1.0/0.0", Required = Required.Always)]
+        public string The1000 { get; set; }
+
+        [JsonProperty("1'000,00", Required = Required.Always)]
+        public string The100000 { get; set; }
+
+        [JsonProperty("1 000 000.00", Required = Required.Always)]
+        public string The100000000 { get; set; }
+
+        [JsonProperty("\ufeff", Required = Required.Always)]
+        public string The11 { get; set; }
+
+        [JsonProperty("ﾟ･✿ヾ╲(｡◕‿◕｡)╱✿･ﾟ", Required = Required.Always)]
+        public string The12 { get; set; }
+
+        [JsonProperty("123456789012345678901234567890123456789", Required = Required.Always)]
+        public string The123456789012345678901234567890123456789 { get; set; }
+
+        [JsonProperty("\ufffe", Required = Required.Always)]
+        public string The13 { get; set; }
+
+        [JsonProperty("1;DROP TABLE users", Required = Required.Always)]
+        public string The1DropTableUsers { get; set; }
+
+        [JsonProperty("-1E02", Required = Required.Always)]
+        public string The1E02 { get; set; }
+
+        [JsonProperty("1E2", Required = Required.Always)]
+        public string The1E2 { get; set; }
+
+        [JsonProperty("1#QNAN", Required = Required.Always)]
+        public string The1Qnan { get; set; }
+
+        [JsonProperty("1#SNAN", Required = Required.Always)]
+        public string The1Snan { get; set; }
+
+        [JsonProperty("\ud835\udc7b\ud835\udc89\ud835\udc86 \ud835\udc92\ud835\udc96\ud835\udc8a\ud835\udc84\ud835\udc8c \ud835\udc83\ud835\udc93\ud835\udc90\ud835\udc98\ud835\udc8f \ud835\udc87\ud835\udc90\ud835\udc99 \ud835\udc8b\ud835\udc96\ud835\udc8e\ud835\udc91\ud835\udc94 \ud835\udc90\ud835\udc97\ud835\udc86\ud835\udc93 \ud835\udc95\ud835\udc89\ud835\udc86 \ud835\udc8d\ud835\udc82\ud835\udc9b\ud835\udc9a \ud835\udc85\ud835\udc90\ud835\udc88", Required = Required.Always)]
+        public string The2 { get; set; }
+
+        [JsonProperty("\ud835\udce3\ud835\udcf1\ud835\udcee \ud835\udcfa\ud835\udcfe\ud835\udcf2\ud835\udcec\ud835\udcf4 \ud835\udceb\ud835\udcfb\ud835\udcf8\ud835\udd00\ud835\udcf7 \ud835\udcef\ud835\udcf8\ud835\udd01 \ud835\udcf3\ud835\udcfe\ud835\udcf6\ud835\udcf9\ud835\udcfc \ud835\udcf8\ud835\udcff\ud835\udcee\ud835\udcfb \ud835\udcfd\ud835\udcf1\ud835\udcee \ud835\udcf5\ud835\udcea\ud835\udd03\ud835\udd02 \ud835\udced\ud835\udcf8\ud835\udcf0", Required = Required.Always)]
+        public string The3 { get; set; }
+
+        [JsonProperty("\ud835\udd7f\ud835\udd8d\ud835\udd8a \ud835\udd96\ud835\udd9a\ud835\udd8e\ud835\udd88\ud835\udd90 \ud835\udd87\ud835\udd97\ud835\udd94\ud835\udd9c\ud835\udd93 \ud835\udd8b\ud835\udd94\ud835\udd9d \ud835\udd8f\ud835\udd9a\ud835\udd92\ud835\udd95\ud835\udd98 \ud835\udd94\ud835\udd9b\ud835\udd8a\ud835\udd97 \ud835\udd99\ud835\udd8d\ud835\udd8a \ud835\udd91\ud835\udd86\ud835\udd9f\ud835\udd9e \ud835\udd89\ud835\udd94\ud835\udd8c", Required = Required.Always)]
+        public string The4 { get; set; }
+
+        [JsonProperty("\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8 \ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2\ud83c\uddf8", Required = Required.Always)]
+        public string The5 { get; set; }
+
+        [JsonProperty("\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6", Required = Required.Always)]
+        public string The6 { get; set; }
+
+        [JsonProperty("\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2", Required = Required.Always)]
+        public string The7 { get; set; }
+
+        [JsonProperty("\ud83d\udc69\ud83c\udffd", Required = Required.Always)]
+        public string The8 { get; set; }
+
+        [JsonProperty("\ud83d\udebe \ud83c\udd92 \ud83c\udd93 \ud83c\udd95 \ud83c\udd96 \ud83c\udd97 \ud83c\udd99 \ud83c\udfe7", Required = Required.Always)]
+        public string The9 { get; set; }
+
+        [JsonProperty("999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", Required = Required.Always)]
+        public string The999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 { get; set; }
+
+        [JsonProperty("# The next two lines may appear to be blank or mojibake in some viewers.", Required = Required.Always)]
+        public string TheNextTwoLinesMayAppearToBeBlankOrMojibakeInSomeViewers { get; set; }
+
+        [JsonProperty("The quic\u0008\u0008\u0008\u0008\u0008\u0008k brown fo\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007x... [Beeeep]", Required = Required.Always)]
+        public string TheQuicKBrownFoXBeeeep { get; set; }
+
+        [JsonProperty("٠١٢٣٤٥٦٧٨٩", Required = Required.Always)]
+        public string The٠١٢٣٤٥٦٧٨٩ { get; set; }
+
+        [JsonProperty("TRUE", Required = Required.Always)]
+        public string True { get; set; }
+
+        [JsonProperty("#\tTwo-Byte Characters", Required = Required.Always)]
+        public string TwoByteCharacters { get; set; }
+
+        [JsonProperty("# U+0000, U+000A, or U+000D (NUL, LF, CR).", Required = Required.Always)]
+        public string U0000U000AOrU000DNulLfCr { get; set; }
+
+        [JsonProperty("<u oncopy=alert()> Copy me</u>", Required = Required.Always)]
+        public string UOncopyAlertCopyMeU { get; set; }
+
+        [JsonProperty("undef", Required = Required.Always)]
+        public string Undef { get; set; }
+
+        [JsonProperty("#\tUnicode font", Required = Required.Always)]
+        public string UnicodeFont { get; set; }
+
+        [JsonProperty("#\tUnicode Numbers", Required = Required.Always)]
+        public string UnicodeNumbers { get; set; }
+
+        [JsonProperty("#\tUnwanted Interpolation", Required = Required.Always)]
+        public string UnwantedInterpolation { get; set; }
+
+        [JsonProperty("%x('ls -al /')", Required = Required.Always)]
+        public string XLsAl { get; set; }
+
+        [JsonProperty("Z̮̞̠͙͔ͅḀ̗̞͈̻̗Ḷ͙͎̯̹̞͓G̻O̭̗̮", Required = Required.Always)]
+        public string ZḀḶGO { get; set; }
+
+        [JsonProperty("¡™£¢∞§¶•ªº–≠", Required = Required.Always)]
+        public string ªº { get; set; }
+
+        [JsonProperty("¸˛Ç◊ı˜Â¯˘¿", Required = Required.Always)]
+        public string ÇIÂ { get; set; }
+
+        [JsonProperty("Œ„´‰ˇÁ¨ˆØ∏”’", Required = Required.Always)]
+        public string ŒÁØ { get; set; }
+
+        [JsonProperty("œ∑´®†¥¨ˆøπ“‘", Required = Required.Always)]
+        public string ŒØπ { get; set; }
+
+        [JsonProperty("Ⱥ", Required = Required.Always)]
+        public string Ⱥ { get; set; }
+
+        [JsonProperty("Ⱦ", Required = Required.Always)]
+        public string Ⱦ { get; set; }
+
+        [JsonProperty("( ͡° ͜ʖ ͡°)", Required = Required.Always)]
+        public string ʖ { get; set; }
+
+        [JsonProperty("הָיְתָהtestالصفحات التّحول", Required = Required.Always)]
+        public string הָיְתָהTestالصفحاتالتّحول { get; set; }
+
+        [JsonProperty("ثم نفس سقطت وبالتحديد،, جزيرتي باستخدام أن دنو. إذ هنا؟ الستار وتنصيب كان. أهّل ايطاليا، بريطانيا-فرنسا قد أخذ. سليمان، إتفاقية بين ما, يذكر الحدود أي بعد, معاملة بولندا، الإطلاق عل إيو.", Required = Required.Always)]
+        public string ثمنفسسقطتوبالتحديدجزيرتيباستخدامأندنوإذهناالستاروتنصيبكانأهّلايطاليابريطانيافرنساقدأخذسليمانإتفاقيةبينمايذكرالحدودأيبعدمعاملةبولنداالإطلاقعلإيو { get; set; }
+
+        [JsonProperty("ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็", Required = Required.Always)]
+        public string ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ { get; set; }
+
+        [JsonProperty("パーティーへ行かないか", Required = Required.Always)]
+        public string パーティーへ行かないか { get; set; }
+
+        [JsonProperty("和製漢語", Required = Required.Always)]
+        public string 和製漢語 { get; set; }
+
+        [JsonProperty("田中さんにあげて下さい", Required = Required.Always)]
+        public string 田中さんにあげて下さい { get; set; }
+
+        [JsonProperty("｀ｨ(´∀｀∩", Required = Required.Always)]
+        public string ｨ { get; set; }
+    }
+
+    public partial record B
+    {
+        [JsonProperty("<a href=http://foo.bar/#x=`y></a><img alt=\"`><img src=x:x onerror=javascript:alert(1)></a>\">", Required = Required.Always)]
+        public string AHrefHttpFooBarXYAImgAltImgSrcXXOnerrorJavascriptAlert1A { get; set; }
+
+        [JsonProperty("<a href=\"javascript\\x00:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefJavascriptX00JavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"javascript\\x0D:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefJavascriptX0DJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x02javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX02JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x04javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX04JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x0Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX0AjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x0Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX0DjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x0Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX0EjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x0Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX0FjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x16javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX16JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x19javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX19JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x1Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX1AjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x1Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX1DjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x1Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX1EjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\x81javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80X81JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\x82javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80X82JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\xA9javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80XA9JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\xAFjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80XAFjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:expression\\x5C(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXExpressionX5CJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\x0Aexpression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXX0AexpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\x0Dexpression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXX0DexpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x82expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X82ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x83expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X83ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x85expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X85ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x87expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X87ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x8Aexpression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X8AexpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("\ud83d\ude0d", Required = Required.Always)]
+        public string Ambitious { get; set; }
+
+        [JsonProperty("# appear in input.", Required = Required.Always)]
+        public string AppearInInput { get; set; }
+
+        [JsonProperty("+++ATH0", Required = Required.Always)]
+        public string Ath0 { get; set; }
+
+        [JsonProperty("' autofocus onkeyup='javascript:alert(123)", Required = Required.Always)]
+        public string AutofocusOnkeyupJavascriptAlert123 { get; set; }
+
+        [JsonProperty("1'000.00", Required = Required.Always)]
+        public string B100000 { get; set; }
+
+        [JsonProperty("<IMG SRC=# onmouseover=\"alert('xxs')\">", Required = Required.Always)]
+        public string BImgSrcOnmouseoverAlertXxs { get; set; }
+
+        [JsonProperty("--><script>alert(123)</script>", Required = Required.Always)]
+        public string BScriptAlert123Script { get; set; }
+
+        [JsonProperty("`touch /tmp/blns.fail`", Required = Required.Always)]
+        public string BTouchTmpBlnsFail { get; set; }
+
+        [JsonProperty("basement", Required = Required.Always)]
+        public string Basement { get; set; }
+
+        [JsonProperty("But now...\u001b[20Cfor my greatest trick...\u001b[8m", Required = Required.Always)]
+        public string ButNow20CforMyGreatestTrick8M { get; set; }
+
+        [JsonProperty("# \"Byte order marks\", U+FEFF and U+FFFE, each on its own line.", Required = Required.Always)]
+        public string ByteOrderMarksUFeffAndUFffeEachOnItsOwnLine { get; set; }
+
+        [JsonProperty("COM1", Required = Required.Always)]
+        public string Com1 { get; set; }
+
+        [JsonProperty("COM3", Required = Required.Always)]
+        public string Com3 { get; set; }
+
+        [JsonProperty("# Commonly misinterpreted as additional graphic characters.", Required = Required.Always)]
+        public string CommonlyMisinterpretedAsAdditionalGraphicCharacters { get; set; }
+
+        [JsonProperty("CON", Required = Required.Always)]
+        public string Con { get; set; }
+
+        [JsonProperty("# contexts.  Divided into three groups based on (US-layout) keyboard position.", Required = Required.Always)]
+        public string ContextsDividedIntoThreeGroupsBasedOnUsLayoutKeyboardPosition { get; set; }
+
+        [JsonProperty("#\tCredit: https://twitter.com/jifa/status/625776454479970304", Required = Required.Always)]
+        public string CreditHttpsTwitterComJifaStatus625776454479970304 { get; set; }
+
+        [JsonProperty("/dev/null; touch /tmp/blns.fail ; echo", Required = Required.Always)]
+        public string DevNullTouchTmpBlnsFailEcho { get; set; }
+
+        [JsonProperty("dontMakeAMap", Required = Required.Always)]
+        public bool DontMakeAMap { get; set; }
+
+        [JsonProperty("\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f\u007f", Required = Required.Always)]
+        public string Empty { get; set; }
+
+        [JsonProperty("eval(\"puts 'hello world'\")", Required = Required.Always)]
+        public string EvalPutsHelloWorld { get; set; }
+
+        [JsonProperty("expression", Required = Required.Always)]
+        public string Expression { get; set; }
+
+        [JsonProperty("FALSE", Required = Required.Always)]
+        public string False { get; set; }
+
+        [JsonProperty("File:///", Required = Required.Always)]
+        public string File { get; set; }
+
+        [JsonProperty("#\tFile Inclusion", Required = Required.Always)]
+        public string FileInclusion { get; set; }
+
+        [JsonProperty("\"", Required = Required.Always)]
+        public string Fluffy { get; set; }
+
+        [JsonProperty("<foo val=”bar“ />", Required = Required.Always)]
+        public string FooValBar { get; set; }
+
+        [JsonProperty("# general category Cf (in Unicode 8.0.0).", Required = Required.Always)]
+        public string GeneralCategoryCfInUnicode800 { get; set; }
+
+        [JsonProperty("̦H̬̤̗̤͝e͜ ̜̥̝̻͍̟́w̕h̖̯͓o̝͙̖͎̱̮ ҉̺̙̞̟͈W̷̼̭a̺̪͍į͈͕̭͙̯̜t̶̼̮s̘͙͖̕ ̠̫̠B̻͍͙͉̳ͅe̵h̵̬͇̫͙i̹͓̳̳̮͎̫̕n͟d̴̪̜̖ ̰͉̩͇͙̲͞ͅT͖̼͓̪͢h͏͓̮̻e̬̝̟ͅ ̤̹̝W͙̞̝͔͇͝ͅa͏͓͔̹̼̣l̴͔̰̤̟͔ḽ̫.͕", Required = Required.Always)]
+        public string HEWHOWAĮTSBEHINDTHEWALḼ { get; set; }
+
+        [JsonProperty("--help", Required = Required.Always)]
+        public string Help { get; set; }
+
+        [JsonProperty("\ud835\udd4b\ud835\udd59\ud835\udd56 \ud835\udd62\ud835\udd66\ud835\udd5a\ud835\udd54\ud835\udd5c \ud835\udd53\ud835\udd63\ud835\udd60\ud835\udd68\ud835\udd5f \ud835\udd57\ud835\udd60\ud835\udd69 \ud835\udd5b\ud835\udd66\ud835\udd5e\ud835\udd61\ud835\udd64 \ud835\udd60\ud835\udd67\ud835\udd56\ud835\udd63 \ud835\udd65\ud835\udd59\ud835\udd56 \ud835\udd5d\ud835\udd52\ud835\udd6b\ud835\udd6a \ud835\udd55\ud835\udd60\ud835\udd58", Required = Required.Always)]
+        public string Hilarious { get; set; }
+
+        [JsonProperty("http://a/%%30%30", Required = Required.Always)]
+        public Uri HttpA3030 { get; set; }
+
+        [JsonProperty("#\tiOS Vulnerabilities", Required = Required.Always)]
+        public string IOsVulnerabilities { get; set; }
+
+        [JsonProperty("If you're reading this, you've been in a coma for almost 20 years now. We're trying a new technique. We don't know where this message will end up in your dream, but we hope it works. Please wake up, we miss you.", Required = Required.Always)]
+        public string IfYouReReadingThisYouVeBeenInAComaForAlmost20YearsNowWeReTryingANewTechniqueWeDonTKnowWhereThisMessageWillEndUpInYourDreamButWeHopeItWorksPleaseWakeUpWeMissYou { get; set; }
+
+        [JsonProperty("<iframe src=http://ha.ckers.org/scriptlet.html <", Required = Required.Always)]
+        public string IframeSrcHttpHaCkersOrgScriptletHtml { get; set; }
+
+        [JsonProperty("<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>", Required = Required.Always)]
+        public string ImgSrc00001060000097000011800000970000115000009900001140000105000011200001160000058000009700001080000101000011400001160000040000003900000880000083000008300000390000041 { get; set; }
+
+        [JsonProperty("<IMG SRC=\" &#14;  javascript:alert('XSS');\">", Required = Required.Always)]
+        public string ImgSrc14JavascriptAlertXss { get; set; }
+
+        [JsonProperty("<IMG SRC=\"jav&#x09;ascript:alert('XSS');\">", Required = Required.Always)]
+        public string ImgSrcJavX09AscriptAlertXss { get; set; }
+
+        [JsonProperty("<IMG SRC= onmouseover=\"alert('xxs')\">", Required = Required.Always)]
+        public string ImgSrcOnmouseoverAlertXxs { get; set; }
+
+        [JsonProperty("<img src\\x00=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcX00XOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>", Required = Required.Always)]
+        public string ImgSrcX6AX61X76X61X73X63X72X69X70X74X3AX61X6CX65X72X74X28X27X58X53X53X27X29 { get; set; }
+
+        [JsonProperty("<img src=x onerror=\\x11\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcXOnerrorX11JavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src=x onerror=\\x12\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcXOnerrorX12JavascriptAlert1 { get; set; }
+
+        [JsonProperty("`\"'><img src=xxx:x \\x0Aonerror=javascript:alert(1)>", Required = Required.Always)]
+        public string ImgSrcXxxXX0AonerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("`\"'><img src=xxx:x \\x0Conerror=javascript:alert(1)>", Required = Required.Always)]
+        public string ImgSrcXxxXX0ConerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("`\"'><img src=xxx:x \\x0Donerror=javascript:alert(1)>", Required = Required.Always)]
+        public string ImgSrcXxxXX0DonerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img \\x00src=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgX00SrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img \\x11src=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgX11SrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img \\x12src=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgX12SrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img \\x47src=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgX47SrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("❤️ \ud83d\udc94 \ud83d\udc8c \ud83d\udc95 \ud83d\udc9e \ud83d\udc93 \ud83d\udc97 \ud83d\udc96 \ud83d\udc98 \ud83d\udc9d \ud83d\udc9f \ud83d\udc9c \ud83d\udc9b \ud83d\udc9a \ud83d\udc99", Required = Required.Always)]
+        public string Indecent { get; set; }
+
+        [JsonProperty("⁰⁴⁵₀₁₂", Required = Required.Always)]
+        public string Indigo { get; set; }
+
+        [JsonProperty("#   IRC specific strings", Required = Required.Always)]
+        public string IrcSpecificStrings { get; set; }
+
+        [JsonProperty("#\tJapanese Emoticons", Required = Required.Always)]
+        public string JapaneseEmoticons { get; set; }
+
+        [JsonProperty("Kernel.exec(\"ls -al /\")", Required = Required.Always)]
+        public string KernelExecLsAl { get; set; }
+
+        [JsonProperty("Linda Callahan", Required = Required.Always)]
+        public string LindaCallahan { get; set; }
+
+        [JsonProperty("NIL", Required = Required.Always)]
+        public string Nil { get; set; }
+
+        [JsonProperty("NUL", Required = Required.Always)]
+        public string Nul { get; set; }
+
+        [JsonProperty("null", Required = Required.Always)]
+        public string Null { get; set; }
+
+        [JsonProperty("#\tNumeric Strings", Required = Required.Always)]
+        public string NumericStrings { get; set; }
+
+        [JsonProperty("# Often forbidden to appear in various text-based file formats (e.g. XML),", Required = Required.Always)]
+        public string OftenForbiddenToAppearInVariousTextBasedFileFormatsEGXml { get; set; }
+
+        [JsonProperty("\" onfocus=JaVaSCript:alert(123) autofocus", Required = Required.Always)]
+        public string OnfocusJaVaSCriptAlert123Autofocus { get; set; }
+
+        [JsonProperty("' OR 1=1 -- 1", Required = Required.Always)]
+        public string Or111 { get; set; }
+
+        [JsonProperty("\t\u000b\u000c \u0085             \u200b\u2028\u2029  　", Required = Required.Always)]
+        public string Purple { get; set; }
+
+        [JsonProperty("<script>alert(123)</script>", Required = Required.Always)]
+        public string PurpleScriptAlert123Script { get; set; }
+
+        [JsonProperty("#\tQuotation Marks", Required = Required.Always)]
+        public string QuotationMarks { get; set; }
+
+        [JsonProperty("#       Regional Indicator Symbols", Required = Required.Always)]
+        public string RegionalIndicatorSymbols { get; set; }
+
+        [JsonProperty("#       Regional Indicator Symbols can be displayed differently across", Required = Required.Always)]
+        public string RegionalIndicatorSymbolsCanBeDisplayedDifferentlyAcross { get; set; }
+
+        [JsonProperty("#\tReserved Strings", Required = Required.Always)]
+        public string ReservedStrings { get; set; }
+
+        [JsonProperty("\"><script>alert(123)</script>", Required = Required.Always)]
+        public string ScriptAlert123Script { get; set; }
+
+        [JsonProperty("><script>alert(123);</script x=", Required = Required.Always)]
+        public string ScriptAlert123ScriptX { get; set; }
+
+        [JsonProperty("<<SCRIPT>alert(\"XSS\");//<</SCRIPT>", Required = Required.Always)]
+        public string ScriptAlertXssScript { get; set; }
+
+        [JsonProperty("<SCRIPT SRC=//ha.ckers.org/.j>", Required = Required.Always)]
+        public string ScriptSrcHaCkersOrgJ { get; set; }
+
+        [JsonProperty("<script src=\"\\\\%(jscript)s\"></script>", Required = Required.Always)]
+        public string ScriptSrcJscriptSScript { get; set; }
+
+        [JsonProperty("\"`'><script>\\x09javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptX09JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("<script\\x0Atype=\"text/javascript\">javascript:alert(1);</script>", Required = Required.Always)]
+        public string ScriptX0AtypeTextJavascriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("<script\\x0Dtype=\"text/javascript\">javascript:alert(1);</script>", Required = Required.Always)]
+        public string ScriptX0DtypeTextJavascriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\x21javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptX21JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\x3Bjavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptX3BjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x85javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X85JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x87javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X87JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x8Ajavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X8AjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\xA8javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80XA8JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\xA9javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80XA9JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\xAFjavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80XAFjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE3\\x80\\x80javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE3X80X80JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("#\tScunthorpe Problem", Required = Required.Always)]
+        public string ScunthorpeProblem { get; set; }
+
+        [JsonProperty("(｡◕ ∀ ◕｡)", Required = Required.Always)]
+        public string Sticky { get; set; }
+
+        [JsonProperty("#   Strings that may occur on IRC clients that make security products freak out", Required = Required.Always)]
+        public string StringsThatMayOccurOnIrcClientsThatMakeSecurityProductsFreakOut { get; set; }
+
+        [JsonProperty("#\tStrings which are reserved characters in MSDOS/Windows", Required = Required.Always)]
+        public string StringsWhichAreReservedCharactersInMsdosWindows { get; set; }
+
+        [JsonProperty("#\tStrings which attempt to invoke a benign script injection; shows vulnerability to XSS", Required = Required.Always)]
+        public string StringsWhichAttemptToInvokeABenignScriptInjectionShowsVulnerabilityToXss { get; set; }
+
+        [JsonProperty("#\tStrings which contain text that should be rendered RTL if possible (e.g. Arabic, Hebrew)", Required = Required.Always)]
+        public string StringsWhichContainTextThatShouldBeRenderedRtlIfPossibleEGArabicHebrew { get; set; }
+
+        [JsonProperty("#\tStrings which contain two-byte characters: can cause rendering issues or character-length issues", Required = Required.Always)]
+        public string StringsWhichContainTwoByteCharactersCanCauseRenderingIssuesOrCharacterLengthIssues { get; set; }
+
+        [JsonProperty("#\tStrings which contain unicode numbers; if the code is localized, it should see the input as numeric", Required = Required.Always)]
+        public string StringsWhichContainUnicodeNumbersIfTheCodeIsLocalizedItShouldSeeTheInputAsNumeric { get; set; }
+
+        [JsonProperty("#\tStrings which may be used elsewhere in code", Required = Required.Always)]
+        public string StringsWhichMayBeUsedElsewhereInCode { get; set; }
+
+        [JsonProperty("#", Required = Required.Always)]
+        public string Tentacled { get; set; }
+
+        [JsonProperty("#\tTerminal escape codes", Required = Required.Always)]
+        public string TerminalEscapeCodes { get; set; }
+
+        [JsonProperty("0.00", Required = Required.Always)]
+        public string The000 { get; set; }
+
+        [JsonProperty("01000", Required = Required.Always)]
+        public string The01000 { get; set; }
+
+        [JsonProperty("08", Required = Required.Always)]
+        public string The08 { get; set; }
+
+        [JsonProperty("09", Required = Required.Always)]
+        public string The09 { get; set; }
+
+        [JsonProperty("0xffffffffffffffff", Required = Required.Always)]
+        public string The0Xffffffffffffffff { get; set; }
+
+        [JsonProperty("$1.00", Required = Required.Always)]
+        public string The100 { get; set; }
+
+        [JsonProperty("1,0/0,0", Required = Required.Always)]
+        public string The1000 { get; set; }
+
+        [JsonProperty("1 000.00", Required = Required.Always)]
+        public string The100000 { get; set; }
+
+        [JsonProperty("1 000 000,00", Required = Required.Always)]
+        public string The100000000 { get; set; }
+
+        [JsonProperty("1'; DROP TABLE users-- 1", Required = Required.Always)]
+        public string The1DropTableUsers1 { get; set; }
+
+        [JsonProperty("1#IND", Required = Required.Always)]
+        public string The1Ind { get; set; }
+
+        [JsonProperty("1#INF", Required = Required.Always)]
+        public string The1Inf { get; set; }
+
+        [JsonProperty("-2147483648/-1", Required = Required.Always)]
+        public string The21474836481 { get; set; }
+
+        [JsonProperty("2.2250738585072011e-308", Required = Required.Always)]
+        public string The22250738585072011E308 { get; set; }
+
+        [JsonProperty("# The next line may appear to be blank, mojibake, or dingbats in some viewers.", Required = Required.Always)]
+        public string TheNextLineMayAppearToBeBlankMojibakeOrDingbatsInSomeViewers { get; set; }
+
+        [JsonProperty("# The next line may appear to be blank or mojibake in some viewers.", Required = Required.Always)]
+        public string TheNextLineMayAppearToBeBlankOrMojibakeInSomeViewers { get; set; }
+
+        [JsonProperty("# The next line may be flagged for \"trailing whitespace\" in some viewers.", Required = Required.Always)]
+        public string TheNextLineMayBeFlaggedForTrailingWhitespaceInSomeViewers { get; set; }
+
+        [JsonProperty("１２３", Required = Required.Always)]
+        public string The１２３ { get; set; }
+
+        [JsonProperty("# This file unfortunately cannot express strings containing", Required = Required.Always)]
+        public string ThisFileUnfortunatelyCannotExpressStringsContaining { get; set; }
+
+        [JsonProperty("$(touch /tmp/blns.fail)", Required = Required.Always)]
+        public string TouchTmpBlnsFail { get; set; }
+
+        [JsonProperty("() { _; } >_[$($())] { touch /tmp/blns.shellshock2.fail; }", Required = Required.Always)]
+        public string TouchTmpBlnsShellshock2Fail { get; set; }
+
+        [JsonProperty("Tyson Gay", Required = Required.Always)]
+        public string TysonGay { get; set; }
+
+        [JsonProperty("#\tUnicode Symbols", Required = Required.Always)]
+        public string UnicodeSymbols { get; set; }
+
+        [JsonProperty("'`\"><\\x00script>javascript:alert(1)</script>", Required = Required.Always)]
+        public string X00ScriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("'`\"><\\x3Cscript>javascript:alert(1)</script>", Required = Required.Always)]
+        public string X3CscriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("åß∂ƒ©˙∆˚¬…æ", Required = Required.Always)]
+        public string ÅßƑÆ { get; set; }
+
+        [JsonProperty("Ω≈ç√∫˜µ≤≥÷", Required = Required.Always)]
+        public string ΩÇΜ { get; set; }
+
+        [JsonProperty("ヽ༼ຈل͜ຈ༽ﾉ ヽ༼ຈل͜ຈ༽ﾉ", Required = Required.Always)]
+        public string ຈل͜ຈﾉヽຈل͜ຈﾉ { get; set; }
+
+        [JsonProperty("Ṱ̺̺̕o͞ ̷i̲̬͇̪͙n̝̗͕v̟̜̘̦͟o̶̙̰̠kè͚̮̺̪̹̱̤ ̖t̝͕̳̣̻̪͞h̼͓̲̦̳̘̲e͇̣̰̦̬͎ ̢̼̻̱̘h͚͎͙̜̣̲ͅi̦̲̣̰̤v̻͍e̺̭̳̪̰-m̢iͅn̖̺̞̲̯̰d̵̼̟͙̩̼̘̳ ̞̥̱̳̭r̛̗̘e͙p͠r̼̞̻̭̗e̺̠̣͟s̘͇̳͍̝͉e͉̥̯̞̲͚̬͜ǹ̬͎͎̟̖͇̤t͍̬̤͓̼̭͘ͅi̪̱n͠g̴͉ ͏͉ͅc̬̟h͡a̫̻̯͘o̫̟̖͍̙̝͉s̗̦̲.̨̹͈̣", Required = Required.Always)]
+        public string ṰOINVOKèTHEHIVEMINDREPRESEǸTINGCHAOS { get; set; }
+
+        [JsonProperty("˙ɐnbᴉlɐ ɐuƃɐɯ ǝɹolop ʇǝ ǝɹoqɐl ʇn ʇunpᴉpᴉɔuᴉ ɹodɯǝʇ poɯsnᴉǝ op pǝs 'ʇᴉlǝ ƃuᴉɔsᴉdᴉpɐ ɹnʇǝʇɔǝsuoɔ 'ʇǝɯɐ ʇᴉs ɹolop ɯnsdᴉ ɯǝɹo˥", Required = Required.Always)]
+        public string ⱯnbᴉlɐⱯuƃɐɯƎɹolopꞱǝƎɹoqɐlꞱnꞱunpᴉpᴉɔuᴉɹodɯǝʇPoɯsnᴉǝOpPǝsꞱᴉlǝƂuᴉɔsᴉdᴉpɐɹnʇǝʇɔǝsuoɔꞱǝɯɐꞱᴉsɹolopƜnsdᴉƜǝɹo { get; set; }
+
+        [JsonProperty("社會科學院語學研究所", Required = Required.Always)]
+        public string 社會科學院語學研究所 { get; set; }
+
+        [JsonProperty("部落格", Required = Required.Always)]
+        public string 部落格 { get; set; }
+
+        [JsonProperty("사회과학원 어학연구소", Required = Required.Always)]
+        public string 사회과학원어학연구소 { get; set; }
+
+        [JsonProperty("찦차를 타고 온 펲시맨과 쑛다리 똠방각하", Required = Required.Always)]
+        public string 찦차를타고온펲시맨과쑛다리똠방각하 { get; set; }
+
+        [JsonProperty("ﷺ", Required = Required.Always)]
+        public string ﷺ { get; set; }
+
+        [JsonProperty("__ﾛ(,_,*)", Required = Required.Always)]
+        public string ﾛ_ { get; set; }
+    }
+
+    public partial record C
+    {
+        [JsonProperty("A:", Required = Required.Always)]
+        public string A { get; set; }
+
+        [JsonProperty("<a href=\"\\x00javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX00JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x03javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX03JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x06javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX06JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x07javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX07JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x0Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX0BjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x12javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX12JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x14javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX14JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x15javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX15JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x18javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX18JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x1Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX1BjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x1Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX1CjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\x20javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefX20JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80X80JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\x85javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80X85JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\x88javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80X88JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\x89javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80X89JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x80\\x8Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X80X8AjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE2\\x81\\x9Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE2X81X9FjavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("<a href=\"\\xE3\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>", Required = Required.Always)]
+        public string AHrefXE3X80X80JavascriptJavascriptAlert1IdFuzzelement1TestA { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:expression\\x00(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXExpressionX00JavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\x00expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXX00ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\x0Cexpression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXX0CexpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x81expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X81ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x86expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X86ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE2\\x80\\x88expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE2X80X88ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xE3\\x80\\x80expression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXE3X80X80ExpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("ABC<div style=\"x:\\xEF\\xBB\\xBFexpression(javascript:alert(1)\">DEF", Required = Required.Always)]
+        public string AbcDivStyleXXEfXBbXBFexpressionJavascriptAlert1Def { get; set; }
+
+        [JsonProperty("\\\\", Required = Required.Always)]
+        public string Ambitious { get; set; }
+
+        [JsonProperty("# and U+007F (DEL)", Required = Required.Always)]
+        public string AndU007FDel { get; set; }
+
+        [JsonProperty("# ASCII punctuation.  All of these characters may need to be escaped in some", Required = Required.Always)]
+        public string AsciiPunctuationAllOfTheseCharactersMayNeedToBeEscapedInSome { get; set; }
+
+        [JsonProperty("<BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert(\"XSS\")>", Required = Required.Always)]
+        public string BodyOnloadAlertXss { get; set; }
+
+        [JsonProperty("・(￣∀￣)・:*:", Required = Required.Always)]
+        public string Braggadocious { get; set; }
+
+        [JsonProperty("-0.0", Required = Required.Always)]
+        public string C00 { get; set; }
+
+        [JsonProperty("0.0/0", Required = Required.Always)]
+        public string C000 { get; set; }
+
+        [JsonProperty("--1", Required = Required.Always)]
+        public string C1 { get; set; }
+
+        [JsonProperty("-1.00", Required = Required.Always)]
+        public string C100 { get; set; }
+
+        [JsonProperty("1,000.00", Required = Required.Always)]
+        public string C100000 { get; set; }
+
+        [JsonProperty("1,000,000.00", Required = Required.Always)]
+        public string C100000000 { get; set; }
+
+        [JsonProperty("1E+02", Required = Required.Always)]
+        public string C1E02 { get; set; }
+
+        [JsonProperty("><script>alert(123)</script>", Required = Required.Always)]
+        public string CScriptAlert123Script { get; set; }
+
+        [JsonProperty("CLOCK$", Required = Required.Always)]
+        public string Clock { get; set; }
+
+        [JsonProperty("COM2", Required = Required.Always)]
+        public string Com2 { get; set; }
+
+        [JsonProperty("COM4", Required = Required.Always)]
+        public string Com4 { get; set; }
+
+        [JsonProperty("Craig Cockburn, Software Specialist", Required = Required.Always)]
+        public string CraigCockburnSoftwareSpecialist { get; set; }
+
+        [JsonProperty("_", Required = Required.Always)]
+        public string Cunning { get; set; }
+
+        [JsonProperty("DCC SEND STARTKEYLOGGER 0 0 0", Required = Required.Always)]
+        public string DccSendStartkeylogger000 { get; set; }
+
+        [JsonProperty("dontMakeAMap", Required = Required.Always)]
+        public bool DontMakeAMap { get; set; }
+
+        [JsonProperty("#\tEmoji", Required = Required.Always)]
+        public string Emoji { get; set; }
+
+        [JsonProperty("\"\"", Required = Required.Always)]
+        public string Empty { get; set; }
+
+        [JsonProperty("evaluate", Required = Required.Always)]
+        public string Evaluate { get; set; }
+
+        [JsonProperty("\"''''\"'\"", Required = Required.Always)]
+        public string Fluffy { get; set; }
+
+        [JsonProperty("0/0", Required = Required.Always)]
+        public string Fluffy00 { get; set; }
+
+        [JsonProperty("<foo val=“bar” />", Required = Required.Always)]
+        public string FooValBar { get; set; }
+
+        [JsonProperty("⅛⅜⅝⅞", Required = Required.Always)]
+        public string Frisky { get; set; }
+
+        [JsonProperty("hasOwnProperty", Required = Required.Always)]
+        public string HasOwnProperty { get; set; }
+
+        [JsonProperty(".", Required = Required.Always)]
+        public string Hilarious { get; set; }
+
+        [JsonProperty("Horniman Museum", Required = Required.Always)]
+        public string HornimanMuseum { get; set; }
+
+        [JsonProperty("http://www.cum.qc.ca/", Required = Required.Always)]
+        public Uri HttpWwwCumQcCa { get; set; }
+
+        [JsonProperty("<i onwheel=alert(1)> Scroll over me </i>", Required = Required.Always)]
+        public string IOnwheelAlert1ScrollOverMeI { get; set; }
+
+        [JsonProperty("<img[a][b][c]src[d]=x[e]onerror=[f]\"alert(1)\">", Required = Required.Always)]
+        public string ImgABCSrcDXEOnerrorFAlert1 { get; set; }
+
+        [JsonProperty("<IMG onmouseover=\"alert('xxs')\">", Required = Required.Always)]
+        public string ImgOnmouseoverAlertXxs { get; set; }
+
+        [JsonProperty("<IMG \"\"\"><SCRIPT>alert(\"XSS\")</SCRIPT>\">", Required = Required.Always)]
+        public string ImgScriptAlertXssScript { get; set; }
+
+        [JsonProperty("<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>", Required = Required.Always)]
+        public string ImgSrcJavascriptAlertStringFromCharCode888383 { get; set; }
+
+        [JsonProperty("<IMG SRC=\"javascript:alert('XSS')\"", Required = Required.Always)]
+        public string ImgSrcJavascriptAlertXss { get; set; }
+
+        [JsonProperty("<img src onerror /\" '\"= alt=javascript:alert(1)//\">", Required = Required.Always)]
+        public string ImgSrcOnerrorAltJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src\\x10=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcX10XOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src\\x12=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcX12XOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src\\x13=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcX13XOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src\\x32=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcX32XOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src\\x47=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcX47XOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src=x onerror=alert(123) />", Required = Required.Always)]
+        public string ImgSrcXOnerrorAlert123 { get; set; }
+
+        [JsonProperty("<img src=x onerror=\\x10\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcXOnerrorX10JavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src=x onerror=\\x32\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgSrcXOnerrorX32JavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img src=\"x` `<script>javascript:alert(1)</script>\"` `>", Required = Required.Always)]
+        public string ImgSrcXScriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("`\"'><img src=xxx:x \\x09onerror=javascript:alert(1)>", Required = Required.Always)]
+        public string ImgSrcXxxXX09OnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("`\"'><img src=xxx:x \\x20onerror=javascript:alert(1)>", Required = Required.Always)]
+        public string ImgSrcXxxXX20OnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("`\"'><img src=xxx:x \\x22onerror=javascript:alert(1)>", Required = Required.Always)]
+        public string ImgSrcXxxXX22OnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("`\"'><img src=xxx:x \\x27onerror=javascript:alert(1)>", Required = Required.Always)]
+        public string ImgSrcXxxXX27OnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img\\x11src=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgX11SrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img \\x34src=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgX34SrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("<img\\x47src=x onerror=\"javascript:alert(1)\">", Required = Required.Always)]
+        public string ImgX47SrcXOnerrorJavascriptAlert1 { get; set; }
+
+        [JsonProperty("--", Required = Required.Always)]
+        public string Indecent { get; set; }
+
+        [JsonProperty("-", Required = Required.Always)]
+        public string Indigo { get; set; }
+
+        [JsonProperty("Infinity", Required = Required.Always)]
+        public string Infinity { get; set; }
+
+        [JsonProperty("JavaSCript:alert(123)", Required = Required.Always)]
+        public string JavaSCriptAlert123 { get; set; }
+
+        [JsonProperty("LPT1", Required = Required.Always)]
+        public string Lpt1 { get; set; }
+
+        [JsonProperty("&lt;script&gt;alert(&#39;123&#39;);&lt;/script&gt;", Required = Required.Always)]
+        public string LtScriptGtAlert3912339LtScriptGt { get; set; }
+
+        [JsonProperty("⁰⁴⁵", Required = Required.Always)]
+        public string Magenta { get; set; }
+
+        [JsonProperty("magna cum laude", Required = Required.Always)]
+        public string MagnaCumLaude { get; set; }
+
+        [JsonProperty("medieval erection of parapets", Required = Required.Always)]
+        public string MedievalErectionOfParapets { get; set; }
+
+        [JsonProperty("✋\ud83c\udfff \ud83d\udcaa\ud83c\udfff \ud83d\udc50\ud83c\udfff \ud83d\ude4c\ud83c\udfff \ud83d\udc4f\ud83c\udfff \ud83d\ude4f\ud83c\udfff", Required = Required.Always)]
+        public string Mischievous { get; set; }
+
+        [JsonProperty("mocha", Required = Required.Always)]
+        public string Mocha { get; set; }
+
+        [JsonProperty("NaN", Required = Required.Always)]
+        public string NaN { get; set; }
+
+        [JsonProperty("# Non-whitespace C0 controls: U+0001 through U+0008, U+000E through U+001F,", Required = Required.Always)]
+        public string NonWhitespaceC0ControlsU0001ThroughU0008U000EThroughU001F { get; set; }
+
+        [JsonProperty("NULL", Required = Required.Always)]
+        public string Null { get; set; }
+
+        [JsonProperty("' onfocus=JaVaSCript:alert(123) autofocus", Required = Required.Always)]
+        public string OnfocusJaVaSCriptAlert123Autofocus { get; set; }
+
+        [JsonProperty("# or reused for internal delimiters on the theory that they should never", Required = Required.Always)]
+        public string OrReusedForInternalDelimitersOnTheTheoryThatTheyShouldNever { get; set; }
+
+        [JsonProperty("<plaintext>", Required = Required.Always)]
+        public string Plaintext { get; set; }
+
+        [JsonProperty("Powerلُلُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ冗", Required = Required.Always)]
+        public string PowerلُلُصّبُلُلصّبُررًॣॣH冗 { get; set; }
+
+        [JsonProperty("\"'\"'\"''''\"", Required = Required.Always)]
+        public string Purple { get; set; }
+
+        [JsonProperty("0,,0", Required = Required.Always)]
+        public string Purple00 { get; set; }
+
+        [JsonProperty("1.000,00", Required = Required.Always)]
+        public string Purple100000 { get; set; }
+
+        [JsonProperty("1.000.000,00", Required = Required.Always)]
+        public string Purple100000000 { get; set; }
+
+        [JsonProperty("＜script＞alert(123)＜/script＞", Required = Required.Always)]
+        public string PurpleScriptAlert123Script { get; set; }
+
+        [JsonProperty("#\tRight-To-Left Strings", Required = Required.Always)]
+        public string RightToLeftStrings { get; set; }
+
+        [JsonProperty("Roses are \u001b[0;31mred\u001b[0m, violets are \u001b[0;34mblue. Hope you enjoy terminal hue", Required = Required.Always)]
+        public string RosesAre031Mred0MVioletsAre034MblueHopeYouEnjoyTerminalHue { get; set; }
+
+        [JsonProperty("%*.*s", Required = Required.Always)]
+        public string S { get; set; }
+
+        [JsonProperty("'><script>alert(123)</script>", Required = Required.Always)]
+        public string ScriptAlert123Script { get; set; }
+
+        [JsonProperty("'><script>alert(123);</script x='", Required = Required.Always)]
+        public string ScriptAlert123ScriptX { get; set; }
+
+        [JsonProperty("\"`'><script>-javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("< / script >< script >alert(123)< / script >", Required = Required.Always)]
+        public string ScriptScriptAlert123Script { get; set; }
+
+        [JsonProperty("<script src=\"/\\%(jscript)s\"></script>", Required = Required.Always)]
+        public string ScriptSrcJscriptSScript { get; set; }
+
+        [JsonProperty("\"`'><script>\\x0Ajavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptX0AjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\x0Bjavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptX0BjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("<script\\x0Ctype=\"text/javascript\">javascript:alert(1);</script>", Required = Required.Always)]
+        public string ScriptX0CtypeTextJavascriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\x20javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptX20JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\x2Bjavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptX2BjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("<script\\x2Ftype=\"text/javascript\">javascript:alert(1);</script>", Required = Required.Always)]
+        public string ScriptX2FtypeTextJavascriptJavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\x7Ejavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptX7EjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x80javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X80JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x82javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X82JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x83javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X83JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x84javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X84JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x88javascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X88JavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xE2\\x80\\x8Bjavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXE2X80X8BjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xEF\\xBF\\xAEjavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXEfXBfXAEjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("\"`'><script>\\xEF\\xBF\\xBEjavascript:alert(1)</script>", Required = Required.Always)]
+        public string ScriptXEfXBfXBEjavascriptAlert1Script { get; set; }
+
+        [JsonProperty("Scunthorpe General Hospital", Required = Required.Always)]
+        public string ScunthorpeGeneralHospital { get; set; }
+
+        [JsonProperty("#\tServer Code Injection", Required = Required.Always)]
+        public string ServerCodeInjection { get; set; }
+
+        [JsonProperty("shitake mushrooms", Required = Required.Always)]
+        public string ShitakeMushrooms { get; set; }
+
+        [JsonProperty("#\tSpecial Characters", Required = Required.Always)]
+        public string SpecialCharacters { get; set; }
+
+        [JsonProperty("src=JaVaSCript:prompt(132)", Required = Required.Always)]
+        public string SrcJaVaSCriptPrompt132 { get; set; }
+
+        [JsonProperty("''", Required = Required.Always)]
+        public string Sticky { get; set; }
+
+        [JsonProperty("#\tStrings which can be interpreted as numeric", Required = Required.Always)]
+        public string StringsWhichCanBeInterpretedAsNumeric { get; set; }
+
+        [JsonProperty("#\tStrings which can cause a SQL injection if inputs are not sanitized", Required = Required.Always)]
+        public string StringsWhichCanCauseASqlInjectionIfInputsAreNotSanitized { get; set; }
+
+        [JsonProperty("#\tStrings which can cause user to pull in files that should not be a part of a web server", Required = Required.Always)]
+        public string StringsWhichCanCauseUserToPullInFilesThatShouldNotBeAPartOfAWebServer { get; set; }
+
+        [JsonProperty("#\tStrings which can cause user to run code on server as a privileged user (c.f. https://news.ycombinator.com/item?id=7665153)", Required = Required.Always)]
+        public string StringsWhichCanCauseUserToRunCodeOnServerAsAPrivilegedUserCFHttpsNewsYcombinatorComItemId7665153 { get; set; }
+
+        [JsonProperty("#\tStrings which contain \"corrupted\" text. The corruption will not appear in non-HTML text, however. (via http://www.eeemo.net)", Required = Required.Always)]
+        public string StringsWhichContainCorruptedTextTheCorruptionWillNotAppearInNonHtmlTextHoweverViaHttpWwwEeemoNet { get; set; }
+
+        [JsonProperty("#\tStrings which contain unicode with an \"upsidedown\" effect (via http://www.upsidedowntext.com)", Required = Required.Always)]
+        public string StringsWhichContainUnicodeWithAnUpsidedownEffectViaHttpWwwUpsidedowntextCom { get; set; }
+
+        [JsonProperty("#\tStrings which contain unicode with unusual properties (e.g. Right-to-left override) (c.f. http://www.unicode.org/charts/PDF/U2000.pdf)", Required = Required.Always)]
+        public string StringsWhichContainUnicodeWithUnusualPropertiesEGRightToLeftOverrideCFHttpWwwUnicodeOrgChartsPdfU2000Pdf { get; set; }
+
+        [JsonProperty("#\tStrings which punish the fools who use cat/type on this file", Required = Required.Always)]
+        public string StringsWhichPunishTheFoolsWhoUseCatTypeOnThisFile { get; set; }
+
+        [JsonProperty("<svg><script>123<1>alert(123)</script>", Required = Required.Always)]
+        public string SvgScript1231Alert123Script { get; set; }
+
+        [JsonProperty("System(\"ls -al /\")", Required = Required.Always)]
+        public string SystemLsAl { get; set; }
+
+        [JsonProperty("@{[system \"touch /tmp/blns.fail\"]}", Required = Required.Always)]
+        public string SystemTouchTmpBlnsFail { get; set; }
+
+        [JsonProperty("%", Required = Required.Always)]
+        public string Tentacled { get; set; }
+
+        [JsonProperty("\u2029test\u2029", Required = Required.Always)]
+        public string Test { get; set; }
+
+        [JsonProperty("test\u2060test\u202b", Required = Required.Always)]
+        public string TestTest { get; set; }
+
+        [JsonProperty("+0.0", Required = Required.Always)]
+        public string The00 { get; set; }
+
+        [JsonProperty("0.0.0", Required = Required.Always)]
+        public string The000 { get; set; }
+
+        [JsonProperty("() { 0; }; touch /tmp/blns.shellshock1.fail;", Required = Required.Always)]
+        public string The0TouchTmpBlnsShellshock1Fail { get; set; }
+
+        [JsonProperty("0xabad1dea", Required = Required.Always)]
+        public string The0Xabad1Dea { get; set; }
+
+        [JsonProperty("0xffffffff", Required = Required.Always)]
+        public string The0Xffffffff { get; set; }
+
+        [JsonProperty("\ud83c\udff30\ud83c\udf08️", Required = Required.Always)]
+        public string The0️ { get; set; }
+
+        [JsonProperty("0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ \ud83d\udd1f", Required = Required.Always)]
+        public string The0️1️2️3️4️5️6️7️8️9️ { get; set; }
+
+        [JsonProperty("\ud835\udc13\ud835\udc21\ud835\udc1e \ud835\udc2a\ud835\udc2e\ud835\udc22\ud835\udc1c\ud835\udc24 \ud835\udc1b\ud835\udc2b\ud835\udc28\ud835\udc30\ud835\udc27 \ud835\udc1f\ud835\udc28\ud835\udc31 \ud835\udc23\ud835\udc2e\ud835\udc26\ud835\udc29\ud835\udc2c \ud835\udc28\ud835\udc2f\ud835\udc1e\ud835\udc2b \ud835\udc2d\ud835\udc21\ud835\udc1e \ud835\udc25\ud835\udc1a\ud835\udc33\ud835\udc32 \ud835\udc1d\ud835\udc28\ud835\udc20", Required = Required.Always)]
+        public string The1 { get; set; }
+
+        [JsonProperty("-$1.00", Required = Required.Always)]
+        public string The100 { get; set; }
+
+        [JsonProperty("1 000,00", Required = Required.Always)]
+        public string The100000 { get; set; }
+
+        [JsonProperty("1'000'000,00", Required = Required.Always)]
+        public string The100000000 { get; set; }
+
+        [JsonProperty("-1/2", Required = Required.Always)]
+        public string The12 { get; set; }
+
+        [JsonProperty("-1E+02", Required = Required.Always)]
+        public string The1E02 { get; set; }
+
+        [JsonProperty("-1E2", Required = Required.Always)]
+        public string The1E2 { get; set; }
+
+        [JsonProperty("-1#IND", Required = Required.Always)]
+        public string The1Ind { get; set; }
+
+        [JsonProperty("\ud835\ude83\ud835\ude91\ud835\ude8e \ud835\ude9a\ud835\ude9e\ud835\ude92\ud835\ude8c\ud835\ude94 \ud835\ude8b\ud835\ude9b\ud835\ude98\ud835\udea0\ud835\ude97 \ud835\ude8f\ud835\ude98\ud835\udea1 \ud835\ude93\ud835\ude9e\ud835\ude96\ud835\ude99\ud835\ude9c \ud835\ude98\ud835\ude9f\ud835\ude8e\ud835\ude9b \ud835\ude9d\ud835\ude91\ud835\ude8e \ud835\ude95\ud835\ude8a\ud835\udea3\ud835\udea2 \ud835\ude8d\ud835\ude98\ud835\ude90", Required = Required.Always)]
+        public string The2 { get; set; }
+
+        [JsonProperty("\ud83d\udc35 \ud83d\ude48 \ud83d\ude49 \ud83d\ude4a", Required = Required.Always)]
+        public string The3 { get; set; }
+
+        [JsonProperty("\ud83d\udc7e \ud83d\ude47 \ud83d\udc81 \ud83d\ude45 \ud83d\ude46 \ud83d\ude4b \ud83d\ude4e \ud83d\ude4d", Required = Required.Always)]
+        public string The4 { get; set; }
+
+        [JsonProperty("-9223372036854775808/-1", Required = Required.Always)]
+        public string The92233720368547758081 { get; set; }
+
+        [JsonProperty("١٢٣", Required = Required.Always)]
+        public string The١٢٣ { get; set; }
+
+        [JsonProperty("<title onpropertychange=javascript:alert(1)></title><title title=>", Required = Required.Always)]
+        public string TitleOnpropertychangeJavascriptAlert1TitleTitleTitle { get; set; }
+
+        [JsonProperty("# treated as whitespace in some contexts.", Required = Required.Always)]
+        public string TreatedAsWhitespaceInSomeContexts { get; set; }
+
+        [JsonProperty("#\tTrick Unicode", Required = Required.Always)]
+        public string TrickUnicode { get; set; }
+
+        [JsonProperty("true", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyParseStringConverter))]
+        public bool True { get; set; }
+
+        [JsonProperty("undefined", Required = Required.Always)]
+        public string Undefined { get; set; }
+
+        [JsonProperty("# Unicode additional control characters: all of the characters with", Required = Required.Always)]
+        public string UnicodeAdditionalControlCharactersAllOfTheCharactersWith { get; set; }
+
+        [JsonProperty("#\tUnicode Subscript/Superscript/Accents", Required = Required.Always)]
+        public string UnicodeSubscriptSuperscriptAccents { get; set; }
+
+        [JsonProperty("#\tUnicode Upsidedown", Required = Required.Always)]
+        public string UnicodeUpsidedown { get; set; }
+
+        [JsonProperty("$USER", Required = Required.Always)]
+        public string User { get; set; }
+
+        [JsonProperty("--version", Required = Required.Always)]
+        public string Version { get; set; }
+
+        [JsonProperty("# version 8.0.0), plus U+0009 (HT), U+000B (VT), U+000C (FF), U+0085 (NEL),", Required = Required.Always)]
+        public string Version800PlusU0009HtU000BVtU000CFfU0085Nel { get; set; }
+
+        [JsonProperty("# Whitespace: all of the characters with category Zs, Zl, or Zp (in Unicode", Required = Required.Always)]
+        public string WhitespaceAllOfTheCharactersWithCategoryZsZlOrZpInUnicode { get; set; }
+
+        [JsonProperty("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><!DOCTYPE foo [ <!ELEMENT foo ANY ><!ENTITY xxe SYSTEM \"file:///etc/passwd\" >]><foo>&xxe;</foo>", Required = Required.Always)]
+        public string XmlVersion10EncodingIso88591DoctypeFooElementFooAnyEntityXxeSystemFileEtcPasswdFooXxeFoo { get; set; }
+
+        [JsonProperty("#      XXE Injection (XML)", Required = Required.Always)]
+        public string XxeInjectionXml { get; set; }
+
+        [JsonProperty("#\tZalgo Text", Required = Required.Always)]
+        public string ZalgoText { get; set; }
+
+        [JsonProperty("ZZ:", Required = Required.Always)]
+        public string Zz { get; set; }
+
+        [JsonProperty("\ud841\udf0e\ud841\udf31\ud841\udf79\ud843\udc53\ud843\udc78\ud843\udc96\ud843\udccf", Required = Required.Always)]
+        public string _5 { get; set; }
+
+        [JsonProperty("ÅÍÎÏ˝ÓÔ\uf8ffÒÚÆ☃", Required = Required.Always)]
+        public string ÅíîïÓôÒúæ { get; set; }
+
+        [JsonProperty(",。・:*:・゜’( ☻ ω ☻ )。・:*:・゜’", Required = Required.Always)]
+        public string Ω { get; set; }
+
+        [JsonProperty("ЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя", Required = Required.Always)]
+        public string ЁђѓєѕіїјљњћќѝўџабвгдежзийклмнопрстуфхцчшщъыьэюЯабвгдежзийклмнопрстуфхцчшщъыьэюя { get; set; }
+
+        [JsonProperty("בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ", Required = Required.Always)]
+        public string בְּרֵאשִׁיתבָּרָאאֱלֹהִיםאֵתהַשָּׁמַיִםוְאֵתהָאָרֶץ { get; set; }
+
+        [JsonProperty("مُنَاقَشَةُ سُبُلِ اِسْتِخْدَامِ اللُّغَةِ فِي النُّظُمِ الْقَائِمَةِ وَفِيم يَخُصَّ التَّطْبِيقَاتُ الْحاسُوبِيَّةُ، ", Required = Required.Always)]
+        public string مُنَاقَشَةُسُبُلِاِسْتِخْدَامِاللُّغَةِفِيالنُّظُمِالْقَائِمَةِوَفِيميَخُصَّالتَّطْبِيقَاتُالْحاسُوبِيَّةُ { get; set; }
+
+        [JsonProperty("̗̺͖̹̯͓Ṯ̤͍̥͇͈h̲́e͏͓̼̗̙̼̣͔ ͇̜̱̠͓͍ͅN͕͠e̗̱z̘̝̜̺͙p̤̺̹͍̯͚e̠̻̠͜r̨̤͍̺̖͔̖̖d̠̟̭̬̝͟i̦͖̩͓͔̤a̠̗̬͉̙n͚͜ ̻̞̰͚ͅh̵͉i̳̞v̢͇ḙ͎͟-҉̭̩̼͔m̤̭̫i͕͇̝̦n̗͙ḍ̟ ̯̲͕͞ǫ̟̯̰̲͙̻̝f ̪̰̰̗̖̭̘͘c̦͍̲̞͍̩̙ḥ͚a̮͎̟̙͜ơ̩̹͎s̤.̝̝ ҉Z̡̖̜͖̰̣͉̜a͖̰͙̬͡l̲̫̳͍̩g̡̟̼̱͚̞̬ͅo̗͜.̟", Required = Required.Always)]
+        public string ṮHENEZPERDIANHIVḘMINḌǪFCḤAƠSZALGO { get; set; }
+
+        [JsonProperty("┬─┬ノ( º _ ºノ)", Required = Required.Always)]
+        public string ノº_ºノ { get; set; }
+
+        [JsonProperty("울란바토르", Required = Required.Always)]
+        public string 울란바토르 { get; set; }
+
+        [JsonProperty("Ｔｈｅ ｑｕｉｃｋ ｂｒｏｗｎ ｆｏｘ ｊｕｍｐｓ ｏｖｅｒ ｔｈｅ ｌａｚｙ ｄｏｇ", Required = Required.Always)]
+        public string ＴｈｅＱｕｉｃｋＢｒｏｗｎＦｏｘＪｕｍｐｓＯｖｅｒＴｈｅＬａｚｙＤｏｇ { get; set; }
+
+        [JsonProperty("(ﾉಥ益ಥ）ﾉ\ufeff ┻━┻", Required = Required.Always)]
+        public string ﾉಥ益ಥﾉ { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly PurpleParseStringConverter Singleton = new PurpleParseStringConverter();
+    }
+
+    internal class FluffyParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly FluffyParseStringConverter Singleton = new FluffyParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/bug2037.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/bug2037.json/default/QuickType.cs
new file mode 100644
index 0000000..f08745a
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/bug2037.json/default/QuickType.cs
@@ -0,0 +1,77 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("mission_specs", Required = Required.Always)]
+        public Dictionary<string, MissionSpec> MissionSpecs { get; set; }
+    }
+
+    public partial record MissionSpec
+    {
+        [JsonProperty("objectives", Required = Required.Always)]
+        public Dictionary<string, Objective> Objectives { get; set; }
+    }
+
+    public partial record Objective
+    {
+        [JsonProperty("rewards", Required = Required.Always)]
+        public Dictionary<string, Reward> Rewards { get; set; }
+    }
+
+    public partial record Reward
+    {
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/bug2521.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/bug2521.json/default/QuickType.cs
new file mode 100644
index 0000000..064368b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/bug2521.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("options", Required = Required.Always)]
+        public Option[] Options { get; set; }
+    }
+
+    public partial record Option
+    {
+        [JsonProperty("foo", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Foo { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/bug2590.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/bug2590.json/default/QuickType.cs
new file mode 100644
index 0000000..4b6b1f6
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/bug2590.json/default/QuickType.cs
@@ -0,0 +1,73 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("invoices", Required = Required.Always)]
+        public Invoice[] Invoices { get; set; }
+    }
+
+    public partial record Invoice
+    {
+        [JsonProperty("createdAt", Required = Required.AllowNull)]
+        public DateTimeOffset? CreatedAt { get; set; }
+
+        [JsonProperty("dueDate", Required = Required.AllowNull)]
+        public DateTimeOffset? DueDate { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/bug2663.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/bug2663.json/default/QuickType.cs
new file mode 100644
index 0000000..989f484
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/bug2663.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("birthday", Required = Required.Always)]
+        public DateTimeOffset Birthday { get; set; }
+
+        [JsonProperty("lastSeen", Required = Required.Always)]
+        public DateTimeOffset LastSeen { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/bug2793.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/bug2793.json/default/QuickType.cs
new file mode 100644
index 0000000..b669f62
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/bug2793.json/default/QuickType.cs
@@ -0,0 +1,77 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("Hints", Required = Required.Always)]
+        public Hints Hints { get; set; }
+
+        [JsonProperty("Labels", Required = Required.Always)]
+        public Labels Labels { get; set; }
+    }
+
+    public partial record Hints
+    {
+    }
+
+    public partial record Labels
+    {
+        [JsonProperty("AccountNumber", Required = Required.Always)]
+        public string AccountNumber { get; set; }
+
+        [JsonProperty("Title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/bug427.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/bug427.json/default/QuickType.cs
new file mode 100644
index 0000000..dc50892
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/bug427.json/default/QuickType.cs
@@ -0,0 +1,1857 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("children", Required = Required.Always)]
+        public TopLevelChild[] Children { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("groups", Required = Required.Always)]
+        public Group[] Groups { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record TopLevelChild
+    {
+        [JsonProperty("children", Required = Required.Always)]
+        public PurpleChild[] Children { get; set; }
+
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public IndecentComment? Comment { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public PurpleFlags Flags { get; set; }
+
+        [JsonProperty("groups", Required = Required.Always)]
+        public Group[] Groups { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public TentacledKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("originalName", Required = Required.Always)]
+        public string OriginalName { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+    }
+
+    public partial record PurpleChild
+    {
+        [JsonProperty("children", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FluffyChild[]? Children { get; set; }
+
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public StickyComment? Comment { get; set; }
+
+        [JsonProperty("defaultValue", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DefaultValue { get; set; }
+
+        [JsonProperty("extendedBy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy[]? ExtendedBy { get; set; }
+
+        [JsonProperty("extendedTypes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy[]? ExtendedTypes { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public IndecentFlags Flags { get; set; }
+
+        [JsonProperty("groups", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Group[]? Groups { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("implementedBy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy[]? ImplementedBy { get; set; }
+
+        [JsonProperty("implementedTypes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy[]? ImplementedTypes { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public FluffyKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("signatures", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public StickySignature[]? Signatures { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MagentaType? Type { get; set; }
+
+        [JsonProperty("typeParameter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TypeParameter[]? TypeParameter { get; set; }
+    }
+
+    public partial record FluffyChild
+    {
+        [JsonProperty("children", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TentacledChild[]? Children { get; set; }
+
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public StickyComment? Comment { get; set; }
+
+        [JsonProperty("defaultValue", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DefaultValue { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public StickyFlags Flags { get; set; }
+
+        [JsonProperty("getSignature", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature? GetSignature { get; set; }
+
+        [JsonProperty("groups", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Group[]? Groups { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("implementationOf", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy? ImplementationOf { get; set; }
+
+        [JsonProperty("inheritedFrom", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy? InheritedFrom { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public PurpleKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("overwrites", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy? Overwrites { get; set; }
+
+        [JsonProperty("setSignature", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature? SetSignature { get; set; }
+
+        [JsonProperty("signatures", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FluffySignature[]? Signatures { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public IndigoType? Type { get; set; }
+    }
+
+    public partial record TentacledChild
+    {
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PurpleComment? Comment { get; set; }
+
+        [JsonProperty("defaultValue", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DefaultValue { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public PurpleFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public PurpleKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("signatures", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PurpleSignature[]? Signatures { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TypeElement? Type { get; set; }
+    }
+
+    public partial record PurpleComment
+    {
+        [JsonProperty("shortText", Required = Required.Always)]
+        public string ShortText { get; set; }
+    }
+
+    public partial record PurpleFlags
+    {
+        [JsonProperty("isExported", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsExported { get; set; }
+    }
+
+    public partial record PurpleSignature
+    {
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PurpleComment? Comment { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public SignatureKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("parameters", Required = Required.Always)]
+        public GetSignature[] Parameters { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TentacledType Type { get; set; }
+    }
+
+    public partial record GetSignatureFlags
+    {
+    }
+
+    public partial record GetSignatureType
+    {
+        [JsonProperty("declaration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature? Declaration { get; set; }
+
+        [JsonProperty("elementType", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType? ElementType { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Name? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record IndexSignatureElement
+    {
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public string KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("parameters", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature[]? Parameters { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public PurpleType Type { get; set; }
+    }
+
+    public partial record PurpleType
+    {
+        [JsonProperty("declaration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature? Declaration { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Name? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record GetSignatureChild
+    {
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FluffyComment? Comment { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public FluffyFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public PurpleKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public PurpleType Type { get; set; }
+    }
+
+    public partial record GetSignature
+    {
+        [JsonProperty("children", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignatureChild[]? Children { get; set; }
+
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignatureComment? Comment { get; set; }
+
+        [JsonProperty("defaultValue", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DefaultValue { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("groups", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Group[]? Groups { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public string KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("parameters", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignatureParameter[]? Parameters { get; set; }
+
+        [JsonProperty("signatures", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public IndexSignatureElement[]? Signatures { get; set; }
+
+        [JsonProperty("sources", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Source[]? Sources { get; set; }
+
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignatureType? Type { get; set; }
+
+        [JsonProperty("typeParameter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature[]? TypeParameter { get; set; }
+    }
+
+    public partial record ElementType
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public Name Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record FluffyComment
+    {
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record FluffyFlags
+    {
+        [JsonProperty("isOptional", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsOptional { get; set; }
+    }
+
+    public partial record Source
+    {
+        [JsonProperty("character", Required = Required.Always)]
+        public long Character { get; set; }
+
+        [JsonProperty("fileName", Required = Required.Always)]
+        public FileName FileName { get; set; }
+
+        [JsonProperty("line", Required = Required.Always)]
+        public long Line { get; set; }
+    }
+
+    public partial record GetSignatureComment
+    {
+        [JsonProperty("returns", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Returns { get; set; }
+
+        [JsonProperty("shortText", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? ShortText { get; set; }
+
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+    }
+
+    public partial record Group
+    {
+        [JsonProperty("children", Required = Required.Always)]
+        public long[] Children { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record GetSignatureParameter
+    {
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TentacledComment? Comment { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public TentacledFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public ParameterKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public FluffyType Type { get; set; }
+    }
+
+    public partial record TentacledComment
+    {
+        [JsonProperty("shortText", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? ShortText { get; set; }
+
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+    }
+
+    public partial record TentacledFlags
+    {
+        [JsonProperty("isOptional", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsOptional { get; set; }
+
+        [JsonProperty("isRest", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsRest { get; set; }
+    }
+
+    public partial record FluffyType
+    {
+        [JsonProperty("elementType", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType? ElementType { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Name? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("typeArguments", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType[]? TypeArguments { get; set; }
+    }
+
+    public partial record TentacledType
+    {
+        [JsonProperty("declaration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PurpleDeclaration? Declaration { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Name? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record PurpleDeclaration
+    {
+        [JsonProperty("children", Required = Required.Always)]
+        public GetSignature[] Children { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("groups", Required = Required.Always)]
+        public Group[] Groups { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public string KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record TypeElement
+    {
+        [JsonProperty("declaration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature? Declaration { get; set; }
+
+        [JsonProperty("elementType", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType? ElementType { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Name? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("typeArguments", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType[]? TypeArguments { get; set; }
+    }
+
+    public partial record StickyComment
+    {
+        [JsonProperty("returns", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Returns { get; set; }
+
+        [JsonProperty("shortText", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? ShortText { get; set; }
+
+        [JsonProperty("tags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Tag[]? Tags { get; set; }
+
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+    }
+
+    public partial record Tag
+    {
+        [JsonProperty("tag", Required = Required.Always)]
+        public string TagTag { get; set; }
+
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record StickyFlags
+    {
+        [JsonProperty("isAbstract", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsAbstract { get; set; }
+
+        [JsonProperty("isConstructorProperty", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsConstructorProperty { get; set; }
+
+        [JsonProperty("isExported", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsExported { get; set; }
+
+        [JsonProperty("isPrivate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsPrivate { get; set; }
+
+        [JsonProperty("isProtected", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsProtected { get; set; }
+
+        [JsonProperty("isPublic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsPublic { get; set; }
+
+        [JsonProperty("isStatic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsStatic { get; set; }
+    }
+
+    public partial record ExtendedBy
+    {
+        [JsonProperty("constraint", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy? Constraint { get; set; }
+
+        [JsonProperty("id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("typeArguments", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy[]? TypeArguments { get; set; }
+    }
+
+    public partial record FluffySignature
+    {
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public StickyComment? Comment { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public IndigoFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("implementationOf", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy? ImplementationOf { get; set; }
+
+        [JsonProperty("inheritedFrom", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy? InheritedFrom { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public SignatureKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("overwrites", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy? Overwrites { get; set; }
+
+        [JsonProperty("parameters", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PurpleParameter[]? Parameters { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public ExtendedBy Type { get; set; }
+
+        [JsonProperty("typeParameter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature[]? TypeParameter { get; set; }
+    }
+
+    public partial record IndigoFlags
+    {
+        [JsonProperty("isPrivate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsPrivate { get; set; }
+
+        [JsonProperty("isProtected", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsProtected { get; set; }
+    }
+
+    public partial record PurpleParameter
+    {
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TentacledComment? Comment { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public ParameterKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public StickyType Type { get; set; }
+    }
+
+    public partial record StickyType
+    {
+        [JsonProperty("constraint", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy? Constraint { get; set; }
+
+        [JsonProperty("declaration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature? Declaration { get; set; }
+
+        [JsonProperty("elementType", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType? ElementType { get; set; }
+
+        [JsonProperty("elements", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy[]? Elements { get; set; }
+
+        [JsonProperty("id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Id { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("typeArguments", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType[]? TypeArguments { get; set; }
+    }
+
+    public partial record IndigoType
+    {
+        [JsonProperty("constraint", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy? Constraint { get; set; }
+
+        [JsonProperty("declaration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FluffyDeclaration? Declaration { get; set; }
+
+        [JsonProperty("elementType", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy? ElementType { get; set; }
+
+        [JsonProperty("elements", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType[]? Elements { get; set; }
+
+        [JsonProperty("id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Id { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("typeArguments", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PurpleTypeArgument[]? TypeArguments { get; set; }
+
+        [JsonProperty("types", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TypeElement[]? Types { get; set; }
+    }
+
+    public partial record FluffyDeclaration
+    {
+        [JsonProperty("children", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public StickyChild[]? Children { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("groups", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Group[]? Groups { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("indexSignature", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public IndexSignature? IndexSignature { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public string KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("signatures", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TentacledSignature[]? Signatures { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+    }
+
+    public partial record StickyChild
+    {
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FluffyComment? Comment { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public FluffyFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public PurpleKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public IndecentType Type { get; set; }
+    }
+
+    public partial record IndecentType
+    {
+        [JsonProperty("declaration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature? Declaration { get; set; }
+
+        [JsonProperty("elements", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType[]? Elements { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Name? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record IndexSignature
+    {
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public string KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("parameters", Required = Required.Always)]
+        public GetSignature[] Parameters { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public HilariousType Type { get; set; }
+    }
+
+    public partial record HilariousType
+    {
+        [JsonProperty("declaration", Required = Required.Always)]
+        public GetSignature Declaration { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record TentacledSignature
+    {
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public IndigoComment? Comment { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public SignatureKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("parameters", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FluffyParameter[]? Parameters { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public ExtendedBy Type { get; set; }
+    }
+
+    public partial record IndigoComment
+    {
+        [JsonProperty("returns", Required = Required.Always)]
+        public string Returns { get; set; }
+
+        [JsonProperty("shortText", Required = Required.Always)]
+        public string ShortText { get; set; }
+    }
+
+    public partial record FluffyParameter
+    {
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FluffyComment? Comment { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public FluffyFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public string KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("sources", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Source[]? Sources { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public ElementType Type { get; set; }
+    }
+
+    public partial record PurpleTypeArgument
+    {
+        [JsonProperty("operator", Required = Required.Always)]
+        public string Operator { get; set; }
+
+        [JsonProperty("target", Required = Required.Always)]
+        public ElementType Target { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record IndecentFlags
+    {
+        [JsonProperty("hasExportAssignment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? HasExportAssignment { get; set; }
+
+        [JsonProperty("isAbstract", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsAbstract { get; set; }
+
+        [JsonProperty("isConst", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsConst { get; set; }
+
+        [JsonProperty("isExported", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsExported { get; set; }
+
+        [JsonProperty("isLet", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsLet { get; set; }
+
+        [JsonProperty("isPrivate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsPrivate { get; set; }
+
+        [JsonProperty("isProtected", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? IsProtected { get; set; }
+    }
+
+    public partial record StickySignature
+    {
+        [JsonProperty("comment", Required = Required.Always)]
+        public StickyComment Comment { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public IndigoFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public SignatureKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("parameters", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TentacledParameter[]? Parameters { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public CunningType Type { get; set; }
+
+        [JsonProperty("typeParameter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature[]? TypeParameter { get; set; }
+    }
+
+    public partial record TentacledParameter
+    {
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TentacledComment? Comment { get; set; }
+
+        [JsonProperty("defaultValue", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DefaultValue { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public TentacledFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public ParameterKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("originalName", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? OriginalName { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public AmbitiousType Type { get; set; }
+    }
+
+    public partial record AmbitiousType
+    {
+        [JsonProperty("declaration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TentacledDeclaration? Declaration { get; set; }
+
+        [JsonProperty("elementType", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType? ElementType { get; set; }
+
+        [JsonProperty("id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Id { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("typeArguments", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType[]? TypeArguments { get; set; }
+    }
+
+    public partial record TentacledDeclaration
+    {
+        [JsonProperty("children", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public IndigoChild[]? Children { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("groups", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Group[]? Groups { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("indexSignature", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public IndexSignatureElement? IndexSignature { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public string KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("signatures", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature[]? Signatures { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+    }
+
+    public partial record IndigoChild
+    {
+        [JsonProperty("comment", Required = Required.Always)]
+        public FluffyComment Comment { get; set; }
+
+        [JsonProperty("defaultValue", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DefaultValue { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public FluffyFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public PurpleKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public IndecentType Type { get; set; }
+    }
+
+    public partial record CunningType
+    {
+        [JsonProperty("declaration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PurpleDeclaration? Declaration { get; set; }
+
+        [JsonProperty("id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Id { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Name? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("typeArguments", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType[]? TypeArguments { get; set; }
+    }
+
+    public partial record MagentaType
+    {
+        [JsonProperty("declaration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public StickyDeclaration? Declaration { get; set; }
+
+        [JsonProperty("elementType", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType? ElementType { get; set; }
+
+        [JsonProperty("elements", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy[]? Elements { get; set; }
+
+        [JsonProperty("id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Id { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("typeArguments", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FluffyTypeArgument[]? TypeArguments { get; set; }
+
+        [JsonProperty("types", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ExtendedBy[]? Types { get; set; }
+
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Value { get; set; }
+    }
+
+    public partial record StickyDeclaration
+    {
+        [JsonProperty("children", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public IndecentChild[]? Children { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("groups", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Group[]? Groups { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public string KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("signatures", Required = Required.Always)]
+        public GetSignature[] Signatures { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+    }
+
+    public partial record IndecentChild
+    {
+        [JsonProperty("flags", Required = Required.Always)]
+        public FluffyFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public PurpleKindString KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public FriskyType Type { get; set; }
+    }
+
+    public partial record FriskyType
+    {
+        [JsonProperty("declaration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public IndigoDeclaration? Declaration { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Name? Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public partial record IndigoDeclaration
+    {
+        [JsonProperty("children", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature[]? Children { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("groups", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Group[]? Groups { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public string KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("signatures", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public GetSignature[]? Signatures { get; set; }
+
+        [JsonProperty("sources", Required = Required.Always)]
+        public Source[] Sources { get; set; }
+    }
+
+    public partial record FluffyTypeArgument
+    {
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("types", Required = Required.Always)]
+        public ElementType[] Types { get; set; }
+    }
+
+    public partial record TypeParameter
+    {
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PurpleComment? Comment { get; set; }
+
+        [JsonProperty("flags", Required = Required.Always)]
+        public GetSignatureFlags Flags { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public long Kind { get; set; }
+
+        [JsonProperty("kindString", Required = Required.Always)]
+        public string KindString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MischievousType? Type { get; set; }
+    }
+
+    public partial record MischievousType
+    {
+        [JsonProperty("id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Id { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Name? Name { get; set; }
+
+        [JsonProperty("operator", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Operator { get; set; }
+
+        [JsonProperty("target", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ElementType? Target { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record IndecentComment
+    {
+        [JsonProperty("shortText", Required = Required.Always)]
+        public string ShortText { get; set; }
+
+        [JsonProperty("tags", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Tag[]? Tags { get; set; }
+    }
+
+    public enum PurpleKindString { Variable, Function, Property, Method, Constructor, Accessor, EnumerationMember, Module, ObjectLiteral };
+
+    public enum SignatureKindString { CallSignature, ConstructorSignature };
+
+    public enum Name { String, Number, Void, T, Boolean, BaseClass, Any, Array, MyNumber };
+
+    public enum TypeEnum { Intrinsic, Reflection, Array, Reference, TypeParameter, Tuple, Union, StringLiteral };
+
+    public enum FileName { ModulesTs, ClassesTs, FlattenedTs, AccessTs, DefaultExportTs, EnumerationsTs, FunctionsTs, GenericsTs, SingleExportTs, Typescript13Ts, Typescript14Ts, Typescript15Ts, VariablesTs };
+
+    public enum ParameterKindString { Parameter };
+
+    public enum FluffyKindString { Module, Class, Variable, Function, Interface, Enumeration, ObjectLiteral, TypeAlias };
+
+    public enum TentacledKindString { ExternalModule };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                PurpleKindStringConverter.Singleton,
+                SignatureKindStringConverter.Singleton,
+                FileNameConverter.Singleton,
+                NameConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                ParameterKindStringConverter.Singleton,
+                FluffyKindStringConverter.Singleton,
+                TentacledKindStringConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleKindStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PurpleKindString) || t == typeof(PurpleKindString?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Variable":
+                    return PurpleKindString.Variable;
+                case "Function":
+                    return PurpleKindString.Function;
+                case "Property":
+                    return PurpleKindString.Property;
+                case "Method":
+                    return PurpleKindString.Method;
+                case "Constructor":
+                    return PurpleKindString.Constructor;
+                case "Accessor":
+                    return PurpleKindString.Accessor;
+                case "Enumeration member":
+                    return PurpleKindString.EnumerationMember;
+                case "Module":
+                    return PurpleKindString.Module;
+                case "Object literal":
+                    return PurpleKindString.ObjectLiteral;
+            }
+            throw new Exception("Cannot unmarshal type PurpleKindString");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PurpleKindString)untypedValue;
+            switch (value)
+            {
+                case PurpleKindString.Variable:
+                    serializer.Serialize(writer, "Variable");
+                    return;
+                case PurpleKindString.Function:
+                    serializer.Serialize(writer, "Function");
+                    return;
+                case PurpleKindString.Property:
+                    serializer.Serialize(writer, "Property");
+                    return;
+                case PurpleKindString.Method:
+                    serializer.Serialize(writer, "Method");
+                    return;
+                case PurpleKindString.Constructor:
+                    serializer.Serialize(writer, "Constructor");
+                    return;
+                case PurpleKindString.Accessor:
+                    serializer.Serialize(writer, "Accessor");
+                    return;
+                case PurpleKindString.EnumerationMember:
+                    serializer.Serialize(writer, "Enumeration member");
+                    return;
+                case PurpleKindString.Module:
+                    serializer.Serialize(writer, "Module");
+                    return;
+                case PurpleKindString.ObjectLiteral:
+                    serializer.Serialize(writer, "Object literal");
+                    return;
+            }
+            throw new Exception("Cannot marshal type PurpleKindString");
+        }
+
+        public static readonly PurpleKindStringConverter Singleton = new PurpleKindStringConverter();
+    }
+
+    internal class SignatureKindStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SignatureKindString) || t == typeof(SignatureKindString?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Call signature":
+                    return SignatureKindString.CallSignature;
+                case "Constructor signature":
+                    return SignatureKindString.ConstructorSignature;
+            }
+            throw new Exception("Cannot unmarshal type SignatureKindString");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SignatureKindString)untypedValue;
+            switch (value)
+            {
+                case SignatureKindString.CallSignature:
+                    serializer.Serialize(writer, "Call signature");
+                    return;
+                case SignatureKindString.ConstructorSignature:
+                    serializer.Serialize(writer, "Constructor signature");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SignatureKindString");
+        }
+
+        public static readonly SignatureKindStringConverter Singleton = new SignatureKindStringConverter();
+    }
+
+    internal class FileNameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FileName) || t == typeof(FileName?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "modules.ts":
+                    return FileName.ModulesTs;
+                case "classes.ts":
+                    return FileName.ClassesTs;
+                case "flattened.ts":
+                    return FileName.FlattenedTs;
+                case "access.ts":
+                    return FileName.AccessTs;
+                case "default-export.ts":
+                    return FileName.DefaultExportTs;
+                case "enumerations.ts":
+                    return FileName.EnumerationsTs;
+                case "functions.ts":
+                    return FileName.FunctionsTs;
+                case "generics.ts":
+                    return FileName.GenericsTs;
+                case "single-export.ts":
+                    return FileName.SingleExportTs;
+                case "typescript-1.3.ts":
+                    return FileName.Typescript13Ts;
+                case "typescript-1.4.ts":
+                    return FileName.Typescript14Ts;
+                case "typescript-1.5.ts":
+                    return FileName.Typescript15Ts;
+                case "variables.ts":
+                    return FileName.VariablesTs;
+            }
+            throw new Exception("Cannot unmarshal type FileName");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FileName)untypedValue;
+            switch (value)
+            {
+                case FileName.ModulesTs:
+                    serializer.Serialize(writer, "modules.ts");
+                    return;
+                case FileName.ClassesTs:
+                    serializer.Serialize(writer, "classes.ts");
+                    return;
+                case FileName.FlattenedTs:
+                    serializer.Serialize(writer, "flattened.ts");
+                    return;
+                case FileName.AccessTs:
+                    serializer.Serialize(writer, "access.ts");
+                    return;
+                case FileName.DefaultExportTs:
+                    serializer.Serialize(writer, "default-export.ts");
+                    return;
+                case FileName.EnumerationsTs:
+                    serializer.Serialize(writer, "enumerations.ts");
+                    return;
+                case FileName.FunctionsTs:
+                    serializer.Serialize(writer, "functions.ts");
+                    return;
+                case FileName.GenericsTs:
+                    serializer.Serialize(writer, "generics.ts");
+                    return;
+                case FileName.SingleExportTs:
+                    serializer.Serialize(writer, "single-export.ts");
+                    return;
+                case FileName.Typescript13Ts:
+                    serializer.Serialize(writer, "typescript-1.3.ts");
+                    return;
+                case FileName.Typescript14Ts:
+                    serializer.Serialize(writer, "typescript-1.4.ts");
+                    return;
+                case FileName.Typescript15Ts:
+                    serializer.Serialize(writer, "typescript-1.5.ts");
+                    return;
+                case FileName.VariablesTs:
+                    serializer.Serialize(writer, "variables.ts");
+                    return;
+            }
+            throw new Exception("Cannot marshal type FileName");
+        }
+
+        public static readonly FileNameConverter Singleton = new FileNameConverter();
+    }
+
+    internal class NameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Name) || t == typeof(Name?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "string":
+                    return Name.String;
+                case "number":
+                    return Name.Number;
+                case "void":
+                    return Name.Void;
+                case "T":
+                    return Name.T;
+                case "boolean":
+                    return Name.Boolean;
+                case "BaseClass":
+                    return Name.BaseClass;
+                case "any":
+                    return Name.Any;
+                case "Array":
+                    return Name.Array;
+                case "MyNumber":
+                    return Name.MyNumber;
+            }
+            throw new Exception("Cannot unmarshal type Name");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Name)untypedValue;
+            switch (value)
+            {
+                case Name.String:
+                    serializer.Serialize(writer, "string");
+                    return;
+                case Name.Number:
+                    serializer.Serialize(writer, "number");
+                    return;
+                case Name.Void:
+                    serializer.Serialize(writer, "void");
+                    return;
+                case Name.T:
+                    serializer.Serialize(writer, "T");
+                    return;
+                case Name.Boolean:
+                    serializer.Serialize(writer, "boolean");
+                    return;
+                case Name.BaseClass:
+                    serializer.Serialize(writer, "BaseClass");
+                    return;
+                case Name.Any:
+                    serializer.Serialize(writer, "any");
+                    return;
+                case Name.Array:
+                    serializer.Serialize(writer, "Array");
+                    return;
+                case Name.MyNumber:
+                    serializer.Serialize(writer, "MyNumber");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Name");
+        }
+
+        public static readonly NameConverter Singleton = new NameConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "intrinsic":
+                    return TypeEnum.Intrinsic;
+                case "reflection":
+                    return TypeEnum.Reflection;
+                case "array":
+                    return TypeEnum.Array;
+                case "reference":
+                    return TypeEnum.Reference;
+                case "typeParameter":
+                    return TypeEnum.TypeParameter;
+                case "tuple":
+                    return TypeEnum.Tuple;
+                case "union":
+                    return TypeEnum.Union;
+                case "stringLiteral":
+                    return TypeEnum.StringLiteral;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            switch (value)
+            {
+                case TypeEnum.Intrinsic:
+                    serializer.Serialize(writer, "intrinsic");
+                    return;
+                case TypeEnum.Reflection:
+                    serializer.Serialize(writer, "reflection");
+                    return;
+                case TypeEnum.Array:
+                    serializer.Serialize(writer, "array");
+                    return;
+                case TypeEnum.Reference:
+                    serializer.Serialize(writer, "reference");
+                    return;
+                case TypeEnum.TypeParameter:
+                    serializer.Serialize(writer, "typeParameter");
+                    return;
+                case TypeEnum.Tuple:
+                    serializer.Serialize(writer, "tuple");
+                    return;
+                case TypeEnum.Union:
+                    serializer.Serialize(writer, "union");
+                    return;
+                case TypeEnum.StringLiteral:
+                    serializer.Serialize(writer, "stringLiteral");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+
+    internal class ParameterKindStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ParameterKindString) || t == typeof(ParameterKindString?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Parameter")
+            {
+                return ParameterKindString.Parameter;
+            }
+            throw new Exception("Cannot unmarshal type ParameterKindString");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ParameterKindString)untypedValue;
+            if (value == ParameterKindString.Parameter)
+            {
+                serializer.Serialize(writer, "Parameter");
+                return;
+            }
+            throw new Exception("Cannot marshal type ParameterKindString");
+        }
+
+        public static readonly ParameterKindStringConverter Singleton = new ParameterKindStringConverter();
+    }
+
+    internal class FluffyKindStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FluffyKindString) || t == typeof(FluffyKindString?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Module":
+                    return FluffyKindString.Module;
+                case "Class":
+                    return FluffyKindString.Class;
+                case "Variable":
+                    return FluffyKindString.Variable;
+                case "Function":
+                    return FluffyKindString.Function;
+                case "Interface":
+                    return FluffyKindString.Interface;
+                case "Enumeration":
+                    return FluffyKindString.Enumeration;
+                case "Object literal":
+                    return FluffyKindString.ObjectLiteral;
+                case "Type alias":
+                    return FluffyKindString.TypeAlias;
+            }
+            throw new Exception("Cannot unmarshal type FluffyKindString");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FluffyKindString)untypedValue;
+            switch (value)
+            {
+                case FluffyKindString.Module:
+                    serializer.Serialize(writer, "Module");
+                    return;
+                case FluffyKindString.Class:
+                    serializer.Serialize(writer, "Class");
+                    return;
+                case FluffyKindString.Variable:
+                    serializer.Serialize(writer, "Variable");
+                    return;
+                case FluffyKindString.Function:
+                    serializer.Serialize(writer, "Function");
+                    return;
+                case FluffyKindString.Interface:
+                    serializer.Serialize(writer, "Interface");
+                    return;
+                case FluffyKindString.Enumeration:
+                    serializer.Serialize(writer, "Enumeration");
+                    return;
+                case FluffyKindString.ObjectLiteral:
+                    serializer.Serialize(writer, "Object literal");
+                    return;
+                case FluffyKindString.TypeAlias:
+                    serializer.Serialize(writer, "Type alias");
+                    return;
+            }
+            throw new Exception("Cannot marshal type FluffyKindString");
+        }
+
+        public static readonly FluffyKindStringConverter Singleton = new FluffyKindStringConverter();
+    }
+
+    internal class TentacledKindStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TentacledKindString) || t == typeof(TentacledKindString?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "External module")
+            {
+                return TentacledKindString.ExternalModule;
+            }
+            throw new Exception("Cannot unmarshal type TentacledKindString");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TentacledKindString)untypedValue;
+            if (value == TentacledKindString.ExternalModule)
+            {
+                serializer.Serialize(writer, "External module");
+                return;
+            }
+            throw new Exception("Cannot marshal type TentacledKindString");
+        }
+
+        public static readonly TentacledKindStringConverter Singleton = new TentacledKindStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/bug790.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/bug790.json/default/QuickType.cs
new file mode 100644
index 0000000..d8ddb30
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/bug790.json/default/QuickType.cs
@@ -0,0 +1,82 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("children_data", Required = Required.Always)]
+        public TopLevel[] ChildrenData { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("is_active", Required = Required.Always)]
+        public bool IsActive { get; set; }
+
+        [JsonProperty("level", Required = Required.Always)]
+        public long Level { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("parent_id", Required = Required.Always)]
+        public long ParentId { get; set; }
+
+        [JsonProperty("position", Required = Required.Always)]
+        public long Position { get; set; }
+
+        [JsonProperty("product_count", Required = Required.Always)]
+        public long ProductCount { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/bug855-short.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/bug855-short.json/default/QuickType.cs
new file mode 100644
index 0000000..c5277e0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/bug855-short.json/default/QuickType.cs
@@ -0,0 +1,105 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("channel_id", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long ChannelId { get; set; }
+
+        [JsonProperty("channel_name", Required = Required.Always)]
+        public string ChannelName { get; set; }
+
+        [JsonProperty("code", Required = Required.Always)]
+        public string Code { get; set; }
+
+        [JsonProperty("emoticon_set", Required = Required.Always)]
+        public long EmoticonSet { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static Dictionary<string, TopLevel> FromJson(string json) => JsonConvert.DeserializeObject<Dictionary<string, TopLevel>>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this Dictionary<string, TopLevel> self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/bug863.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/bug863.json/default/QuickType.cs
new file mode 100644
index 0000000..e647365
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/bug863.json/default/QuickType.cs
@@ -0,0 +1,557 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record PurpleTopLevel
+    {
+        [JsonProperty("ALIENLEVEL", Required = Required.Always)]
+        public long Alienlevel { get; set; }
+
+        [JsonProperty("BREED", Required = Required.Always)]
+        public Breed Breed { get; set; }
+
+        [JsonProperty("CHAR_DIMENSION", Required = Required.Always)]
+        public long CharDimension { get; set; }
+
+        [JsonProperty("CHAR_INSTANCE", Required = Required.Always)]
+        public long CharInstance { get; set; }
+
+        [JsonProperty("DEFENDER_RANK_TITLE", Required = Required.Always)]
+        public string DefenderRankTitle { get; set; }
+
+        [JsonProperty("FIRSTNAME", Required = Required.Always)]
+        public Firstname Firstname { get; set; }
+
+        [JsonProperty("HEADID", Required = Required.Always)]
+        public long Headid { get; set; }
+
+        [JsonProperty("LASTNAME", Required = Required.Always)]
+        public Lastname Lastname { get; set; }
+
+        [JsonProperty("LEVELX", Required = Required.Always)]
+        public long Levelx { get; set; }
+
+        [JsonProperty("NAME", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("PROF", Required = Required.Always)]
+        public string Prof { get; set; }
+
+        [JsonProperty("PROF_TITLE", Required = Required.Always)]
+        public string ProfTitle { get; set; }
+
+        [JsonProperty("PVPRATING", Required = Required.Always)]
+        public long Pvprating { get; set; }
+
+        [JsonProperty("PVPTITLE", Required = Required.Always)]
+        public Pvptitle Pvptitle { get; set; }
+
+        [JsonProperty("RANK", Required = Required.Always)]
+        public long Rank { get; set; }
+
+        [JsonProperty("RANK_TITLE", Required = Required.Always)]
+        public RankTitle RankTitle { get; set; }
+
+        [JsonProperty("SEX", Required = Required.Always)]
+        public Sex Sex { get; set; }
+    }
+
+    public partial record FluffyTopLevel
+    {
+        [JsonProperty("ADVENTURERCOUNT", Required = Required.Always)]
+        public long Adventurercount { get; set; }
+
+        [JsonProperty("AGENTCOUNT", Required = Required.Always)]
+        public long Agentcount { get; set; }
+
+        [JsonProperty("ATROXCOUNT", Required = Required.Always)]
+        public long Atroxcount { get; set; }
+
+        [JsonProperty("AVGLVL", Required = Required.Always)]
+        public double Avglvl { get; set; }
+
+        [JsonProperty("BTCOUNT", Required = Required.Always)]
+        public long Btcount { get; set; }
+
+        [JsonProperty("DESCRIPTION", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("DOCTORCOUNT", Required = Required.Always)]
+        public long Doctorcount { get; set; }
+
+        [JsonProperty("ENFCOUNT", Required = Required.Always)]
+        public long Enfcount { get; set; }
+
+        [JsonProperty("ENGINEEERCOUNT", Required = Required.Always)]
+        public long Engineeercount { get; set; }
+
+        [JsonProperty("FEMALECOUNT", Required = Required.Always)]
+        public long Femalecount { get; set; }
+
+        [JsonProperty("FIXERCOUNT", Required = Required.Always)]
+        public long Fixercount { get; set; }
+
+        [JsonProperty("GOVERNINGNAME", Required = Required.Always)]
+        public string Governingname { get; set; }
+
+        [JsonProperty("HISTORY", Required = Required.Always)]
+        public string History { get; set; }
+
+        [JsonProperty("KEEPERCOUNT", Required = Required.Always)]
+        public long Keepercount { get; set; }
+
+        [JsonProperty("MACOUNT", Required = Required.Always)]
+        public long Macount { get; set; }
+
+        [JsonProperty("MALECOUNT", Required = Required.Always)]
+        public long Malecount { get; set; }
+
+        [JsonProperty("MAXLVL", Required = Required.Always)]
+        public long Maxlvl { get; set; }
+
+        [JsonProperty("METACOUNT", Required = Required.Always)]
+        public long Metacount { get; set; }
+
+        [JsonProperty("MINLVL", Required = Required.Always)]
+        public long Minlvl { get; set; }
+
+        [JsonProperty("MONSTERCOUNT", Required = Required.Always)]
+        public long Monstercount { get; set; }
+
+        [JsonProperty("NAME", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("NANOCOUNT", Required = Required.Always)]
+        public long Nanocount { get; set; }
+
+        [JsonProperty("NANORACECOUNT", Required = Required.Always)]
+        public long Nanoracecount { get; set; }
+
+        [JsonProperty("NEUTERCOUNT", Required = Required.Always)]
+        public long Neutercount { get; set; }
+
+        [JsonProperty("NUMMEMBERS", Required = Required.Always)]
+        public long Nummembers { get; set; }
+
+        [JsonProperty("OBJECTIVE", Required = Required.Always)]
+        public string Objective { get; set; }
+
+        [JsonProperty("OPIFEXCOUNT", Required = Required.Always)]
+        public long Opifexcount { get; set; }
+
+        [JsonProperty("ORG_DIMENSION", Required = Required.Always)]
+        public long OrgDimension { get; set; }
+
+        [JsonProperty("ORG_INSTANCE", Required = Required.Always)]
+        public long OrgInstance { get; set; }
+
+        [JsonProperty("SHADECOUNT", Required = Required.Always)]
+        public long Shadecount { get; set; }
+
+        [JsonProperty("SIDE", Required = Required.Always)]
+        public long Side { get; set; }
+
+        [JsonProperty("SIDE_NAME", Required = Required.Always)]
+        public string SideName { get; set; }
+
+        [JsonProperty("SOLIDERCOUNT", Required = Required.Always)]
+        public long Solidercount { get; set; }
+
+        [JsonProperty("SOLITUSCOUNT", Required = Required.Always)]
+        public long Solituscount { get; set; }
+
+        [JsonProperty("TRADERCOUNT", Required = Required.Always)]
+        public long Tradercount { get; set; }
+    }
+
+    public enum Breed { Atrox, Solitus, Opifex, Nano };
+
+    public enum Firstname { Empty, Chi };
+
+    public enum Lastname { Empty, Washko };
+
+    public enum Pvptitle { Freshman };
+
+    public enum RankTitle { President, Advisor, Veteran, Applicant };
+
+    public enum Sex { Neuter, Male, Female };
+
+    public partial struct TopLevelUnion
+    {
+        public FluffyTopLevel? FluffyTopLevel;
+        public PurpleTopLevel[]? PurpleTopLevelArray;
+        public string? String;
+
+        public static implicit operator TopLevelUnion(FluffyTopLevel FluffyTopLevel) => new TopLevelUnion { FluffyTopLevel = FluffyTopLevel };
+        public static implicit operator TopLevelUnion(PurpleTopLevel[] PurpleTopLevelArray) => new TopLevelUnion { PurpleTopLevelArray = PurpleTopLevelArray };
+        public static implicit operator TopLevelUnion(string String) => new TopLevelUnion { String = String };
+    }
+
+    public class TopLevel
+    {
+        public static TopLevelUnion[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevelUnion[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevelUnion[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TopLevelUnionConverter.Singleton,
+                BreedConverter.Singleton,
+                FirstnameConverter.Singleton,
+                LastnameConverter.Singleton,
+                PvptitleConverter.Singleton,
+                RankTitleConverter.Singleton,
+                SexConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TopLevelUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TopLevelUnion) || t == typeof(TopLevelUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new TopLevelUnion { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FluffyTopLevel>(reader);
+                    return new TopLevelUnion { FluffyTopLevel = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<PurpleTopLevel[]>(reader);
+                    return new TopLevelUnion { PurpleTopLevelArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type TopLevelUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TopLevelUnion)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.PurpleTopLevelArray != null)
+            {
+                serializer.Serialize(writer, value.PurpleTopLevelArray);
+                return;
+            }
+            if (value.FluffyTopLevel != null)
+            {
+                serializer.Serialize(writer, value.FluffyTopLevel);
+                return;
+            }
+            throw new Exception("Cannot marshal type TopLevelUnion");
+        }
+
+        public static readonly TopLevelUnionConverter Singleton = new TopLevelUnionConverter();
+    }
+
+    internal class BreedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Breed) || t == typeof(Breed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Atrox":
+                    return Breed.Atrox;
+                case "Solitus":
+                    return Breed.Solitus;
+                case "Opifex":
+                    return Breed.Opifex;
+                case "Nano":
+                    return Breed.Nano;
+            }
+            throw new Exception("Cannot unmarshal type Breed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Breed)untypedValue;
+            switch (value)
+            {
+                case Breed.Atrox:
+                    serializer.Serialize(writer, "Atrox");
+                    return;
+                case Breed.Solitus:
+                    serializer.Serialize(writer, "Solitus");
+                    return;
+                case Breed.Opifex:
+                    serializer.Serialize(writer, "Opifex");
+                    return;
+                case Breed.Nano:
+                    serializer.Serialize(writer, "Nano");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Breed");
+        }
+
+        public static readonly BreedConverter Singleton = new BreedConverter();
+    }
+
+    internal class FirstnameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Firstname) || t == typeof(Firstname?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Firstname.Empty;
+                case "Chi":
+                    return Firstname.Chi;
+            }
+            throw new Exception("Cannot unmarshal type Firstname");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Firstname)untypedValue;
+            switch (value)
+            {
+                case Firstname.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Firstname.Chi:
+                    serializer.Serialize(writer, "Chi");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Firstname");
+        }
+
+        public static readonly FirstnameConverter Singleton = new FirstnameConverter();
+    }
+
+    internal class LastnameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Lastname) || t == typeof(Lastname?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Lastname.Empty;
+                case "Washko":
+                    return Lastname.Washko;
+            }
+            throw new Exception("Cannot unmarshal type Lastname");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Lastname)untypedValue;
+            switch (value)
+            {
+                case Lastname.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Lastname.Washko:
+                    serializer.Serialize(writer, "Washko");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Lastname");
+        }
+
+        public static readonly LastnameConverter Singleton = new LastnameConverter();
+    }
+
+    internal class PvptitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pvptitle) || t == typeof(Pvptitle?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Freshman")
+            {
+                return Pvptitle.Freshman;
+            }
+            throw new Exception("Cannot unmarshal type Pvptitle");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Pvptitle)untypedValue;
+            if (value == Pvptitle.Freshman)
+            {
+                serializer.Serialize(writer, "Freshman");
+                return;
+            }
+            throw new Exception("Cannot marshal type Pvptitle");
+        }
+
+        public static readonly PvptitleConverter Singleton = new PvptitleConverter();
+    }
+
+    internal class RankTitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RankTitle) || t == typeof(RankTitle?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "President":
+                    return RankTitle.President;
+                case "Advisor":
+                    return RankTitle.Advisor;
+                case "Veteran":
+                    return RankTitle.Veteran;
+                case "Applicant":
+                    return RankTitle.Applicant;
+            }
+            throw new Exception("Cannot unmarshal type RankTitle");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (RankTitle)untypedValue;
+            switch (value)
+            {
+                case RankTitle.President:
+                    serializer.Serialize(writer, "President");
+                    return;
+                case RankTitle.Advisor:
+                    serializer.Serialize(writer, "Advisor");
+                    return;
+                case RankTitle.Veteran:
+                    serializer.Serialize(writer, "Veteran");
+                    return;
+                case RankTitle.Applicant:
+                    serializer.Serialize(writer, "Applicant");
+                    return;
+            }
+            throw new Exception("Cannot marshal type RankTitle");
+        }
+
+        public static readonly RankTitleConverter Singleton = new RankTitleConverter();
+    }
+
+    internal class SexConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Sex) || t == typeof(Sex?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Neuter":
+                    return Sex.Neuter;
+                case "Male":
+                    return Sex.Male;
+                case "Female":
+                    return Sex.Female;
+            }
+            throw new Exception("Cannot unmarshal type Sex");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Sex)untypedValue;
+            switch (value)
+            {
+                case Sex.Neuter:
+                    serializer.Serialize(writer, "Neuter");
+                    return;
+                case Sex.Male:
+                    serializer.Serialize(writer, "Male");
+                    return;
+                case Sex.Female:
+                    serializer.Serialize(writer, "Female");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Sex");
+        }
+
+        public static readonly SexConverter Singleton = new SexConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/coin-pairs.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/coin-pairs.json/default/QuickType.cs
new file mode 100644
index 0000000..6edd696
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/coin-pairs.json/default/QuickType.cs
@@ -0,0 +1,91 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("pairs", Required = Required.Always)]
+        public Dictionary<string, Pair> Pairs { get; set; }
+
+        [JsonProperty("server_time", Required = Required.Always)]
+        public long ServerTime { get; set; }
+    }
+
+    public partial record Pair
+    {
+        [JsonProperty("decimal_places", Required = Required.Always)]
+        public long DecimalPlaces { get; set; }
+
+        [JsonProperty("fee", Required = Required.Always)]
+        public double Fee { get; set; }
+
+        [JsonProperty("hidden", Required = Required.Always)]
+        public long Hidden { get; set; }
+
+        [JsonProperty("max_amount", Required = Required.Always)]
+        public long MaxAmount { get; set; }
+
+        [JsonProperty("max_price", Required = Required.Always)]
+        public long MaxPrice { get; set; }
+
+        [JsonProperty("min_amount", Required = Required.Always)]
+        public double MinAmount { get; set; }
+
+        [JsonProperty("min_price", Required = Required.Always)]
+        public double MinPrice { get; set; }
+
+        [JsonProperty("min_total", Required = Required.Always)]
+        public double MinTotal { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations1.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations1.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs
new file mode 100644
index 0000000..a45fb04
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations1.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs
@@ -0,0 +1,2712 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("centrodesmose", Required = Required.Always)]
+        public string Centrodesmose { get; set; }
+
+        [JsonProperty("cerograph", Required = Required.Always)]
+        public CerographElement[] Cerograph { get; set; }
+
+        [JsonProperty("chemotherapeutics", Required = Required.Always)]
+        public ChemotherapeuticElement[] Chemotherapeutics { get; set; }
+
+        [JsonProperty("cimelia", Required = Required.Always)]
+        public CimeliaElement[] Cimelia { get; set; }
+
+        [JsonProperty("citrated", Required = Required.Always)]
+        public long Citrated { get; set; }
+
+        [JsonProperty("clinodome", Required = Required.Always)]
+        public Clinodome[] Clinodome { get; set; }
+
+        [JsonProperty("coadjust", Required = Required.Always)]
+        public CoadjustElement[] Coadjust { get; set; }
+
+        [JsonProperty("consilience", Required = Required.Always)]
+        public Consilience[] Consilience { get; set; }
+
+        [JsonProperty("constructor", Required = Required.Always)]
+        public Constructor[] Constructor { get; set; }
+
+        [JsonProperty("continuative", Required = Required.Always)]
+        public Continuative[] Continuative { get; set; }
+
+        [JsonProperty("credulity", Required = Required.Always)]
+        public CredulityElement[] Credulity { get; set; }
+
+        [JsonProperty("creviced", Required = Required.Always)]
+        public Creviced[] Creviced { get; set; }
+
+        [JsonProperty("cubiculum", Required = Required.Always)]
+        public long?[][] Cubiculum { get; set; }
+
+        [JsonProperty("deruralize", Required = Required.Always)]
+        public DeruralizeElement[] Deruralize { get; set; }
+
+        [JsonProperty("diaereses", Required = Required.Always)]
+        public DiaereseElement[] Diaereses { get; set; }
+
+        [JsonProperty("dissolution", Required = Required.Always)]
+        public dynamic[]?[] Dissolution { get; set; }
+
+        [JsonProperty("downstroke", Required = Required.Always)]
+        public Downstroke[] Downstroke { get; set; }
+
+        [JsonProperty("electrotautomerism", Required = Required.Always)]
+        public double?[] Electrotautomerism { get; set; }
+
+        [JsonProperty("eleutheromania", Required = Required.Always)]
+        public Eleutheromania[] Eleutheromania { get; set; }
+
+        [JsonProperty("encrust", Required = Required.Always)]
+        public Encrust Encrust { get; set; }
+
+        [JsonProperty("entomoid", Required = Required.Always)]
+        public Entomoid[] Entomoid { get; set; }
+
+        [JsonProperty("epipaleolithic", Required = Required.Always)]
+        public Epipaleolithic[] Epipaleolithic { get; set; }
+
+        [JsonProperty("expropriable", Required = Required.Always)]
+        public Expropriable[] Expropriable { get; set; }
+
+        [JsonProperty("faggingly", Required = Required.Always)]
+        public FagginglyElement[] Faggingly { get; set; }
+
+        [JsonProperty("fenks", Required = Required.Always)]
+        public FenkElement[] Fenks { get; set; }
+
+        [JsonProperty("flagmaking", Required = Required.Always)]
+        public FlagmakingElement[] Flagmaking { get; set; }
+
+        [JsonProperty("fluorometer", Required = Required.Always)]
+        public Fluorometer[] Fluorometer { get; set; }
+
+        [JsonProperty("fulsome", Required = Required.Always)]
+        public long?[] Fulsome { get; set; }
+
+        [JsonProperty("fuzzy", Required = Required.Always)]
+        public Fuzzy[] Fuzzy { get; set; }
+
+        [JsonProperty("gardenwards", Required = Required.Always)]
+        public Gardenward[] Gardenwards { get; set; }
+
+        [JsonProperty("generalissimo", Required = Required.Always)]
+        public Generalissimo[] Generalissimo { get; set; }
+
+        [JsonProperty("habeas", Required = Required.Always)]
+        public Dictionary<string, long>?[] Habeas { get; set; }
+
+        [JsonProperty("hemicrystalline", Required = Required.Always)]
+        public Hemicrystalline[] Hemicrystalline { get; set; }
+
+        [JsonProperty("hemocoele", Required = Required.Always)]
+        public HemocoeleElement[] Hemocoele { get; set; }
+
+        [JsonProperty("hoister", Required = Required.Always)]
+        public Hoister[] Hoister { get; set; }
+
+        [JsonProperty("hyperpiesis", Required = Required.Always)]
+        public Hyperpiesi[] Hyperpiesis { get; set; }
+
+        [JsonProperty("hyppish", Required = Required.Always)]
+        public Hyppish[] Hyppish { get; set; }
+
+        [JsonProperty("idealizer", Required = Required.Always)]
+        public Idealizer[] Idealizer { get; set; }
+
+        [JsonProperty("incrustator", Required = Required.Always)]
+        public Incrustator[] Incrustator { get; set; }
+
+        [JsonProperty("intentiveness", Required = Required.Always)]
+        public Intentiveness[] Intentiveness { get; set; }
+
+        [JsonProperty("interacinar", Required = Required.Always)]
+        public Interacinar Interacinar { get; set; }
+
+        [JsonProperty("intercorrelation", Required = Required.Always)]
+        public long[]?[] Intercorrelation { get; set; }
+
+        [JsonProperty("jacutinga", Required = Required.Always)]
+        public Jacutinga[] Jacutinga { get; set; }
+    }
+
+    public partial record CerographClass
+    {
+        [JsonProperty("apotropaion", Required = Required.AllowNull)]
+        public dynamic Apotropaion { get; set; }
+
+        [JsonProperty("casuary", Required = Required.AllowNull)]
+        public dynamic Casuary { get; set; }
+
+        [JsonProperty("creaker", Required = Required.AllowNull)]
+        public dynamic Creaker { get; set; }
+
+        [JsonProperty("disqualification", Required = Required.AllowNull)]
+        public dynamic Disqualification { get; set; }
+
+        [JsonProperty("imperatorious", Required = Required.AllowNull)]
+        public dynamic Imperatorious { get; set; }
+
+        [JsonProperty("impermeabilize", Required = Required.AllowNull)]
+        public dynamic Impermeabilize { get; set; }
+
+        [JsonProperty("metastoma", Required = Required.AllowNull)]
+        public dynamic Metastoma { get; set; }
+
+        [JsonProperty("noctidiurnal", Required = Required.AllowNull)]
+        public dynamic Noctidiurnal { get; set; }
+
+        [JsonProperty("nonreserve", Required = Required.AllowNull)]
+        public dynamic Nonreserve { get; set; }
+
+        [JsonProperty("ophthalmotonometry", Required = Required.AllowNull)]
+        public dynamic Ophthalmotonometry { get; set; }
+
+        [JsonProperty("pailful", Required = Required.AllowNull)]
+        public dynamic Pailful { get; set; }
+
+        [JsonProperty("pigfish", Required = Required.AllowNull)]
+        public dynamic Pigfish { get; set; }
+
+        [JsonProperty("pongee", Required = Required.AllowNull)]
+        public dynamic Pongee { get; set; }
+
+        [JsonProperty("prosodical", Required = Required.AllowNull)]
+        public dynamic Prosodical { get; set; }
+
+        [JsonProperty("scrofuloderm", Required = Required.AllowNull)]
+        public dynamic Scrofuloderm { get; set; }
+
+        [JsonProperty("storekeeping", Required = Required.AllowNull)]
+        public dynamic Storekeeping { get; set; }
+
+        [JsonProperty("therologist", Required = Required.AllowNull)]
+        public dynamic Therologist { get; set; }
+
+        [JsonProperty("Tolowa", Required = Required.AllowNull)]
+        public dynamic Tolowa { get; set; }
+
+        [JsonProperty("tradeful", Required = Required.AllowNull)]
+        public dynamic Tradeful { get; set; }
+
+        [JsonProperty("unriveting", Required = Required.AllowNull)]
+        public dynamic Unriveting { get; set; }
+    }
+
+    public partial record ChemotherapeuticClass
+    {
+        [JsonProperty("angioneurotic")]
+        public dynamic? Angioneurotic { get; set; }
+
+        [JsonProperty("availment")]
+        public dynamic? Availment { get; set; }
+
+        [JsonProperty("bladelet")]
+        public dynamic? Bladelet { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("caulis")]
+        public dynamic? Caulis { get; set; }
+
+        [JsonProperty("chalcus")]
+        public dynamic? Chalcus { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enteradenological")]
+        public dynamic? Enteradenological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("imporosity")]
+        public dynamic? Imporosity { get; set; }
+
+        [JsonProperty("insistently")]
+        public dynamic? Insistently { get; set; }
+
+        [JsonProperty("intraparietal")]
+        public dynamic? Intraparietal { get; set; }
+
+        [JsonProperty("ivied")]
+        public dynamic? Ivied { get; set; }
+
+        [JsonProperty("Maureen")]
+        public dynamic? Maureen { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("nostochine")]
+        public dynamic? Nostochine { get; set; }
+
+        [JsonProperty("nutcracker")]
+        public dynamic? Nutcracker { get; set; }
+
+        [JsonProperty("ofttimes")]
+        public dynamic? Ofttimes { get; set; }
+
+        [JsonProperty("phenocryst")]
+        public dynamic? Phenocryst { get; set; }
+
+        [JsonProperty("precoincident")]
+        public dynamic? Precoincident { get; set; }
+
+        [JsonProperty("ramiferous")]
+        public dynamic? Ramiferous { get; set; }
+
+        [JsonProperty("stagmometer")]
+        public dynamic? Stagmometer { get; set; }
+
+        [JsonProperty("tetherball")]
+        public dynamic? Tetherball { get; set; }
+
+        [JsonProperty("unshy")]
+        public dynamic? Unshy { get; set; }
+    }
+
+    public partial record CimeliaClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public dynamic Nonbookish { get; set; }
+    }
+
+    public partial record CoadjustClass
+    {
+        [JsonProperty("amidosulphonal")]
+        public dynamic? Amidosulphonal { get; set; }
+
+        [JsonProperty("Benny")]
+        public dynamic? Benny { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ensnare")]
+        public dynamic? Ensnare { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hybridizer")]
+        public dynamic? Hybridizer { get; set; }
+
+        [JsonProperty("leastwise")]
+        public dynamic? Leastwise { get; set; }
+
+        [JsonProperty("lof")]
+        public dynamic? Lof { get; set; }
+
+        [JsonProperty("monkhood")]
+        public dynamic? Monkhood { get; set; }
+
+        [JsonProperty("Netherlandish")]
+        public dynamic? Netherlandish { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("peonism")]
+        public dynamic? Peonism { get; set; }
+
+        [JsonProperty("Phonelescope")]
+        public dynamic? Phonelescope { get; set; }
+
+        [JsonProperty("porphyrogeniture")]
+        public dynamic? Porphyrogeniture { get; set; }
+
+        [JsonProperty("preindemnify")]
+        public dynamic? Preindemnify { get; set; }
+
+        [JsonProperty("rosal")]
+        public dynamic? Rosal { get; set; }
+
+        [JsonProperty("scalenous")]
+        public dynamic? Scalenous { get; set; }
+
+        [JsonProperty("scopine")]
+        public dynamic? Scopine { get; set; }
+
+        [JsonProperty("Sedaceae")]
+        public dynamic? Sedaceae { get; set; }
+
+        [JsonProperty("suberinize")]
+        public dynamic? Suberinize { get; set; }
+
+        [JsonProperty("symbiot")]
+        public dynamic? Symbiot { get; set; }
+
+        [JsonProperty("tablefellow")]
+        public dynamic? Tablefellow { get; set; }
+
+        [JsonProperty("unchargeable")]
+        public dynamic? Unchargeable { get; set; }
+    }
+
+    public partial record CredulityClass
+    {
+        [JsonProperty("ammonolytic", Required = Required.AllowNull)]
+        public dynamic Ammonolytic { get; set; }
+
+        [JsonProperty("bushmaster", Required = Required.AllowNull)]
+        public dynamic Bushmaster { get; set; }
+
+        [JsonProperty("considering", Required = Required.AllowNull)]
+        public dynamic Considering { get; set; }
+
+        [JsonProperty("consuetudinary", Required = Required.AllowNull)]
+        public dynamic Consuetudinary { get; set; }
+
+        [JsonProperty("embarras", Required = Required.AllowNull)]
+        public dynamic Embarras { get; set; }
+
+        [JsonProperty("fineness", Required = Required.AllowNull)]
+        public dynamic Fineness { get; set; }
+
+        [JsonProperty("flaithship", Required = Required.AllowNull)]
+        public dynamic Flaithship { get; set; }
+
+        [JsonProperty("Flavia", Required = Required.AllowNull)]
+        public dynamic Flavia { get; set; }
+
+        [JsonProperty("gruffly", Required = Required.AllowNull)]
+        public dynamic Gruffly { get; set; }
+
+        [JsonProperty("Hedychium", Required = Required.AllowNull)]
+        public dynamic Hedychium { get; set; }
+
+        [JsonProperty("leadwort", Required = Required.AllowNull)]
+        public dynamic Leadwort { get; set; }
+
+        [JsonProperty("overseriously", Required = Required.AllowNull)]
+        public dynamic Overseriously { get; set; }
+
+        [JsonProperty("parabola", Required = Required.AllowNull)]
+        public dynamic Parabola { get; set; }
+
+        [JsonProperty("pectinatodenticulate", Required = Required.AllowNull)]
+        public dynamic Pectinatodenticulate { get; set; }
+
+        [JsonProperty("Popean", Required = Required.AllowNull)]
+        public dynamic Popean { get; set; }
+
+        [JsonProperty("pornocrat", Required = Required.AllowNull)]
+        public dynamic Pornocrat { get; set; }
+
+        [JsonProperty("quadrisect", Required = Required.AllowNull)]
+        public dynamic Quadrisect { get; set; }
+
+        [JsonProperty("seriality", Required = Required.AllowNull)]
+        public dynamic Seriality { get; set; }
+
+        [JsonProperty("vamphorn", Required = Required.AllowNull)]
+        public dynamic Vamphorn { get; set; }
+
+        [JsonProperty("wharp", Required = Required.AllowNull)]
+        public dynamic Wharp { get; set; }
+    }
+
+    public partial record DeruralizeClass
+    {
+        [JsonProperty("bockerel", Required = Required.AllowNull)]
+        public dynamic Bockerel { get; set; }
+
+        [JsonProperty("boulder", Required = Required.AllowNull)]
+        public dynamic Boulder { get; set; }
+
+        [JsonProperty("churrus", Required = Required.AllowNull)]
+        public dynamic Churrus { get; set; }
+
+        [JsonProperty("counterdigged", Required = Required.AllowNull)]
+        public dynamic Counterdigged { get; set; }
+
+        [JsonProperty("dialogite", Required = Required.AllowNull)]
+        public dynamic Dialogite { get; set; }
+
+        [JsonProperty("digenic", Required = Required.AllowNull)]
+        public dynamic Digenic { get; set; }
+
+        [JsonProperty("dunbird", Required = Required.AllowNull)]
+        public dynamic Dunbird { get; set; }
+
+        [JsonProperty("ergatogyne", Required = Required.AllowNull)]
+        public dynamic Ergatogyne { get; set; }
+
+        [JsonProperty("fiendful", Required = Required.AllowNull)]
+        public dynamic Fiendful { get; set; }
+
+        [JsonProperty("jackrod", Required = Required.AllowNull)]
+        public dynamic Jackrod { get; set; }
+
+        [JsonProperty("Jehovistic", Required = Required.AllowNull)]
+        public dynamic Jehovistic { get; set; }
+
+        [JsonProperty("Paninean", Required = Required.AllowNull)]
+        public dynamic Paninean { get; set; }
+
+        [JsonProperty("panther", Required = Required.AllowNull)]
+        public dynamic Panther { get; set; }
+
+        [JsonProperty("placentigerous", Required = Required.AllowNull)]
+        public dynamic Placentigerous { get; set; }
+
+        [JsonProperty("Romney", Required = Required.AllowNull)]
+        public dynamic Romney { get; set; }
+
+        [JsonProperty("sparm", Required = Required.AllowNull)]
+        public dynamic Sparm { get; set; }
+
+        [JsonProperty("tocsin", Required = Required.AllowNull)]
+        public dynamic Tocsin { get; set; }
+
+        [JsonProperty("unnicked", Required = Required.AllowNull)]
+        public dynamic Unnicked { get; set; }
+
+        [JsonProperty("unstavable", Required = Required.AllowNull)]
+        public dynamic Unstavable { get; set; }
+
+        [JsonProperty("windfirm", Required = Required.AllowNull)]
+        public dynamic Windfirm { get; set; }
+    }
+
+    public partial record DiaereseClass
+    {
+        [JsonProperty("Amoreuxia", Required = Required.AllowNull)]
+        public dynamic Amoreuxia { get; set; }
+
+        [JsonProperty("ani", Required = Required.AllowNull)]
+        public dynamic Ani { get; set; }
+
+        [JsonProperty("bernicle", Required = Required.AllowNull)]
+        public dynamic Bernicle { get; set; }
+
+        [JsonProperty("blackwasher", Required = Required.AllowNull)]
+        public dynamic Blackwasher { get; set; }
+
+        [JsonProperty("blowhard", Required = Required.AllowNull)]
+        public dynamic Blowhard { get; set; }
+
+        [JsonProperty("broma", Required = Required.AllowNull)]
+        public dynamic Broma { get; set; }
+
+        [JsonProperty("closecross", Required = Required.AllowNull)]
+        public dynamic Closecross { get; set; }
+
+        [JsonProperty("congregationalism", Required = Required.AllowNull)]
+        public dynamic Congregationalism { get; set; }
+
+        [JsonProperty("grayly", Required = Required.AllowNull)]
+        public dynamic Grayly { get; set; }
+
+        [JsonProperty("historically", Required = Required.AllowNull)]
+        public dynamic Historically { get; set; }
+
+        [JsonProperty("hoast", Required = Required.AllowNull)]
+        public dynamic Hoast { get; set; }
+
+        [JsonProperty("irretentive", Required = Required.AllowNull)]
+        public dynamic Irretentive { get; set; }
+
+        [JsonProperty("parcener", Required = Required.AllowNull)]
+        public dynamic Parcener { get; set; }
+
+        [JsonProperty("pedder", Required = Required.AllowNull)]
+        public dynamic Pedder { get; set; }
+
+        [JsonProperty("pseudoanatomic", Required = Required.AllowNull)]
+        public dynamic Pseudoanatomic { get; set; }
+
+        [JsonProperty("rhizocarpian", Required = Required.AllowNull)]
+        public dynamic Rhizocarpian { get; set; }
+
+        [JsonProperty("samel", Required = Required.AllowNull)]
+        public dynamic Samel { get; set; }
+
+        [JsonProperty("silker", Required = Required.AllowNull)]
+        public dynamic Silker { get; set; }
+
+        [JsonProperty("subdentated", Required = Required.AllowNull)]
+        public dynamic Subdentated { get; set; }
+
+        [JsonProperty("subobscure", Required = Required.AllowNull)]
+        public dynamic Subobscure { get; set; }
+    }
+
+    public partial record Encrust
+    {
+        [JsonProperty("comradely", Required = Required.AllowNull)]
+        public dynamic Comradely { get; set; }
+
+        [JsonProperty("diacanthous", Required = Required.AllowNull)]
+        public dynamic Diacanthous { get; set; }
+
+        [JsonProperty("feminineness", Required = Required.AllowNull)]
+        public dynamic Feminineness { get; set; }
+
+        [JsonProperty("gossamered", Required = Required.AllowNull)]
+        public dynamic Gossamered { get; set; }
+
+        [JsonProperty("Hibernia", Required = Required.AllowNull)]
+        public dynamic Hibernia { get; set; }
+
+        [JsonProperty("Hibiscus", Required = Required.AllowNull)]
+        public dynamic Hibiscus { get; set; }
+
+        [JsonProperty("Lepidosauria", Required = Required.AllowNull)]
+        public dynamic Lepidosauria { get; set; }
+
+        [JsonProperty("lollingly", Required = Required.AllowNull)]
+        public dynamic Lollingly { get; set; }
+
+        [JsonProperty("manager", Required = Required.AllowNull)]
+        public dynamic Manager { get; set; }
+
+        [JsonProperty("mechanic", Required = Required.AllowNull)]
+        public dynamic Mechanic { get; set; }
+
+        [JsonProperty("overminuteness", Required = Required.AllowNull)]
+        public dynamic Overminuteness { get; set; }
+
+        [JsonProperty("papelonne", Required = Required.AllowNull)]
+        public dynamic Papelonne { get; set; }
+
+        [JsonProperty("plebification", Required = Required.AllowNull)]
+        public dynamic Plebification { get; set; }
+
+        [JsonProperty("pugmiller", Required = Required.AllowNull)]
+        public dynamic Pugmiller { get; set; }
+
+        [JsonProperty("recoveror", Required = Required.AllowNull)]
+        public dynamic Recoveror { get; set; }
+
+        [JsonProperty("spermatoblastic", Required = Required.AllowNull)]
+        public dynamic Spermatoblastic { get; set; }
+
+        [JsonProperty("Syllidae", Required = Required.AllowNull)]
+        public dynamic Syllidae { get; set; }
+
+        [JsonProperty("ungyved", Required = Required.AllowNull)]
+        public dynamic Ungyved { get; set; }
+
+        [JsonProperty("whirlabout", Required = Required.AllowNull)]
+        public dynamic Whirlabout { get; set; }
+
+        [JsonProperty("woodenware", Required = Required.AllowNull)]
+        public dynamic Woodenware { get; set; }
+    }
+
+    public partial record FagginglyClass
+    {
+        [JsonProperty("abranchian", Required = Required.AllowNull)]
+        public dynamic Abranchian { get; set; }
+
+        [JsonProperty("aculeiform", Required = Required.AllowNull)]
+        public dynamic Aculeiform { get; set; }
+
+        [JsonProperty("adiaphoristic", Required = Required.AllowNull)]
+        public dynamic Adiaphoristic { get; set; }
+
+        [JsonProperty("adoptionism", Required = Required.AllowNull)]
+        public dynamic Adoptionism { get; set; }
+
+        [JsonProperty("Anglic", Required = Required.AllowNull)]
+        public dynamic Anglic { get; set; }
+
+        [JsonProperty("antrotomy", Required = Required.AllowNull)]
+        public dynamic Antrotomy { get; set; }
+
+        [JsonProperty("coerciveness", Required = Required.AllowNull)]
+        public dynamic Coerciveness { get; set; }
+
+        [JsonProperty("decorist", Required = Required.AllowNull)]
+        public dynamic Decorist { get; set; }
+
+        [JsonProperty("duckhood", Required = Required.AllowNull)]
+        public dynamic Duckhood { get; set; }
+
+        [JsonProperty("Heteromeri", Required = Required.AllowNull)]
+        public dynamic Heteromeri { get; set; }
+
+        [JsonProperty("hypochnose", Required = Required.AllowNull)]
+        public dynamic Hypochnose { get; set; }
+
+        [JsonProperty("lochage", Required = Required.AllowNull)]
+        public dynamic Lochage { get; set; }
+
+        [JsonProperty("melee", Required = Required.AllowNull)]
+        public dynamic Melee { get; set; }
+
+        [JsonProperty("nonconformitant", Required = Required.AllowNull)]
+        public dynamic Nonconformitant { get; set; }
+
+        [JsonProperty("Poinsettia", Required = Required.AllowNull)]
+        public dynamic Poinsettia { get; set; }
+
+        [JsonProperty("putatively", Required = Required.AllowNull)]
+        public dynamic Putatively { get; set; }
+
+        [JsonProperty("semivolatile", Required = Required.AllowNull)]
+        public dynamic Semivolatile { get; set; }
+
+        [JsonProperty("soleas", Required = Required.AllowNull)]
+        public dynamic Soleas { get; set; }
+
+        [JsonProperty("unfastenable", Required = Required.AllowNull)]
+        public dynamic Unfastenable { get; set; }
+
+        [JsonProperty("unmillinered", Required = Required.AllowNull)]
+        public dynamic Unmillinered { get; set; }
+    }
+
+    public partial record FenkClass
+    {
+        [JsonProperty("apoise", Required = Required.AllowNull)]
+        public dynamic Apoise { get; set; }
+
+        [JsonProperty("astronomize", Required = Required.AllowNull)]
+        public dynamic Astronomize { get; set; }
+
+        [JsonProperty("cockhorse", Required = Required.AllowNull)]
+        public dynamic Cockhorse { get; set; }
+
+        [JsonProperty("copular", Required = Required.AllowNull)]
+        public dynamic Copular { get; set; }
+
+        [JsonProperty("Dagomba", Required = Required.AllowNull)]
+        public dynamic Dagomba { get; set; }
+
+        [JsonProperty("draffy", Required = Required.AllowNull)]
+        public dynamic Draffy { get; set; }
+
+        [JsonProperty("foreigner", Required = Required.AllowNull)]
+        public dynamic Foreigner { get; set; }
+
+        [JsonProperty("Guyandot", Required = Required.AllowNull)]
+        public dynamic Guyandot { get; set; }
+
+        [JsonProperty("neurogliosis", Required = Required.AllowNull)]
+        public dynamic Neurogliosis { get; set; }
+
+        [JsonProperty("osmious", Required = Required.AllowNull)]
+        public dynamic Osmious { get; set; }
+
+        [JsonProperty("palpitate", Required = Required.AllowNull)]
+        public dynamic Palpitate { get; set; }
+
+        [JsonProperty("rebukeable", Required = Required.AllowNull)]
+        public dynamic Rebukeable { get; set; }
+
+        [JsonProperty("Reinwardtia", Required = Required.AllowNull)]
+        public dynamic Reinwardtia { get; set; }
+
+        [JsonProperty("reservatory", Required = Required.AllowNull)]
+        public dynamic Reservatory { get; set; }
+
+        [JsonProperty("scalt", Required = Required.AllowNull)]
+        public dynamic Scalt { get; set; }
+
+        [JsonProperty("scripturalize", Required = Required.AllowNull)]
+        public dynamic Scripturalize { get; set; }
+
+        [JsonProperty("tintometer", Required = Required.AllowNull)]
+        public dynamic Tintometer { get; set; }
+
+        [JsonProperty("Tritoness", Required = Required.AllowNull)]
+        public dynamic Tritoness { get; set; }
+
+        [JsonProperty("undergrade", Required = Required.AllowNull)]
+        public dynamic Undergrade { get; set; }
+
+        [JsonProperty("undermountain", Required = Required.AllowNull)]
+        public dynamic Undermountain { get; set; }
+    }
+
+    public partial record FlagmakingClass
+    {
+        [JsonProperty("albarco", Required = Required.AllowNull)]
+        public dynamic Albarco { get; set; }
+
+        [JsonProperty("Bunodonta", Required = Required.AllowNull)]
+        public dynamic Bunodonta { get; set; }
+
+        [JsonProperty("hornify", Required = Required.AllowNull)]
+        public dynamic Hornify { get; set; }
+
+        [JsonProperty("Hydrocorisae", Required = Required.AllowNull)]
+        public dynamic Hydrocorisae { get; set; }
+
+        [JsonProperty("hypoglossus", Required = Required.AllowNull)]
+        public dynamic Hypoglossus { get; set; }
+
+        [JsonProperty("inexpiably", Required = Required.AllowNull)]
+        public dynamic Inexpiably { get; set; }
+
+        [JsonProperty("ingratitude", Required = Required.AllowNull)]
+        public dynamic Ingratitude { get; set; }
+
+        [JsonProperty("ladyfly", Required = Required.AllowNull)]
+        public dynamic Ladyfly { get; set; }
+
+        [JsonProperty("medicament", Required = Required.AllowNull)]
+        public dynamic Medicament { get; set; }
+
+        [JsonProperty("monogrammatic", Required = Required.AllowNull)]
+        public dynamic Monogrammatic { get; set; }
+
+        [JsonProperty("nobbut", Required = Required.AllowNull)]
+        public dynamic Nobbut { get; set; }
+
+        [JsonProperty("Notacanthidae", Required = Required.AllowNull)]
+        public dynamic Notacanthidae { get; set; }
+
+        [JsonProperty("polyplacophore", Required = Required.AllowNull)]
+        public dynamic Polyplacophore { get; set; }
+
+        [JsonProperty("proexercise", Required = Required.AllowNull)]
+        public dynamic Proexercise { get; set; }
+
+        [JsonProperty("protoplast", Required = Required.AllowNull)]
+        public dynamic Protoplast { get; set; }
+
+        [JsonProperty("puzzling", Required = Required.AllowNull)]
+        public dynamic Puzzling { get; set; }
+
+        [JsonProperty("splanchnoskeleton", Required = Required.AllowNull)]
+        public dynamic Splanchnoskeleton { get; set; }
+
+        [JsonProperty("unloveliness", Required = Required.AllowNull)]
+        public dynamic Unloveliness { get; set; }
+
+        [JsonProperty("unquarantined", Required = Required.AllowNull)]
+        public dynamic Unquarantined { get; set; }
+
+        [JsonProperty("unrenounceable", Required = Required.AllowNull)]
+        public dynamic Unrenounceable { get; set; }
+    }
+
+    public partial record HemocoeleClass
+    {
+        [JsonProperty("acrogamy")]
+        public dynamic? Acrogamy { get; set; }
+
+        [JsonProperty("amelification")]
+        public dynamic? Amelification { get; set; }
+
+        [JsonProperty("autobiographic")]
+        public dynamic? Autobiographic { get; set; }
+
+        [JsonProperty("berat")]
+        public dynamic? Berat { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("disproportionably")]
+        public dynamic? Disproportionably { get; set; }
+
+        [JsonProperty("erythrite")]
+        public dynamic? Erythrite { get; set; }
+
+        [JsonProperty("graphic")]
+        public dynamic? Graphic { get; set; }
+
+        [JsonProperty("hepatological")]
+        public dynamic? Hepatological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("incommensurably")]
+        public dynamic? Incommensurably { get; set; }
+
+        [JsonProperty("misaffirm")]
+        public dynamic? Misaffirm { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("pocketbook")]
+        public dynamic? Pocketbook { get; set; }
+
+        [JsonProperty("sclerometric")]
+        public dynamic? Sclerometric { get; set; }
+
+        [JsonProperty("stambouline")]
+        public dynamic? Stambouline { get; set; }
+
+        [JsonProperty("stickpin")]
+        public dynamic? Stickpin { get; set; }
+
+        [JsonProperty("tubulure")]
+        public dynamic? Tubulure { get; set; }
+
+        [JsonProperty("undelated")]
+        public dynamic? Undelated { get; set; }
+
+        [JsonProperty("unsalt")]
+        public dynamic? Unsalt { get; set; }
+
+        [JsonProperty("untutelar")]
+        public dynamic? Untutelar { get; set; }
+
+        [JsonProperty("vagrant")]
+        public dynamic? Vagrant { get; set; }
+
+        [JsonProperty("Walt")]
+        public dynamic? Walt { get; set; }
+    }
+
+    public partial record Interacinar
+    {
+        [JsonProperty("assapan", Required = Required.Always)]
+        public double Assapan { get; set; }
+
+        [JsonProperty("benefactorship", Required = Required.Always)]
+        public bool Benefactorship { get; set; }
+
+        [JsonProperty("triseriatim", Required = Required.Always)]
+        public string Triseriatim { get; set; }
+
+        [JsonProperty("tubbing", Required = Required.Always)]
+        public long Tubbing { get; set; }
+
+        [JsonProperty("untrimmed", Required = Required.AllowNull)]
+        public dynamic Untrimmed { get; set; }
+    }
+
+    public partial struct CerographElement
+    {
+        public CerographClass? CerographClass;
+        public string? String;
+
+        public static implicit operator CerographElement(CerographClass CerographClass) => new CerographElement { CerographClass = CerographClass };
+        public static implicit operator CerographElement(string String) => new CerographElement { String = String };
+        public bool IsNull => CerographClass == null && String == null;
+    }
+
+    public partial struct ChemotherapeuticElement
+    {
+        public ChemotherapeuticClass? ChemotherapeuticClass;
+        public long? Integer;
+
+        public static implicit operator ChemotherapeuticElement(ChemotherapeuticClass ChemotherapeuticClass) => new ChemotherapeuticElement { ChemotherapeuticClass = ChemotherapeuticClass };
+        public static implicit operator ChemotherapeuticElement(long Integer) => new ChemotherapeuticElement { Integer = Integer };
+    }
+
+    public partial struct CimeliaElement
+    {
+        public CimeliaClass? CimeliaClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator CimeliaElement(CimeliaClass CimeliaClass) => new CimeliaElement { CimeliaClass = CimeliaClass };
+        public static implicit operator CimeliaElement(long[] IntegerArray) => new CimeliaElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Clinodome
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Clinodome(double Double) => new Clinodome { Double = Double };
+        public static implicit operator Clinodome(string String) => new Clinodome { String = String };
+    }
+
+    public partial struct CoadjustElement
+    {
+        public CoadjustClass? CoadjustClass;
+        public double? Double;
+
+        public static implicit operator CoadjustElement(CoadjustClass CoadjustClass) => new CoadjustElement { CoadjustClass = CoadjustClass };
+        public static implicit operator CoadjustElement(double Double) => new CoadjustElement { Double = Double };
+    }
+
+    public partial struct Consilience
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Consilience(double Double) => new Consilience { Double = Double };
+        public static implicit operator Consilience(Dictionary<string, long> IntegerMap) => new Consilience { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Constructor
+    {
+        public bool? Bool;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Constructor(bool Bool) => new Constructor { Bool = Bool };
+        public static implicit operator Constructor(Dictionary<string, long?> UnionMap) => new Constructor { UnionMap = UnionMap };
+    }
+
+    public partial struct Continuative
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Continuative(Dictionary<string, long> IntegerMap) => new Continuative { IntegerMap = IntegerMap };
+        public static implicit operator Continuative(string String) => new Continuative { String = String };
+    }
+
+    public partial struct CredulityElement
+    {
+        public CredulityClass? CredulityClass;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator CredulityElement(CredulityClass CredulityClass) => new CredulityElement { CredulityClass = CredulityClass };
+        public static implicit operator CredulityElement(long Integer) => new CredulityElement { Integer = Integer };
+        public static implicit operator CredulityElement(string String) => new CredulityElement { String = String };
+    }
+
+    public partial struct Creviced
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Creviced(bool Bool) => new Creviced { Bool = Bool };
+        public static implicit operator Creviced(Dictionary<string, long> IntegerMap) => new Creviced { IntegerMap = IntegerMap };
+        public static implicit operator Creviced(string String) => new Creviced { String = String };
+    }
+
+    public partial struct DeruralizeElement
+    {
+        public bool? Bool;
+        public DeruralizeClass? DeruralizeClass;
+        public dynamic[]? NullArray;
+
+        public static implicit operator DeruralizeElement(bool Bool) => new DeruralizeElement { Bool = Bool };
+        public static implicit operator DeruralizeElement(DeruralizeClass DeruralizeClass) => new DeruralizeElement { DeruralizeClass = DeruralizeClass };
+        public static implicit operator DeruralizeElement(dynamic[] NullArray) => new DeruralizeElement { NullArray = NullArray };
+    }
+
+    public partial struct DiaereseElement
+    {
+        public bool? Bool;
+        public DiaereseClass? DiaereseClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator DiaereseElement(bool Bool) => new DiaereseElement { Bool = Bool };
+        public static implicit operator DiaereseElement(DiaereseClass DiaereseClass) => new DiaereseElement { DiaereseClass = DiaereseClass };
+        public static implicit operator DiaereseElement(long[] IntegerArray) => new DiaereseElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Downstroke
+    {
+        public bool? Bool;
+        public dynamic[]? NullArray;
+        public string? String;
+
+        public static implicit operator Downstroke(bool Bool) => new Downstroke { Bool = Bool };
+        public static implicit operator Downstroke(dynamic[] NullArray) => new Downstroke { NullArray = NullArray };
+        public static implicit operator Downstroke(string String) => new Downstroke { String = String };
+    }
+
+    public partial struct Eleutheromania
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Eleutheromania(double Double) => new Eleutheromania { Double = Double };
+        public static implicit operator Eleutheromania(Dictionary<string, long> IntegerMap) => new Eleutheromania { IntegerMap = IntegerMap };
+        public static implicit operator Eleutheromania(string String) => new Eleutheromania { String = String };
+    }
+
+    public partial struct Entomoid
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+
+        public static implicit operator Entomoid(CimeliaClass CimeliaClass) => new Entomoid { CimeliaClass = CimeliaClass };
+        public static implicit operator Entomoid(long Integer) => new Entomoid { Integer = Integer };
+    }
+
+    public partial struct Epipaleolithic
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Epipaleolithic(double Double) => new Epipaleolithic { Double = Double };
+        public static implicit operator Epipaleolithic(long[] IntegerArray) => new Epipaleolithic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Expropriable
+    {
+        public CimeliaClass? CimeliaClass;
+        public double? Double;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Expropriable(CimeliaClass CimeliaClass) => new Expropriable { CimeliaClass = CimeliaClass };
+        public static implicit operator Expropriable(double Double) => new Expropriable { Double = Double };
+        public static implicit operator Expropriable(dynamic[] NullArray) => new Expropriable { NullArray = NullArray };
+    }
+
+    public partial struct FagginglyElement
+    {
+        public double? Double;
+        public FagginglyClass? FagginglyClass;
+
+        public static implicit operator FagginglyElement(double Double) => new FagginglyElement { Double = Double };
+        public static implicit operator FagginglyElement(FagginglyClass FagginglyClass) => new FagginglyElement { FagginglyClass = FagginglyClass };
+    }
+
+    public partial struct FenkElement
+    {
+        public FenkClass? FenkClass;
+        public string? String;
+
+        public static implicit operator FenkElement(FenkClass FenkClass) => new FenkElement { FenkClass = FenkClass };
+        public static implicit operator FenkElement(string String) => new FenkElement { String = String };
+    }
+
+    public partial struct FlagmakingElement
+    {
+        public bool? Bool;
+        public double? Double;
+        public FlagmakingClass? FlagmakingClass;
+
+        public static implicit operator FlagmakingElement(bool Bool) => new FlagmakingElement { Bool = Bool };
+        public static implicit operator FlagmakingElement(double Double) => new FlagmakingElement { Double = Double };
+        public static implicit operator FlagmakingElement(FlagmakingClass FlagmakingClass) => new FlagmakingElement { FlagmakingClass = FlagmakingClass };
+    }
+
+    public partial struct Fluorometer
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Fluorometer(long Integer) => new Fluorometer { Integer = Integer };
+        public static implicit operator Fluorometer(string String) => new Fluorometer { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial struct Fuzzy
+    {
+        public long? Integer;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Fuzzy(long Integer) => new Fuzzy { Integer = Integer };
+        public static implicit operator Fuzzy(Dictionary<string, long?> UnionMap) => new Fuzzy { UnionMap = UnionMap };
+    }
+
+    public partial struct Gardenward
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Gardenward(bool Bool) => new Gardenward { Bool = Bool };
+        public static implicit operator Gardenward(long[] IntegerArray) => new Gardenward { IntegerArray = IntegerArray };
+        public static implicit operator Gardenward(string String) => new Gardenward { String = String };
+    }
+
+    public partial struct Generalissimo
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Generalissimo(bool Bool) => new Generalissimo { Bool = Bool };
+        public static implicit operator Generalissimo(Dictionary<string, long> IntegerMap) => new Generalissimo { IntegerMap = IntegerMap };
+        public bool IsNull => Bool == null && IntegerMap == null;
+    }
+
+    public partial struct Hemicrystalline
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hemicrystalline(CimeliaClass CimeliaClass) => new Hemicrystalline { CimeliaClass = CimeliaClass };
+        public static implicit operator Hemicrystalline(string String) => new Hemicrystalline { String = String };
+    }
+
+    public partial struct HemocoeleElement
+    {
+        public HemocoeleClass? HemocoeleClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator HemocoeleElement(HemocoeleClass HemocoeleClass) => new HemocoeleElement { HemocoeleClass = HemocoeleClass };
+        public static implicit operator HemocoeleElement(long[] IntegerArray) => new HemocoeleElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Hoister
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hoister(CimeliaClass CimeliaClass) => new Hoister { CimeliaClass = CimeliaClass };
+        public static implicit operator Hoister(string String) => new Hoister { String = String };
+        public bool IsNull => CimeliaClass == null && String == null;
+    }
+
+    public partial struct Hyperpiesi
+    {
+        public CimeliaClass? CimeliaClass;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Hyperpiesi(CimeliaClass CimeliaClass) => new Hyperpiesi { CimeliaClass = CimeliaClass };
+        public static implicit operator Hyperpiesi(dynamic[] NullArray) => new Hyperpiesi { NullArray = NullArray };
+        public bool IsNull => NullArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Hyppish
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Hyppish(bool Bool) => new Hyppish { Bool = Bool };
+        public static implicit operator Hyppish(string String) => new Hyppish { String = String };
+        public bool IsNull => Bool == null && String == null;
+    }
+
+    public partial struct Idealizer
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Idealizer(CimeliaClass CimeliaClass) => new Idealizer { CimeliaClass = CimeliaClass };
+        public static implicit operator Idealizer(long Integer) => new Idealizer { Integer = Integer };
+        public static implicit operator Idealizer(dynamic[] NullArray) => new Idealizer { NullArray = NullArray };
+    }
+
+    public partial struct Incrustator
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Incrustator(long Integer) => new Incrustator { Integer = Integer };
+        public static implicit operator Incrustator(long[] IntegerArray) => new Incrustator { IntegerArray = IntegerArray };
+        public static implicit operator Incrustator(string String) => new Incrustator { String = String };
+    }
+
+    public partial struct Intentiveness
+    {
+        public CimeliaClass? CimeliaClass;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Intentiveness(CimeliaClass CimeliaClass) => new Intentiveness { CimeliaClass = CimeliaClass };
+        public static implicit operator Intentiveness(double Double) => new Intentiveness { Double = Double };
+        public static implicit operator Intentiveness(string String) => new Intentiveness { String = String };
+    }
+
+    public partial struct Jacutinga
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Jacutinga(long[] IntegerArray) => new Jacutinga { IntegerArray = IntegerArray };
+        public static implicit operator Jacutinga(Dictionary<string, long?> UnionMap) => new Jacutinga { UnionMap = UnionMap };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CerographElementConverter.Singleton,
+                ChemotherapeuticElementConverter.Singleton,
+                CimeliaElementConverter.Singleton,
+                ClinodomeConverter.Singleton,
+                CoadjustElementConverter.Singleton,
+                ConsilienceConverter.Singleton,
+                ConstructorConverter.Singleton,
+                ContinuativeConverter.Singleton,
+                CredulityElementConverter.Singleton,
+                CrevicedConverter.Singleton,
+                DeruralizeElementConverter.Singleton,
+                DiaereseElementConverter.Singleton,
+                DownstrokeConverter.Singleton,
+                EleutheromaniaConverter.Singleton,
+                EntomoidConverter.Singleton,
+                EpipaleolithicConverter.Singleton,
+                ExpropriableConverter.Singleton,
+                FagginglyElementConverter.Singleton,
+                FenkElementConverter.Singleton,
+                FlagmakingElementConverter.Singleton,
+                FluorometerConverter.Singleton,
+                FuzzyConverter.Singleton,
+                GardenwardConverter.Singleton,
+                GeneralissimoConverter.Singleton,
+                HemicrystallineConverter.Singleton,
+                HemocoeleElementConverter.Singleton,
+                HoisterConverter.Singleton,
+                HyperpiesiConverter.Singleton,
+                HyppishConverter.Singleton,
+                IdealizerConverter.Singleton,
+                IncrustatorConverter.Singleton,
+                IntentivenessConverter.Singleton,
+                JacutingaConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CerographElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CerographElement) || t == typeof(CerographElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CerographElement { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CerographElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CerographClass>(reader);
+                    return new CerographElement { CerographClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CerographElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CerographElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CerographClass != null)
+            {
+                serializer.Serialize(writer, value.CerographClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CerographElement");
+        }
+
+        public static readonly CerographElementConverter Singleton = new CerographElementConverter();
+    }
+
+    internal class ChemotherapeuticElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChemotherapeuticElement) || t == typeof(ChemotherapeuticElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new ChemotherapeuticElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChemotherapeuticClass>(reader);
+                    return new ChemotherapeuticElement { ChemotherapeuticClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChemotherapeuticElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChemotherapeuticElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.ChemotherapeuticClass != null)
+            {
+                serializer.Serialize(writer, value.ChemotherapeuticClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChemotherapeuticElement");
+        }
+
+        public static readonly ChemotherapeuticElementConverter Singleton = new ChemotherapeuticElementConverter();
+    }
+
+    internal class CimeliaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CimeliaElement) || t == typeof(CimeliaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CimeliaElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new CimeliaElement { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new CimeliaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type CimeliaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CimeliaElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CimeliaElement");
+        }
+
+        public static readonly CimeliaElementConverter Singleton = new CimeliaElementConverter();
+    }
+
+    internal class ClinodomeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Clinodome) || t == typeof(Clinodome?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Clinodome { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Clinodome { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Clinodome");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Clinodome)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Clinodome");
+        }
+
+        public static readonly ClinodomeConverter Singleton = new ClinodomeConverter();
+    }
+
+    internal class CoadjustElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CoadjustElement) || t == typeof(CoadjustElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new CoadjustElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CoadjustClass>(reader);
+                    return new CoadjustElement { CoadjustClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CoadjustElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CoadjustElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.CoadjustClass != null)
+            {
+                serializer.Serialize(writer, value.CoadjustClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CoadjustElement");
+        }
+
+        public static readonly CoadjustElementConverter Singleton = new CoadjustElementConverter();
+    }
+
+    internal class ConsilienceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Consilience) || t == typeof(Consilience?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Consilience { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Consilience { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Consilience");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Consilience)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Consilience");
+        }
+
+        public static readonly ConsilienceConverter Singleton = new ConsilienceConverter();
+    }
+
+    internal class ConstructorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Constructor) || t == typeof(Constructor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Constructor { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Constructor { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Constructor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Constructor)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Constructor");
+        }
+
+        public static readonly ConstructorConverter Singleton = new ConstructorConverter();
+    }
+
+    internal class ContinuativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Continuative) || t == typeof(Continuative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Continuative { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Continuative { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Continuative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Continuative)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Continuative");
+        }
+
+        public static readonly ContinuativeConverter Singleton = new ContinuativeConverter();
+    }
+
+    internal class CredulityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CredulityElement) || t == typeof(CredulityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new CredulityElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CredulityElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CredulityClass>(reader);
+                    return new CredulityElement { CredulityClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CredulityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CredulityElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CredulityClass != null)
+            {
+                serializer.Serialize(writer, value.CredulityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CredulityElement");
+        }
+
+        public static readonly CredulityElementConverter Singleton = new CredulityElementConverter();
+    }
+
+    internal class CrevicedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Creviced) || t == typeof(Creviced?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Creviced { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Creviced { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Creviced { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Creviced");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Creviced)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Creviced");
+        }
+
+        public static readonly CrevicedConverter Singleton = new CrevicedConverter();
+    }
+
+    internal class DeruralizeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DeruralizeElement) || t == typeof(DeruralizeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DeruralizeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DeruralizeClass>(reader);
+                    return new DeruralizeElement { DeruralizeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new DeruralizeElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DeruralizeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DeruralizeElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.DeruralizeClass != null)
+            {
+                serializer.Serialize(writer, value.DeruralizeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DeruralizeElement");
+        }
+
+        public static readonly DeruralizeElementConverter Singleton = new DeruralizeElementConverter();
+    }
+
+    internal class DiaereseElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiaereseElement) || t == typeof(DiaereseElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DiaereseElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiaereseClass>(reader);
+                    return new DiaereseElement { DiaereseClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiaereseElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiaereseElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiaereseElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiaereseClass != null)
+            {
+                serializer.Serialize(writer, value.DiaereseClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiaereseElement");
+        }
+
+        public static readonly DiaereseElementConverter Singleton = new DiaereseElementConverter();
+    }
+
+    internal class DownstrokeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Downstroke) || t == typeof(Downstroke?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Downstroke { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Downstroke { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Downstroke { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Downstroke");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Downstroke)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Downstroke");
+        }
+
+        public static readonly DownstrokeConverter Singleton = new DownstrokeConverter();
+    }
+
+    internal class EleutheromaniaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eleutheromania) || t == typeof(Eleutheromania?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Eleutheromania { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Eleutheromania { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eleutheromania { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Eleutheromania");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eleutheromania)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eleutheromania");
+        }
+
+        public static readonly EleutheromaniaConverter Singleton = new EleutheromaniaConverter();
+    }
+
+    internal class EntomoidConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Entomoid) || t == typeof(Entomoid?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Entomoid { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Entomoid { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Entomoid");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Entomoid)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Entomoid");
+        }
+
+        public static readonly EntomoidConverter Singleton = new EntomoidConverter();
+    }
+
+    internal class EpipaleolithicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epipaleolithic) || t == typeof(Epipaleolithic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Epipaleolithic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Epipaleolithic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Epipaleolithic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epipaleolithic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epipaleolithic");
+        }
+
+        public static readonly EpipaleolithicConverter Singleton = new EpipaleolithicConverter();
+    }
+
+    internal class ExpropriableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Expropriable) || t == typeof(Expropriable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Expropriable { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Expropriable { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Expropriable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Expropriable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Expropriable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Expropriable");
+        }
+
+        public static readonly ExpropriableConverter Singleton = new ExpropriableConverter();
+    }
+
+    internal class FagginglyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FagginglyElement) || t == typeof(FagginglyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FagginglyElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FagginglyClass>(reader);
+                    return new FagginglyElement { FagginglyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FagginglyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FagginglyElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.FagginglyClass != null)
+            {
+                serializer.Serialize(writer, value.FagginglyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FagginglyElement");
+        }
+
+        public static readonly FagginglyElementConverter Singleton = new FagginglyElementConverter();
+    }
+
+    internal class FenkElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FenkElement) || t == typeof(FenkElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new FenkElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FenkClass>(reader);
+                    return new FenkElement { FenkClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FenkElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FenkElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.FenkClass != null)
+            {
+                serializer.Serialize(writer, value.FenkClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FenkElement");
+        }
+
+        public static readonly FenkElementConverter Singleton = new FenkElementConverter();
+    }
+
+    internal class FlagmakingElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FlagmakingElement) || t == typeof(FlagmakingElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FlagmakingElement { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new FlagmakingElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FlagmakingClass>(reader);
+                    return new FlagmakingElement { FlagmakingClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FlagmakingElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FlagmakingElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.FlagmakingClass != null)
+            {
+                serializer.Serialize(writer, value.FlagmakingClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FlagmakingElement");
+        }
+
+        public static readonly FlagmakingElementConverter Singleton = new FlagmakingElementConverter();
+    }
+
+    internal class FluorometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fluorometer) || t == typeof(Fluorometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Fluorometer { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fluorometer { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Fluorometer { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Fluorometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fluorometer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fluorometer");
+        }
+
+        public static readonly FluorometerConverter Singleton = new FluorometerConverter();
+    }
+
+    internal class FuzzyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fuzzy) || t == typeof(Fuzzy?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fuzzy { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Fuzzy { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Fuzzy");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fuzzy)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fuzzy");
+        }
+
+        public static readonly FuzzyConverter Singleton = new FuzzyConverter();
+    }
+
+    internal class GardenwardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gardenward) || t == typeof(Gardenward?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Gardenward { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Gardenward { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Gardenward { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Gardenward");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Gardenward)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Gardenward");
+        }
+
+        public static readonly GardenwardConverter Singleton = new GardenwardConverter();
+    }
+
+    internal class GeneralissimoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Generalissimo) || t == typeof(Generalissimo?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Generalissimo { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Generalissimo { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Generalissimo { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Generalissimo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Generalissimo)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Generalissimo");
+        }
+
+        public static readonly GeneralissimoConverter Singleton = new GeneralissimoConverter();
+    }
+
+    internal class HemicrystallineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hemicrystalline) || t == typeof(Hemicrystalline?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hemicrystalline { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hemicrystalline { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hemicrystalline");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hemicrystalline)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hemicrystalline");
+        }
+
+        public static readonly HemicrystallineConverter Singleton = new HemicrystallineConverter();
+    }
+
+    internal class HemocoeleElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(HemocoeleElement) || t == typeof(HemocoeleElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<HemocoeleClass>(reader);
+                    return new HemocoeleElement { HemocoeleClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new HemocoeleElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type HemocoeleElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (HemocoeleElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.HemocoeleClass != null)
+            {
+                serializer.Serialize(writer, value.HemocoeleClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type HemocoeleElement");
+        }
+
+        public static readonly HemocoeleElementConverter Singleton = new HemocoeleElementConverter();
+    }
+
+    internal class HoisterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hoister) || t == typeof(Hoister?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hoister { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hoister { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hoister { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hoister");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hoister)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hoister");
+        }
+
+        public static readonly HoisterConverter Singleton = new HoisterConverter();
+    }
+
+    internal class HyperpiesiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyperpiesi) || t == typeof(Hyperpiesi?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyperpiesi { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hyperpiesi { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Hyperpiesi { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyperpiesi");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyperpiesi)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyperpiesi");
+        }
+
+        public static readonly HyperpiesiConverter Singleton = new HyperpiesiConverter();
+    }
+
+    internal class HyppishConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyppish) || t == typeof(Hyppish?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyppish { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Hyppish { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hyppish { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyppish");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyppish)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyppish");
+        }
+
+        public static readonly HyppishConverter Singleton = new HyppishConverter();
+    }
+
+    internal class IdealizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Idealizer) || t == typeof(Idealizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Idealizer { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Idealizer { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Idealizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Idealizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Idealizer)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Idealizer");
+        }
+
+        public static readonly IdealizerConverter Singleton = new IdealizerConverter();
+    }
+
+    internal class IncrustatorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Incrustator) || t == typeof(Incrustator?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Incrustator { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Incrustator { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Incrustator { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Incrustator");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Incrustator)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Incrustator");
+        }
+
+        public static readonly IncrustatorConverter Singleton = new IncrustatorConverter();
+    }
+
+    internal class IntentivenessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Intentiveness) || t == typeof(Intentiveness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Intentiveness { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Intentiveness { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Intentiveness { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Intentiveness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Intentiveness)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Intentiveness");
+        }
+
+        public static readonly IntentivenessConverter Singleton = new IntentivenessConverter();
+    }
+
+    internal class JacutingaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Jacutinga) || t == typeof(Jacutinga?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Jacutinga { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Jacutinga { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Jacutinga");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Jacutinga)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Jacutinga");
+        }
+
+        public static readonly JacutingaConverter Singleton = new JacutingaConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations1.json/array-type-list--e30a0413f432/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations1.json/array-type-list--e30a0413f432/QuickType.cs
new file mode 100644
index 0000000..24ab465
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations1.json/array-type-list--e30a0413f432/QuickType.cs
@@ -0,0 +1,2712 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("centrodesmose", Required = Required.Always)]
+        public string Centrodesmose { get; set; }
+
+        [JsonProperty("cerograph", Required = Required.Always)]
+        public List<CerographElement> Cerograph { get; set; }
+
+        [JsonProperty("chemotherapeutics", Required = Required.Always)]
+        public List<ChemotherapeuticElement> Chemotherapeutics { get; set; }
+
+        [JsonProperty("cimelia", Required = Required.Always)]
+        public List<CimeliaElement> Cimelia { get; set; }
+
+        [JsonProperty("citrated", Required = Required.Always)]
+        public long Citrated { get; set; }
+
+        [JsonProperty("clinodome", Required = Required.Always)]
+        public List<Clinodome> Clinodome { get; set; }
+
+        [JsonProperty("coadjust", Required = Required.Always)]
+        public List<CoadjustElement> Coadjust { get; set; }
+
+        [JsonProperty("consilience", Required = Required.Always)]
+        public List<Consilience> Consilience { get; set; }
+
+        [JsonProperty("constructor", Required = Required.Always)]
+        public List<Constructor> Constructor { get; set; }
+
+        [JsonProperty("continuative", Required = Required.Always)]
+        public List<Continuative> Continuative { get; set; }
+
+        [JsonProperty("credulity", Required = Required.Always)]
+        public List<CredulityElement> Credulity { get; set; }
+
+        [JsonProperty("creviced", Required = Required.Always)]
+        public List<Creviced> Creviced { get; set; }
+
+        [JsonProperty("cubiculum", Required = Required.Always)]
+        public List<List<long?>> Cubiculum { get; set; }
+
+        [JsonProperty("deruralize", Required = Required.Always)]
+        public List<DeruralizeElement> Deruralize { get; set; }
+
+        [JsonProperty("diaereses", Required = Required.Always)]
+        public List<DiaereseElement> Diaereses { get; set; }
+
+        [JsonProperty("dissolution", Required = Required.Always)]
+        public List<List<object>?> Dissolution { get; set; }
+
+        [JsonProperty("downstroke", Required = Required.Always)]
+        public List<Downstroke> Downstroke { get; set; }
+
+        [JsonProperty("electrotautomerism", Required = Required.Always)]
+        public List<double?> Electrotautomerism { get; set; }
+
+        [JsonProperty("eleutheromania", Required = Required.Always)]
+        public List<Eleutheromania> Eleutheromania { get; set; }
+
+        [JsonProperty("encrust", Required = Required.Always)]
+        public Encrust Encrust { get; set; }
+
+        [JsonProperty("entomoid", Required = Required.Always)]
+        public List<Entomoid> Entomoid { get; set; }
+
+        [JsonProperty("epipaleolithic", Required = Required.Always)]
+        public List<Epipaleolithic> Epipaleolithic { get; set; }
+
+        [JsonProperty("expropriable", Required = Required.Always)]
+        public List<Expropriable> Expropriable { get; set; }
+
+        [JsonProperty("faggingly", Required = Required.Always)]
+        public List<FagginglyElement> Faggingly { get; set; }
+
+        [JsonProperty("fenks", Required = Required.Always)]
+        public List<FenkElement> Fenks { get; set; }
+
+        [JsonProperty("flagmaking", Required = Required.Always)]
+        public List<FlagmakingElement> Flagmaking { get; set; }
+
+        [JsonProperty("fluorometer", Required = Required.Always)]
+        public List<Fluorometer> Fluorometer { get; set; }
+
+        [JsonProperty("fulsome", Required = Required.Always)]
+        public List<long?> Fulsome { get; set; }
+
+        [JsonProperty("fuzzy", Required = Required.Always)]
+        public List<Fuzzy> Fuzzy { get; set; }
+
+        [JsonProperty("gardenwards", Required = Required.Always)]
+        public List<Gardenward> Gardenwards { get; set; }
+
+        [JsonProperty("generalissimo", Required = Required.Always)]
+        public List<Generalissimo> Generalissimo { get; set; }
+
+        [JsonProperty("habeas", Required = Required.Always)]
+        public List<Dictionary<string, long>?> Habeas { get; set; }
+
+        [JsonProperty("hemicrystalline", Required = Required.Always)]
+        public List<Hemicrystalline> Hemicrystalline { get; set; }
+
+        [JsonProperty("hemocoele", Required = Required.Always)]
+        public List<HemocoeleElement> Hemocoele { get; set; }
+
+        [JsonProperty("hoister", Required = Required.Always)]
+        public List<Hoister> Hoister { get; set; }
+
+        [JsonProperty("hyperpiesis", Required = Required.Always)]
+        public List<Hyperpiesi> Hyperpiesis { get; set; }
+
+        [JsonProperty("hyppish", Required = Required.Always)]
+        public List<Hyppish> Hyppish { get; set; }
+
+        [JsonProperty("idealizer", Required = Required.Always)]
+        public List<Idealizer> Idealizer { get; set; }
+
+        [JsonProperty("incrustator", Required = Required.Always)]
+        public List<Incrustator> Incrustator { get; set; }
+
+        [JsonProperty("intentiveness", Required = Required.Always)]
+        public List<Intentiveness> Intentiveness { get; set; }
+
+        [JsonProperty("interacinar", Required = Required.Always)]
+        public Interacinar Interacinar { get; set; }
+
+        [JsonProperty("intercorrelation", Required = Required.Always)]
+        public List<List<long>?> Intercorrelation { get; set; }
+
+        [JsonProperty("jacutinga", Required = Required.Always)]
+        public List<Jacutinga> Jacutinga { get; set; }
+    }
+
+    public partial record CerographClass
+    {
+        [JsonProperty("apotropaion", Required = Required.AllowNull)]
+        public object Apotropaion { get; set; }
+
+        [JsonProperty("casuary", Required = Required.AllowNull)]
+        public object Casuary { get; set; }
+
+        [JsonProperty("creaker", Required = Required.AllowNull)]
+        public object Creaker { get; set; }
+
+        [JsonProperty("disqualification", Required = Required.AllowNull)]
+        public object Disqualification { get; set; }
+
+        [JsonProperty("imperatorious", Required = Required.AllowNull)]
+        public object Imperatorious { get; set; }
+
+        [JsonProperty("impermeabilize", Required = Required.AllowNull)]
+        public object Impermeabilize { get; set; }
+
+        [JsonProperty("metastoma", Required = Required.AllowNull)]
+        public object Metastoma { get; set; }
+
+        [JsonProperty("noctidiurnal", Required = Required.AllowNull)]
+        public object Noctidiurnal { get; set; }
+
+        [JsonProperty("nonreserve", Required = Required.AllowNull)]
+        public object Nonreserve { get; set; }
+
+        [JsonProperty("ophthalmotonometry", Required = Required.AllowNull)]
+        public object Ophthalmotonometry { get; set; }
+
+        [JsonProperty("pailful", Required = Required.AllowNull)]
+        public object Pailful { get; set; }
+
+        [JsonProperty("pigfish", Required = Required.AllowNull)]
+        public object Pigfish { get; set; }
+
+        [JsonProperty("pongee", Required = Required.AllowNull)]
+        public object Pongee { get; set; }
+
+        [JsonProperty("prosodical", Required = Required.AllowNull)]
+        public object Prosodical { get; set; }
+
+        [JsonProperty("scrofuloderm", Required = Required.AllowNull)]
+        public object Scrofuloderm { get; set; }
+
+        [JsonProperty("storekeeping", Required = Required.AllowNull)]
+        public object Storekeeping { get; set; }
+
+        [JsonProperty("therologist", Required = Required.AllowNull)]
+        public object Therologist { get; set; }
+
+        [JsonProperty("Tolowa", Required = Required.AllowNull)]
+        public object Tolowa { get; set; }
+
+        [JsonProperty("tradeful", Required = Required.AllowNull)]
+        public object Tradeful { get; set; }
+
+        [JsonProperty("unriveting", Required = Required.AllowNull)]
+        public object Unriveting { get; set; }
+    }
+
+    public partial record ChemotherapeuticClass
+    {
+        [JsonProperty("angioneurotic")]
+        public object? Angioneurotic { get; set; }
+
+        [JsonProperty("availment")]
+        public object? Availment { get; set; }
+
+        [JsonProperty("bladelet")]
+        public object? Bladelet { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("caulis")]
+        public object? Caulis { get; set; }
+
+        [JsonProperty("chalcus")]
+        public object? Chalcus { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enteradenological")]
+        public object? Enteradenological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("imporosity")]
+        public object? Imporosity { get; set; }
+
+        [JsonProperty("insistently")]
+        public object? Insistently { get; set; }
+
+        [JsonProperty("intraparietal")]
+        public object? Intraparietal { get; set; }
+
+        [JsonProperty("ivied")]
+        public object? Ivied { get; set; }
+
+        [JsonProperty("Maureen")]
+        public object? Maureen { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("nostochine")]
+        public object? Nostochine { get; set; }
+
+        [JsonProperty("nutcracker")]
+        public object? Nutcracker { get; set; }
+
+        [JsonProperty("ofttimes")]
+        public object? Ofttimes { get; set; }
+
+        [JsonProperty("phenocryst")]
+        public object? Phenocryst { get; set; }
+
+        [JsonProperty("precoincident")]
+        public object? Precoincident { get; set; }
+
+        [JsonProperty("ramiferous")]
+        public object? Ramiferous { get; set; }
+
+        [JsonProperty("stagmometer")]
+        public object? Stagmometer { get; set; }
+
+        [JsonProperty("tetherball")]
+        public object? Tetherball { get; set; }
+
+        [JsonProperty("unshy")]
+        public object? Unshy { get; set; }
+    }
+
+    public partial record CimeliaClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record CoadjustClass
+    {
+        [JsonProperty("amidosulphonal")]
+        public object? Amidosulphonal { get; set; }
+
+        [JsonProperty("Benny")]
+        public object? Benny { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ensnare")]
+        public object? Ensnare { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hybridizer")]
+        public object? Hybridizer { get; set; }
+
+        [JsonProperty("leastwise")]
+        public object? Leastwise { get; set; }
+
+        [JsonProperty("lof")]
+        public object? Lof { get; set; }
+
+        [JsonProperty("monkhood")]
+        public object? Monkhood { get; set; }
+
+        [JsonProperty("Netherlandish")]
+        public object? Netherlandish { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("peonism")]
+        public object? Peonism { get; set; }
+
+        [JsonProperty("Phonelescope")]
+        public object? Phonelescope { get; set; }
+
+        [JsonProperty("porphyrogeniture")]
+        public object? Porphyrogeniture { get; set; }
+
+        [JsonProperty("preindemnify")]
+        public object? Preindemnify { get; set; }
+
+        [JsonProperty("rosal")]
+        public object? Rosal { get; set; }
+
+        [JsonProperty("scalenous")]
+        public object? Scalenous { get; set; }
+
+        [JsonProperty("scopine")]
+        public object? Scopine { get; set; }
+
+        [JsonProperty("Sedaceae")]
+        public object? Sedaceae { get; set; }
+
+        [JsonProperty("suberinize")]
+        public object? Suberinize { get; set; }
+
+        [JsonProperty("symbiot")]
+        public object? Symbiot { get; set; }
+
+        [JsonProperty("tablefellow")]
+        public object? Tablefellow { get; set; }
+
+        [JsonProperty("unchargeable")]
+        public object? Unchargeable { get; set; }
+    }
+
+    public partial record CredulityClass
+    {
+        [JsonProperty("ammonolytic", Required = Required.AllowNull)]
+        public object Ammonolytic { get; set; }
+
+        [JsonProperty("bushmaster", Required = Required.AllowNull)]
+        public object Bushmaster { get; set; }
+
+        [JsonProperty("considering", Required = Required.AllowNull)]
+        public object Considering { get; set; }
+
+        [JsonProperty("consuetudinary", Required = Required.AllowNull)]
+        public object Consuetudinary { get; set; }
+
+        [JsonProperty("embarras", Required = Required.AllowNull)]
+        public object Embarras { get; set; }
+
+        [JsonProperty("fineness", Required = Required.AllowNull)]
+        public object Fineness { get; set; }
+
+        [JsonProperty("flaithship", Required = Required.AllowNull)]
+        public object Flaithship { get; set; }
+
+        [JsonProperty("Flavia", Required = Required.AllowNull)]
+        public object Flavia { get; set; }
+
+        [JsonProperty("gruffly", Required = Required.AllowNull)]
+        public object Gruffly { get; set; }
+
+        [JsonProperty("Hedychium", Required = Required.AllowNull)]
+        public object Hedychium { get; set; }
+
+        [JsonProperty("leadwort", Required = Required.AllowNull)]
+        public object Leadwort { get; set; }
+
+        [JsonProperty("overseriously", Required = Required.AllowNull)]
+        public object Overseriously { get; set; }
+
+        [JsonProperty("parabola", Required = Required.AllowNull)]
+        public object Parabola { get; set; }
+
+        [JsonProperty("pectinatodenticulate", Required = Required.AllowNull)]
+        public object Pectinatodenticulate { get; set; }
+
+        [JsonProperty("Popean", Required = Required.AllowNull)]
+        public object Popean { get; set; }
+
+        [JsonProperty("pornocrat", Required = Required.AllowNull)]
+        public object Pornocrat { get; set; }
+
+        [JsonProperty("quadrisect", Required = Required.AllowNull)]
+        public object Quadrisect { get; set; }
+
+        [JsonProperty("seriality", Required = Required.AllowNull)]
+        public object Seriality { get; set; }
+
+        [JsonProperty("vamphorn", Required = Required.AllowNull)]
+        public object Vamphorn { get; set; }
+
+        [JsonProperty("wharp", Required = Required.AllowNull)]
+        public object Wharp { get; set; }
+    }
+
+    public partial record DeruralizeClass
+    {
+        [JsonProperty("bockerel", Required = Required.AllowNull)]
+        public object Bockerel { get; set; }
+
+        [JsonProperty("boulder", Required = Required.AllowNull)]
+        public object Boulder { get; set; }
+
+        [JsonProperty("churrus", Required = Required.AllowNull)]
+        public object Churrus { get; set; }
+
+        [JsonProperty("counterdigged", Required = Required.AllowNull)]
+        public object Counterdigged { get; set; }
+
+        [JsonProperty("dialogite", Required = Required.AllowNull)]
+        public object Dialogite { get; set; }
+
+        [JsonProperty("digenic", Required = Required.AllowNull)]
+        public object Digenic { get; set; }
+
+        [JsonProperty("dunbird", Required = Required.AllowNull)]
+        public object Dunbird { get; set; }
+
+        [JsonProperty("ergatogyne", Required = Required.AllowNull)]
+        public object Ergatogyne { get; set; }
+
+        [JsonProperty("fiendful", Required = Required.AllowNull)]
+        public object Fiendful { get; set; }
+
+        [JsonProperty("jackrod", Required = Required.AllowNull)]
+        public object Jackrod { get; set; }
+
+        [JsonProperty("Jehovistic", Required = Required.AllowNull)]
+        public object Jehovistic { get; set; }
+
+        [JsonProperty("Paninean", Required = Required.AllowNull)]
+        public object Paninean { get; set; }
+
+        [JsonProperty("panther", Required = Required.AllowNull)]
+        public object Panther { get; set; }
+
+        [JsonProperty("placentigerous", Required = Required.AllowNull)]
+        public object Placentigerous { get; set; }
+
+        [JsonProperty("Romney", Required = Required.AllowNull)]
+        public object Romney { get; set; }
+
+        [JsonProperty("sparm", Required = Required.AllowNull)]
+        public object Sparm { get; set; }
+
+        [JsonProperty("tocsin", Required = Required.AllowNull)]
+        public object Tocsin { get; set; }
+
+        [JsonProperty("unnicked", Required = Required.AllowNull)]
+        public object Unnicked { get; set; }
+
+        [JsonProperty("unstavable", Required = Required.AllowNull)]
+        public object Unstavable { get; set; }
+
+        [JsonProperty("windfirm", Required = Required.AllowNull)]
+        public object Windfirm { get; set; }
+    }
+
+    public partial record DiaereseClass
+    {
+        [JsonProperty("Amoreuxia", Required = Required.AllowNull)]
+        public object Amoreuxia { get; set; }
+
+        [JsonProperty("ani", Required = Required.AllowNull)]
+        public object Ani { get; set; }
+
+        [JsonProperty("bernicle", Required = Required.AllowNull)]
+        public object Bernicle { get; set; }
+
+        [JsonProperty("blackwasher", Required = Required.AllowNull)]
+        public object Blackwasher { get; set; }
+
+        [JsonProperty("blowhard", Required = Required.AllowNull)]
+        public object Blowhard { get; set; }
+
+        [JsonProperty("broma", Required = Required.AllowNull)]
+        public object Broma { get; set; }
+
+        [JsonProperty("closecross", Required = Required.AllowNull)]
+        public object Closecross { get; set; }
+
+        [JsonProperty("congregationalism", Required = Required.AllowNull)]
+        public object Congregationalism { get; set; }
+
+        [JsonProperty("grayly", Required = Required.AllowNull)]
+        public object Grayly { get; set; }
+
+        [JsonProperty("historically", Required = Required.AllowNull)]
+        public object Historically { get; set; }
+
+        [JsonProperty("hoast", Required = Required.AllowNull)]
+        public object Hoast { get; set; }
+
+        [JsonProperty("irretentive", Required = Required.AllowNull)]
+        public object Irretentive { get; set; }
+
+        [JsonProperty("parcener", Required = Required.AllowNull)]
+        public object Parcener { get; set; }
+
+        [JsonProperty("pedder", Required = Required.AllowNull)]
+        public object Pedder { get; set; }
+
+        [JsonProperty("pseudoanatomic", Required = Required.AllowNull)]
+        public object Pseudoanatomic { get; set; }
+
+        [JsonProperty("rhizocarpian", Required = Required.AllowNull)]
+        public object Rhizocarpian { get; set; }
+
+        [JsonProperty("samel", Required = Required.AllowNull)]
+        public object Samel { get; set; }
+
+        [JsonProperty("silker", Required = Required.AllowNull)]
+        public object Silker { get; set; }
+
+        [JsonProperty("subdentated", Required = Required.AllowNull)]
+        public object Subdentated { get; set; }
+
+        [JsonProperty("subobscure", Required = Required.AllowNull)]
+        public object Subobscure { get; set; }
+    }
+
+    public partial record Encrust
+    {
+        [JsonProperty("comradely", Required = Required.AllowNull)]
+        public object Comradely { get; set; }
+
+        [JsonProperty("diacanthous", Required = Required.AllowNull)]
+        public object Diacanthous { get; set; }
+
+        [JsonProperty("feminineness", Required = Required.AllowNull)]
+        public object Feminineness { get; set; }
+
+        [JsonProperty("gossamered", Required = Required.AllowNull)]
+        public object Gossamered { get; set; }
+
+        [JsonProperty("Hibernia", Required = Required.AllowNull)]
+        public object Hibernia { get; set; }
+
+        [JsonProperty("Hibiscus", Required = Required.AllowNull)]
+        public object Hibiscus { get; set; }
+
+        [JsonProperty("Lepidosauria", Required = Required.AllowNull)]
+        public object Lepidosauria { get; set; }
+
+        [JsonProperty("lollingly", Required = Required.AllowNull)]
+        public object Lollingly { get; set; }
+
+        [JsonProperty("manager", Required = Required.AllowNull)]
+        public object Manager { get; set; }
+
+        [JsonProperty("mechanic", Required = Required.AllowNull)]
+        public object Mechanic { get; set; }
+
+        [JsonProperty("overminuteness", Required = Required.AllowNull)]
+        public object Overminuteness { get; set; }
+
+        [JsonProperty("papelonne", Required = Required.AllowNull)]
+        public object Papelonne { get; set; }
+
+        [JsonProperty("plebification", Required = Required.AllowNull)]
+        public object Plebification { get; set; }
+
+        [JsonProperty("pugmiller", Required = Required.AllowNull)]
+        public object Pugmiller { get; set; }
+
+        [JsonProperty("recoveror", Required = Required.AllowNull)]
+        public object Recoveror { get; set; }
+
+        [JsonProperty("spermatoblastic", Required = Required.AllowNull)]
+        public object Spermatoblastic { get; set; }
+
+        [JsonProperty("Syllidae", Required = Required.AllowNull)]
+        public object Syllidae { get; set; }
+
+        [JsonProperty("ungyved", Required = Required.AllowNull)]
+        public object Ungyved { get; set; }
+
+        [JsonProperty("whirlabout", Required = Required.AllowNull)]
+        public object Whirlabout { get; set; }
+
+        [JsonProperty("woodenware", Required = Required.AllowNull)]
+        public object Woodenware { get; set; }
+    }
+
+    public partial record FagginglyClass
+    {
+        [JsonProperty("abranchian", Required = Required.AllowNull)]
+        public object Abranchian { get; set; }
+
+        [JsonProperty("aculeiform", Required = Required.AllowNull)]
+        public object Aculeiform { get; set; }
+
+        [JsonProperty("adiaphoristic", Required = Required.AllowNull)]
+        public object Adiaphoristic { get; set; }
+
+        [JsonProperty("adoptionism", Required = Required.AllowNull)]
+        public object Adoptionism { get; set; }
+
+        [JsonProperty("Anglic", Required = Required.AllowNull)]
+        public object Anglic { get; set; }
+
+        [JsonProperty("antrotomy", Required = Required.AllowNull)]
+        public object Antrotomy { get; set; }
+
+        [JsonProperty("coerciveness", Required = Required.AllowNull)]
+        public object Coerciveness { get; set; }
+
+        [JsonProperty("decorist", Required = Required.AllowNull)]
+        public object Decorist { get; set; }
+
+        [JsonProperty("duckhood", Required = Required.AllowNull)]
+        public object Duckhood { get; set; }
+
+        [JsonProperty("Heteromeri", Required = Required.AllowNull)]
+        public object Heteromeri { get; set; }
+
+        [JsonProperty("hypochnose", Required = Required.AllowNull)]
+        public object Hypochnose { get; set; }
+
+        [JsonProperty("lochage", Required = Required.AllowNull)]
+        public object Lochage { get; set; }
+
+        [JsonProperty("melee", Required = Required.AllowNull)]
+        public object Melee { get; set; }
+
+        [JsonProperty("nonconformitant", Required = Required.AllowNull)]
+        public object Nonconformitant { get; set; }
+
+        [JsonProperty("Poinsettia", Required = Required.AllowNull)]
+        public object Poinsettia { get; set; }
+
+        [JsonProperty("putatively", Required = Required.AllowNull)]
+        public object Putatively { get; set; }
+
+        [JsonProperty("semivolatile", Required = Required.AllowNull)]
+        public object Semivolatile { get; set; }
+
+        [JsonProperty("soleas", Required = Required.AllowNull)]
+        public object Soleas { get; set; }
+
+        [JsonProperty("unfastenable", Required = Required.AllowNull)]
+        public object Unfastenable { get; set; }
+
+        [JsonProperty("unmillinered", Required = Required.AllowNull)]
+        public object Unmillinered { get; set; }
+    }
+
+    public partial record FenkClass
+    {
+        [JsonProperty("apoise", Required = Required.AllowNull)]
+        public object Apoise { get; set; }
+
+        [JsonProperty("astronomize", Required = Required.AllowNull)]
+        public object Astronomize { get; set; }
+
+        [JsonProperty("cockhorse", Required = Required.AllowNull)]
+        public object Cockhorse { get; set; }
+
+        [JsonProperty("copular", Required = Required.AllowNull)]
+        public object Copular { get; set; }
+
+        [JsonProperty("Dagomba", Required = Required.AllowNull)]
+        public object Dagomba { get; set; }
+
+        [JsonProperty("draffy", Required = Required.AllowNull)]
+        public object Draffy { get; set; }
+
+        [JsonProperty("foreigner", Required = Required.AllowNull)]
+        public object Foreigner { get; set; }
+
+        [JsonProperty("Guyandot", Required = Required.AllowNull)]
+        public object Guyandot { get; set; }
+
+        [JsonProperty("neurogliosis", Required = Required.AllowNull)]
+        public object Neurogliosis { get; set; }
+
+        [JsonProperty("osmious", Required = Required.AllowNull)]
+        public object Osmious { get; set; }
+
+        [JsonProperty("palpitate", Required = Required.AllowNull)]
+        public object Palpitate { get; set; }
+
+        [JsonProperty("rebukeable", Required = Required.AllowNull)]
+        public object Rebukeable { get; set; }
+
+        [JsonProperty("Reinwardtia", Required = Required.AllowNull)]
+        public object Reinwardtia { get; set; }
+
+        [JsonProperty("reservatory", Required = Required.AllowNull)]
+        public object Reservatory { get; set; }
+
+        [JsonProperty("scalt", Required = Required.AllowNull)]
+        public object Scalt { get; set; }
+
+        [JsonProperty("scripturalize", Required = Required.AllowNull)]
+        public object Scripturalize { get; set; }
+
+        [JsonProperty("tintometer", Required = Required.AllowNull)]
+        public object Tintometer { get; set; }
+
+        [JsonProperty("Tritoness", Required = Required.AllowNull)]
+        public object Tritoness { get; set; }
+
+        [JsonProperty("undergrade", Required = Required.AllowNull)]
+        public object Undergrade { get; set; }
+
+        [JsonProperty("undermountain", Required = Required.AllowNull)]
+        public object Undermountain { get; set; }
+    }
+
+    public partial record FlagmakingClass
+    {
+        [JsonProperty("albarco", Required = Required.AllowNull)]
+        public object Albarco { get; set; }
+
+        [JsonProperty("Bunodonta", Required = Required.AllowNull)]
+        public object Bunodonta { get; set; }
+
+        [JsonProperty("hornify", Required = Required.AllowNull)]
+        public object Hornify { get; set; }
+
+        [JsonProperty("Hydrocorisae", Required = Required.AllowNull)]
+        public object Hydrocorisae { get; set; }
+
+        [JsonProperty("hypoglossus", Required = Required.AllowNull)]
+        public object Hypoglossus { get; set; }
+
+        [JsonProperty("inexpiably", Required = Required.AllowNull)]
+        public object Inexpiably { get; set; }
+
+        [JsonProperty("ingratitude", Required = Required.AllowNull)]
+        public object Ingratitude { get; set; }
+
+        [JsonProperty("ladyfly", Required = Required.AllowNull)]
+        public object Ladyfly { get; set; }
+
+        [JsonProperty("medicament", Required = Required.AllowNull)]
+        public object Medicament { get; set; }
+
+        [JsonProperty("monogrammatic", Required = Required.AllowNull)]
+        public object Monogrammatic { get; set; }
+
+        [JsonProperty("nobbut", Required = Required.AllowNull)]
+        public object Nobbut { get; set; }
+
+        [JsonProperty("Notacanthidae", Required = Required.AllowNull)]
+        public object Notacanthidae { get; set; }
+
+        [JsonProperty("polyplacophore", Required = Required.AllowNull)]
+        public object Polyplacophore { get; set; }
+
+        [JsonProperty("proexercise", Required = Required.AllowNull)]
+        public object Proexercise { get; set; }
+
+        [JsonProperty("protoplast", Required = Required.AllowNull)]
+        public object Protoplast { get; set; }
+
+        [JsonProperty("puzzling", Required = Required.AllowNull)]
+        public object Puzzling { get; set; }
+
+        [JsonProperty("splanchnoskeleton", Required = Required.AllowNull)]
+        public object Splanchnoskeleton { get; set; }
+
+        [JsonProperty("unloveliness", Required = Required.AllowNull)]
+        public object Unloveliness { get; set; }
+
+        [JsonProperty("unquarantined", Required = Required.AllowNull)]
+        public object Unquarantined { get; set; }
+
+        [JsonProperty("unrenounceable", Required = Required.AllowNull)]
+        public object Unrenounceable { get; set; }
+    }
+
+    public partial record HemocoeleClass
+    {
+        [JsonProperty("acrogamy")]
+        public object? Acrogamy { get; set; }
+
+        [JsonProperty("amelification")]
+        public object? Amelification { get; set; }
+
+        [JsonProperty("autobiographic")]
+        public object? Autobiographic { get; set; }
+
+        [JsonProperty("berat")]
+        public object? Berat { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("disproportionably")]
+        public object? Disproportionably { get; set; }
+
+        [JsonProperty("erythrite")]
+        public object? Erythrite { get; set; }
+
+        [JsonProperty("graphic")]
+        public object? Graphic { get; set; }
+
+        [JsonProperty("hepatological")]
+        public object? Hepatological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("incommensurably")]
+        public object? Incommensurably { get; set; }
+
+        [JsonProperty("misaffirm")]
+        public object? Misaffirm { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("pocketbook")]
+        public object? Pocketbook { get; set; }
+
+        [JsonProperty("sclerometric")]
+        public object? Sclerometric { get; set; }
+
+        [JsonProperty("stambouline")]
+        public object? Stambouline { get; set; }
+
+        [JsonProperty("stickpin")]
+        public object? Stickpin { get; set; }
+
+        [JsonProperty("tubulure")]
+        public object? Tubulure { get; set; }
+
+        [JsonProperty("undelated")]
+        public object? Undelated { get; set; }
+
+        [JsonProperty("unsalt")]
+        public object? Unsalt { get; set; }
+
+        [JsonProperty("untutelar")]
+        public object? Untutelar { get; set; }
+
+        [JsonProperty("vagrant")]
+        public object? Vagrant { get; set; }
+
+        [JsonProperty("Walt")]
+        public object? Walt { get; set; }
+    }
+
+    public partial record Interacinar
+    {
+        [JsonProperty("assapan", Required = Required.Always)]
+        public double Assapan { get; set; }
+
+        [JsonProperty("benefactorship", Required = Required.Always)]
+        public bool Benefactorship { get; set; }
+
+        [JsonProperty("triseriatim", Required = Required.Always)]
+        public string Triseriatim { get; set; }
+
+        [JsonProperty("tubbing", Required = Required.Always)]
+        public long Tubbing { get; set; }
+
+        [JsonProperty("untrimmed", Required = Required.AllowNull)]
+        public object Untrimmed { get; set; }
+    }
+
+    public partial struct CerographElement
+    {
+        public CerographClass? CerographClass;
+        public string? String;
+
+        public static implicit operator CerographElement(CerographClass CerographClass) => new CerographElement { CerographClass = CerographClass };
+        public static implicit operator CerographElement(string String) => new CerographElement { String = String };
+        public bool IsNull => CerographClass == null && String == null;
+    }
+
+    public partial struct ChemotherapeuticElement
+    {
+        public ChemotherapeuticClass? ChemotherapeuticClass;
+        public long? Integer;
+
+        public static implicit operator ChemotherapeuticElement(ChemotherapeuticClass ChemotherapeuticClass) => new ChemotherapeuticElement { ChemotherapeuticClass = ChemotherapeuticClass };
+        public static implicit operator ChemotherapeuticElement(long Integer) => new ChemotherapeuticElement { Integer = Integer };
+    }
+
+    public partial struct CimeliaElement
+    {
+        public CimeliaClass? CimeliaClass;
+        public List<long>? IntegerArray;
+
+        public static implicit operator CimeliaElement(CimeliaClass CimeliaClass) => new CimeliaElement { CimeliaClass = CimeliaClass };
+        public static implicit operator CimeliaElement(List<long> IntegerArray) => new CimeliaElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Clinodome
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Clinodome(double Double) => new Clinodome { Double = Double };
+        public static implicit operator Clinodome(string String) => new Clinodome { String = String };
+    }
+
+    public partial struct CoadjustElement
+    {
+        public CoadjustClass? CoadjustClass;
+        public double? Double;
+
+        public static implicit operator CoadjustElement(CoadjustClass CoadjustClass) => new CoadjustElement { CoadjustClass = CoadjustClass };
+        public static implicit operator CoadjustElement(double Double) => new CoadjustElement { Double = Double };
+    }
+
+    public partial struct Consilience
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Consilience(double Double) => new Consilience { Double = Double };
+        public static implicit operator Consilience(Dictionary<string, long> IntegerMap) => new Consilience { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Constructor
+    {
+        public bool? Bool;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Constructor(bool Bool) => new Constructor { Bool = Bool };
+        public static implicit operator Constructor(Dictionary<string, long?> UnionMap) => new Constructor { UnionMap = UnionMap };
+    }
+
+    public partial struct Continuative
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Continuative(Dictionary<string, long> IntegerMap) => new Continuative { IntegerMap = IntegerMap };
+        public static implicit operator Continuative(string String) => new Continuative { String = String };
+    }
+
+    public partial struct CredulityElement
+    {
+        public CredulityClass? CredulityClass;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator CredulityElement(CredulityClass CredulityClass) => new CredulityElement { CredulityClass = CredulityClass };
+        public static implicit operator CredulityElement(long Integer) => new CredulityElement { Integer = Integer };
+        public static implicit operator CredulityElement(string String) => new CredulityElement { String = String };
+    }
+
+    public partial struct Creviced
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Creviced(bool Bool) => new Creviced { Bool = Bool };
+        public static implicit operator Creviced(Dictionary<string, long> IntegerMap) => new Creviced { IntegerMap = IntegerMap };
+        public static implicit operator Creviced(string String) => new Creviced { String = String };
+    }
+
+    public partial struct DeruralizeElement
+    {
+        public bool? Bool;
+        public DeruralizeClass? DeruralizeClass;
+        public List<object>? NullArray;
+
+        public static implicit operator DeruralizeElement(bool Bool) => new DeruralizeElement { Bool = Bool };
+        public static implicit operator DeruralizeElement(DeruralizeClass DeruralizeClass) => new DeruralizeElement { DeruralizeClass = DeruralizeClass };
+        public static implicit operator DeruralizeElement(List<object> NullArray) => new DeruralizeElement { NullArray = NullArray };
+    }
+
+    public partial struct DiaereseElement
+    {
+        public bool? Bool;
+        public DiaereseClass? DiaereseClass;
+        public List<long>? IntegerArray;
+
+        public static implicit operator DiaereseElement(bool Bool) => new DiaereseElement { Bool = Bool };
+        public static implicit operator DiaereseElement(DiaereseClass DiaereseClass) => new DiaereseElement { DiaereseClass = DiaereseClass };
+        public static implicit operator DiaereseElement(List<long> IntegerArray) => new DiaereseElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Downstroke
+    {
+        public bool? Bool;
+        public List<object>? NullArray;
+        public string? String;
+
+        public static implicit operator Downstroke(bool Bool) => new Downstroke { Bool = Bool };
+        public static implicit operator Downstroke(List<object> NullArray) => new Downstroke { NullArray = NullArray };
+        public static implicit operator Downstroke(string String) => new Downstroke { String = String };
+    }
+
+    public partial struct Eleutheromania
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Eleutheromania(double Double) => new Eleutheromania { Double = Double };
+        public static implicit operator Eleutheromania(Dictionary<string, long> IntegerMap) => new Eleutheromania { IntegerMap = IntegerMap };
+        public static implicit operator Eleutheromania(string String) => new Eleutheromania { String = String };
+    }
+
+    public partial struct Entomoid
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+
+        public static implicit operator Entomoid(CimeliaClass CimeliaClass) => new Entomoid { CimeliaClass = CimeliaClass };
+        public static implicit operator Entomoid(long Integer) => new Entomoid { Integer = Integer };
+    }
+
+    public partial struct Epipaleolithic
+    {
+        public double? Double;
+        public List<long>? IntegerArray;
+
+        public static implicit operator Epipaleolithic(double Double) => new Epipaleolithic { Double = Double };
+        public static implicit operator Epipaleolithic(List<long> IntegerArray) => new Epipaleolithic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Expropriable
+    {
+        public CimeliaClass? CimeliaClass;
+        public double? Double;
+        public List<object>? NullArray;
+
+        public static implicit operator Expropriable(CimeliaClass CimeliaClass) => new Expropriable { CimeliaClass = CimeliaClass };
+        public static implicit operator Expropriable(double Double) => new Expropriable { Double = Double };
+        public static implicit operator Expropriable(List<object> NullArray) => new Expropriable { NullArray = NullArray };
+    }
+
+    public partial struct FagginglyElement
+    {
+        public double? Double;
+        public FagginglyClass? FagginglyClass;
+
+        public static implicit operator FagginglyElement(double Double) => new FagginglyElement { Double = Double };
+        public static implicit operator FagginglyElement(FagginglyClass FagginglyClass) => new FagginglyElement { FagginglyClass = FagginglyClass };
+    }
+
+    public partial struct FenkElement
+    {
+        public FenkClass? FenkClass;
+        public string? String;
+
+        public static implicit operator FenkElement(FenkClass FenkClass) => new FenkElement { FenkClass = FenkClass };
+        public static implicit operator FenkElement(string String) => new FenkElement { String = String };
+    }
+
+    public partial struct FlagmakingElement
+    {
+        public bool? Bool;
+        public double? Double;
+        public FlagmakingClass? FlagmakingClass;
+
+        public static implicit operator FlagmakingElement(bool Bool) => new FlagmakingElement { Bool = Bool };
+        public static implicit operator FlagmakingElement(double Double) => new FlagmakingElement { Double = Double };
+        public static implicit operator FlagmakingElement(FlagmakingClass FlagmakingClass) => new FlagmakingElement { FlagmakingClass = FlagmakingClass };
+    }
+
+    public partial struct Fluorometer
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Fluorometer(long Integer) => new Fluorometer { Integer = Integer };
+        public static implicit operator Fluorometer(string String) => new Fluorometer { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial struct Fuzzy
+    {
+        public long? Integer;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Fuzzy(long Integer) => new Fuzzy { Integer = Integer };
+        public static implicit operator Fuzzy(Dictionary<string, long?> UnionMap) => new Fuzzy { UnionMap = UnionMap };
+    }
+
+    public partial struct Gardenward
+    {
+        public bool? Bool;
+        public List<long>? IntegerArray;
+        public string? String;
+
+        public static implicit operator Gardenward(bool Bool) => new Gardenward { Bool = Bool };
+        public static implicit operator Gardenward(List<long> IntegerArray) => new Gardenward { IntegerArray = IntegerArray };
+        public static implicit operator Gardenward(string String) => new Gardenward { String = String };
+    }
+
+    public partial struct Generalissimo
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Generalissimo(bool Bool) => new Generalissimo { Bool = Bool };
+        public static implicit operator Generalissimo(Dictionary<string, long> IntegerMap) => new Generalissimo { IntegerMap = IntegerMap };
+        public bool IsNull => Bool == null && IntegerMap == null;
+    }
+
+    public partial struct Hemicrystalline
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hemicrystalline(CimeliaClass CimeliaClass) => new Hemicrystalline { CimeliaClass = CimeliaClass };
+        public static implicit operator Hemicrystalline(string String) => new Hemicrystalline { String = String };
+    }
+
+    public partial struct HemocoeleElement
+    {
+        public HemocoeleClass? HemocoeleClass;
+        public List<long>? IntegerArray;
+
+        public static implicit operator HemocoeleElement(HemocoeleClass HemocoeleClass) => new HemocoeleElement { HemocoeleClass = HemocoeleClass };
+        public static implicit operator HemocoeleElement(List<long> IntegerArray) => new HemocoeleElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Hoister
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hoister(CimeliaClass CimeliaClass) => new Hoister { CimeliaClass = CimeliaClass };
+        public static implicit operator Hoister(string String) => new Hoister { String = String };
+        public bool IsNull => CimeliaClass == null && String == null;
+    }
+
+    public partial struct Hyperpiesi
+    {
+        public CimeliaClass? CimeliaClass;
+        public List<object>? NullArray;
+
+        public static implicit operator Hyperpiesi(CimeliaClass CimeliaClass) => new Hyperpiesi { CimeliaClass = CimeliaClass };
+        public static implicit operator Hyperpiesi(List<object> NullArray) => new Hyperpiesi { NullArray = NullArray };
+        public bool IsNull => NullArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Hyppish
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Hyppish(bool Bool) => new Hyppish { Bool = Bool };
+        public static implicit operator Hyppish(string String) => new Hyppish { String = String };
+        public bool IsNull => Bool == null && String == null;
+    }
+
+    public partial struct Idealizer
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+        public List<object>? NullArray;
+
+        public static implicit operator Idealizer(CimeliaClass CimeliaClass) => new Idealizer { CimeliaClass = CimeliaClass };
+        public static implicit operator Idealizer(long Integer) => new Idealizer { Integer = Integer };
+        public static implicit operator Idealizer(List<object> NullArray) => new Idealizer { NullArray = NullArray };
+    }
+
+    public partial struct Incrustator
+    {
+        public long? Integer;
+        public List<long>? IntegerArray;
+        public string? String;
+
+        public static implicit operator Incrustator(long Integer) => new Incrustator { Integer = Integer };
+        public static implicit operator Incrustator(List<long> IntegerArray) => new Incrustator { IntegerArray = IntegerArray };
+        public static implicit operator Incrustator(string String) => new Incrustator { String = String };
+    }
+
+    public partial struct Intentiveness
+    {
+        public CimeliaClass? CimeliaClass;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Intentiveness(CimeliaClass CimeliaClass) => new Intentiveness { CimeliaClass = CimeliaClass };
+        public static implicit operator Intentiveness(double Double) => new Intentiveness { Double = Double };
+        public static implicit operator Intentiveness(string String) => new Intentiveness { String = String };
+    }
+
+    public partial struct Jacutinga
+    {
+        public List<long>? IntegerArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Jacutinga(List<long> IntegerArray) => new Jacutinga { IntegerArray = IntegerArray };
+        public static implicit operator Jacutinga(Dictionary<string, long?> UnionMap) => new Jacutinga { UnionMap = UnionMap };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CerographElementConverter.Singleton,
+                ChemotherapeuticElementConverter.Singleton,
+                CimeliaElementConverter.Singleton,
+                ClinodomeConverter.Singleton,
+                CoadjustElementConverter.Singleton,
+                ConsilienceConverter.Singleton,
+                ConstructorConverter.Singleton,
+                ContinuativeConverter.Singleton,
+                CredulityElementConverter.Singleton,
+                CrevicedConverter.Singleton,
+                DeruralizeElementConverter.Singleton,
+                DiaereseElementConverter.Singleton,
+                DownstrokeConverter.Singleton,
+                EleutheromaniaConverter.Singleton,
+                EntomoidConverter.Singleton,
+                EpipaleolithicConverter.Singleton,
+                ExpropriableConverter.Singleton,
+                FagginglyElementConverter.Singleton,
+                FenkElementConverter.Singleton,
+                FlagmakingElementConverter.Singleton,
+                FluorometerConverter.Singleton,
+                FuzzyConverter.Singleton,
+                GardenwardConverter.Singleton,
+                GeneralissimoConverter.Singleton,
+                HemicrystallineConverter.Singleton,
+                HemocoeleElementConverter.Singleton,
+                HoisterConverter.Singleton,
+                HyperpiesiConverter.Singleton,
+                HyppishConverter.Singleton,
+                IdealizerConverter.Singleton,
+                IncrustatorConverter.Singleton,
+                IntentivenessConverter.Singleton,
+                JacutingaConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CerographElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CerographElement) || t == typeof(CerographElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CerographElement { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CerographElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CerographClass>(reader);
+                    return new CerographElement { CerographClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CerographElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CerographElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CerographClass != null)
+            {
+                serializer.Serialize(writer, value.CerographClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CerographElement");
+        }
+
+        public static readonly CerographElementConverter Singleton = new CerographElementConverter();
+    }
+
+    internal class ChemotherapeuticElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChemotherapeuticElement) || t == typeof(ChemotherapeuticElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new ChemotherapeuticElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChemotherapeuticClass>(reader);
+                    return new ChemotherapeuticElement { ChemotherapeuticClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChemotherapeuticElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChemotherapeuticElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.ChemotherapeuticClass != null)
+            {
+                serializer.Serialize(writer, value.ChemotherapeuticClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChemotherapeuticElement");
+        }
+
+        public static readonly ChemotherapeuticElementConverter Singleton = new ChemotherapeuticElementConverter();
+    }
+
+    internal class CimeliaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CimeliaElement) || t == typeof(CimeliaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CimeliaElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new CimeliaElement { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new CimeliaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type CimeliaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CimeliaElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CimeliaElement");
+        }
+
+        public static readonly CimeliaElementConverter Singleton = new CimeliaElementConverter();
+    }
+
+    internal class ClinodomeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Clinodome) || t == typeof(Clinodome?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Clinodome { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Clinodome { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Clinodome");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Clinodome)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Clinodome");
+        }
+
+        public static readonly ClinodomeConverter Singleton = new ClinodomeConverter();
+    }
+
+    internal class CoadjustElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CoadjustElement) || t == typeof(CoadjustElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new CoadjustElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CoadjustClass>(reader);
+                    return new CoadjustElement { CoadjustClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CoadjustElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CoadjustElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.CoadjustClass != null)
+            {
+                serializer.Serialize(writer, value.CoadjustClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CoadjustElement");
+        }
+
+        public static readonly CoadjustElementConverter Singleton = new CoadjustElementConverter();
+    }
+
+    internal class ConsilienceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Consilience) || t == typeof(Consilience?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Consilience { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Consilience { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Consilience");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Consilience)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Consilience");
+        }
+
+        public static readonly ConsilienceConverter Singleton = new ConsilienceConverter();
+    }
+
+    internal class ConstructorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Constructor) || t == typeof(Constructor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Constructor { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Constructor { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Constructor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Constructor)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Constructor");
+        }
+
+        public static readonly ConstructorConverter Singleton = new ConstructorConverter();
+    }
+
+    internal class ContinuativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Continuative) || t == typeof(Continuative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Continuative { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Continuative { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Continuative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Continuative)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Continuative");
+        }
+
+        public static readonly ContinuativeConverter Singleton = new ContinuativeConverter();
+    }
+
+    internal class CredulityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CredulityElement) || t == typeof(CredulityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new CredulityElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CredulityElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CredulityClass>(reader);
+                    return new CredulityElement { CredulityClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CredulityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CredulityElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CredulityClass != null)
+            {
+                serializer.Serialize(writer, value.CredulityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CredulityElement");
+        }
+
+        public static readonly CredulityElementConverter Singleton = new CredulityElementConverter();
+    }
+
+    internal class CrevicedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Creviced) || t == typeof(Creviced?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Creviced { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Creviced { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Creviced { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Creviced");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Creviced)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Creviced");
+        }
+
+        public static readonly CrevicedConverter Singleton = new CrevicedConverter();
+    }
+
+    internal class DeruralizeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DeruralizeElement) || t == typeof(DeruralizeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DeruralizeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DeruralizeClass>(reader);
+                    return new DeruralizeElement { DeruralizeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new DeruralizeElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DeruralizeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DeruralizeElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.DeruralizeClass != null)
+            {
+                serializer.Serialize(writer, value.DeruralizeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DeruralizeElement");
+        }
+
+        public static readonly DeruralizeElementConverter Singleton = new DeruralizeElementConverter();
+    }
+
+    internal class DiaereseElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiaereseElement) || t == typeof(DiaereseElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DiaereseElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiaereseClass>(reader);
+                    return new DiaereseElement { DiaereseClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new DiaereseElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiaereseElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiaereseElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiaereseClass != null)
+            {
+                serializer.Serialize(writer, value.DiaereseClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiaereseElement");
+        }
+
+        public static readonly DiaereseElementConverter Singleton = new DiaereseElementConverter();
+    }
+
+    internal class DownstrokeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Downstroke) || t == typeof(Downstroke?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Downstroke { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Downstroke { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Downstroke { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Downstroke");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Downstroke)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Downstroke");
+        }
+
+        public static readonly DownstrokeConverter Singleton = new DownstrokeConverter();
+    }
+
+    internal class EleutheromaniaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eleutheromania) || t == typeof(Eleutheromania?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Eleutheromania { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Eleutheromania { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eleutheromania { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Eleutheromania");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eleutheromania)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eleutheromania");
+        }
+
+        public static readonly EleutheromaniaConverter Singleton = new EleutheromaniaConverter();
+    }
+
+    internal class EntomoidConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Entomoid) || t == typeof(Entomoid?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Entomoid { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Entomoid { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Entomoid");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Entomoid)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Entomoid");
+        }
+
+        public static readonly EntomoidConverter Singleton = new EntomoidConverter();
+    }
+
+    internal class EpipaleolithicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epipaleolithic) || t == typeof(Epipaleolithic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Epipaleolithic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Epipaleolithic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Epipaleolithic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epipaleolithic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epipaleolithic");
+        }
+
+        public static readonly EpipaleolithicConverter Singleton = new EpipaleolithicConverter();
+    }
+
+    internal class ExpropriableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Expropriable) || t == typeof(Expropriable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Expropriable { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Expropriable { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Expropriable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Expropriable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Expropriable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Expropriable");
+        }
+
+        public static readonly ExpropriableConverter Singleton = new ExpropriableConverter();
+    }
+
+    internal class FagginglyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FagginglyElement) || t == typeof(FagginglyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FagginglyElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FagginglyClass>(reader);
+                    return new FagginglyElement { FagginglyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FagginglyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FagginglyElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.FagginglyClass != null)
+            {
+                serializer.Serialize(writer, value.FagginglyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FagginglyElement");
+        }
+
+        public static readonly FagginglyElementConverter Singleton = new FagginglyElementConverter();
+    }
+
+    internal class FenkElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FenkElement) || t == typeof(FenkElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new FenkElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FenkClass>(reader);
+                    return new FenkElement { FenkClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FenkElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FenkElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.FenkClass != null)
+            {
+                serializer.Serialize(writer, value.FenkClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FenkElement");
+        }
+
+        public static readonly FenkElementConverter Singleton = new FenkElementConverter();
+    }
+
+    internal class FlagmakingElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FlagmakingElement) || t == typeof(FlagmakingElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FlagmakingElement { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new FlagmakingElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FlagmakingClass>(reader);
+                    return new FlagmakingElement { FlagmakingClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FlagmakingElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FlagmakingElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.FlagmakingClass != null)
+            {
+                serializer.Serialize(writer, value.FlagmakingClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FlagmakingElement");
+        }
+
+        public static readonly FlagmakingElementConverter Singleton = new FlagmakingElementConverter();
+    }
+
+    internal class FluorometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fluorometer) || t == typeof(Fluorometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Fluorometer { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fluorometer { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Fluorometer { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Fluorometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fluorometer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fluorometer");
+        }
+
+        public static readonly FluorometerConverter Singleton = new FluorometerConverter();
+    }
+
+    internal class FuzzyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fuzzy) || t == typeof(Fuzzy?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fuzzy { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Fuzzy { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Fuzzy");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fuzzy)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fuzzy");
+        }
+
+        public static readonly FuzzyConverter Singleton = new FuzzyConverter();
+    }
+
+    internal class GardenwardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gardenward) || t == typeof(Gardenward?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Gardenward { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Gardenward { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Gardenward { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Gardenward");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Gardenward)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Gardenward");
+        }
+
+        public static readonly GardenwardConverter Singleton = new GardenwardConverter();
+    }
+
+    internal class GeneralissimoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Generalissimo) || t == typeof(Generalissimo?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Generalissimo { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Generalissimo { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Generalissimo { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Generalissimo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Generalissimo)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Generalissimo");
+        }
+
+        public static readonly GeneralissimoConverter Singleton = new GeneralissimoConverter();
+    }
+
+    internal class HemicrystallineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hemicrystalline) || t == typeof(Hemicrystalline?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hemicrystalline { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hemicrystalline { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hemicrystalline");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hemicrystalline)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hemicrystalline");
+        }
+
+        public static readonly HemicrystallineConverter Singleton = new HemicrystallineConverter();
+    }
+
+    internal class HemocoeleElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(HemocoeleElement) || t == typeof(HemocoeleElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<HemocoeleClass>(reader);
+                    return new HemocoeleElement { HemocoeleClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new HemocoeleElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type HemocoeleElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (HemocoeleElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.HemocoeleClass != null)
+            {
+                serializer.Serialize(writer, value.HemocoeleClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type HemocoeleElement");
+        }
+
+        public static readonly HemocoeleElementConverter Singleton = new HemocoeleElementConverter();
+    }
+
+    internal class HoisterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hoister) || t == typeof(Hoister?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hoister { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hoister { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hoister { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hoister");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hoister)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hoister");
+        }
+
+        public static readonly HoisterConverter Singleton = new HoisterConverter();
+    }
+
+    internal class HyperpiesiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyperpiesi) || t == typeof(Hyperpiesi?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyperpiesi { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hyperpiesi { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Hyperpiesi { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyperpiesi");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyperpiesi)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyperpiesi");
+        }
+
+        public static readonly HyperpiesiConverter Singleton = new HyperpiesiConverter();
+    }
+
+    internal class HyppishConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyppish) || t == typeof(Hyppish?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyppish { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Hyppish { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hyppish { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyppish");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyppish)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyppish");
+        }
+
+        public static readonly HyppishConverter Singleton = new HyppishConverter();
+    }
+
+    internal class IdealizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Idealizer) || t == typeof(Idealizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Idealizer { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Idealizer { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Idealizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Idealizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Idealizer)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Idealizer");
+        }
+
+        public static readonly IdealizerConverter Singleton = new IdealizerConverter();
+    }
+
+    internal class IncrustatorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Incrustator) || t == typeof(Incrustator?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Incrustator { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Incrustator { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Incrustator { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Incrustator");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Incrustator)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Incrustator");
+        }
+
+        public static readonly IncrustatorConverter Singleton = new IncrustatorConverter();
+    }
+
+    internal class IntentivenessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Intentiveness) || t == typeof(Intentiveness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Intentiveness { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Intentiveness { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Intentiveness { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Intentiveness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Intentiveness)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Intentiveness");
+        }
+
+        public static readonly IntentivenessConverter Singleton = new IntentivenessConverter();
+    }
+
+    internal class JacutingaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Jacutinga) || t == typeof(Jacutinga?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Jacutinga { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Jacutinga { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Jacutinga");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Jacutinga)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Jacutinga");
+        }
+
+        public static readonly JacutingaConverter Singleton = new JacutingaConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations1.json/csharp-version-5--b2bd4d4221d9/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations1.json/csharp-version-5--b2bd4d4221d9/QuickType.cs
new file mode 100644
index 0000000..18f83e1
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations1.json/csharp-version-5--b2bd4d4221d9/QuickType.cs
@@ -0,0 +1,3078 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("centrodesmose", Required = Required.Always)]
+        public string Centrodesmose { get; set; }
+
+        [JsonProperty("cerograph", Required = Required.Always)]
+        public CerographElement[] Cerograph { get; set; }
+
+        [JsonProperty("chemotherapeutics", Required = Required.Always)]
+        public ChemotherapeuticElement[] Chemotherapeutics { get; set; }
+
+        [JsonProperty("cimelia", Required = Required.Always)]
+        public CimeliaElement[] Cimelia { get; set; }
+
+        [JsonProperty("citrated", Required = Required.Always)]
+        public long Citrated { get; set; }
+
+        [JsonProperty("clinodome", Required = Required.Always)]
+        public Clinodome[] Clinodome { get; set; }
+
+        [JsonProperty("coadjust", Required = Required.Always)]
+        public CoadjustElement[] Coadjust { get; set; }
+
+        [JsonProperty("consilience", Required = Required.Always)]
+        public Consilience[] Consilience { get; set; }
+
+        [JsonProperty("constructor", Required = Required.Always)]
+        public Constructor[] Constructor { get; set; }
+
+        [JsonProperty("continuative", Required = Required.Always)]
+        public Continuative[] Continuative { get; set; }
+
+        [JsonProperty("credulity", Required = Required.Always)]
+        public CredulityElement[] Credulity { get; set; }
+
+        [JsonProperty("creviced", Required = Required.Always)]
+        public Creviced[] Creviced { get; set; }
+
+        [JsonProperty("cubiculum", Required = Required.Always)]
+        public long?[][] Cubiculum { get; set; }
+
+        [JsonProperty("deruralize", Required = Required.Always)]
+        public DeruralizeElement[] Deruralize { get; set; }
+
+        [JsonProperty("diaereses", Required = Required.Always)]
+        public DiaereseElement[] Diaereses { get; set; }
+
+        [JsonProperty("dissolution", Required = Required.Always)]
+        public object[][] Dissolution { get; set; }
+
+        [JsonProperty("downstroke", Required = Required.Always)]
+        public Downstroke[] Downstroke { get; set; }
+
+        [JsonProperty("electrotautomerism", Required = Required.Always)]
+        public double?[] Electrotautomerism { get; set; }
+
+        [JsonProperty("eleutheromania", Required = Required.Always)]
+        public Eleutheromania[] Eleutheromania { get; set; }
+
+        [JsonProperty("encrust", Required = Required.Always)]
+        public Encrust Encrust { get; set; }
+
+        [JsonProperty("entomoid", Required = Required.Always)]
+        public Entomoid[] Entomoid { get; set; }
+
+        [JsonProperty("epipaleolithic", Required = Required.Always)]
+        public Epipaleolithic[] Epipaleolithic { get; set; }
+
+        [JsonProperty("expropriable", Required = Required.Always)]
+        public Expropriable[] Expropriable { get; set; }
+
+        [JsonProperty("faggingly", Required = Required.Always)]
+        public FagginglyElement[] Faggingly { get; set; }
+
+        [JsonProperty("fenks", Required = Required.Always)]
+        public FenkElement[] Fenks { get; set; }
+
+        [JsonProperty("flagmaking", Required = Required.Always)]
+        public FlagmakingElement[] Flagmaking { get; set; }
+
+        [JsonProperty("fluorometer", Required = Required.Always)]
+        public Fluorometer[] Fluorometer { get; set; }
+
+        [JsonProperty("fulsome", Required = Required.Always)]
+        public long?[] Fulsome { get; set; }
+
+        [JsonProperty("fuzzy", Required = Required.Always)]
+        public Fuzzy[] Fuzzy { get; set; }
+
+        [JsonProperty("gardenwards", Required = Required.Always)]
+        public Gardenward[] Gardenwards { get; set; }
+
+        [JsonProperty("generalissimo", Required = Required.Always)]
+        public Generalissimo[] Generalissimo { get; set; }
+
+        [JsonProperty("habeas", Required = Required.Always)]
+        public Dictionary<string, long>[] Habeas { get; set; }
+
+        [JsonProperty("hemicrystalline", Required = Required.Always)]
+        public Hemicrystalline[] Hemicrystalline { get; set; }
+
+        [JsonProperty("hemocoele", Required = Required.Always)]
+        public HemocoeleElement[] Hemocoele { get; set; }
+
+        [JsonProperty("hoister", Required = Required.Always)]
+        public Hoister[] Hoister { get; set; }
+
+        [JsonProperty("hyperpiesis", Required = Required.Always)]
+        public Hyperpiesi[] Hyperpiesis { get; set; }
+
+        [JsonProperty("hyppish", Required = Required.Always)]
+        public Hyppish[] Hyppish { get; set; }
+
+        [JsonProperty("idealizer", Required = Required.Always)]
+        public Idealizer[] Idealizer { get; set; }
+
+        [JsonProperty("incrustator", Required = Required.Always)]
+        public Incrustator[] Incrustator { get; set; }
+
+        [JsonProperty("intentiveness", Required = Required.Always)]
+        public Intentiveness[] Intentiveness { get; set; }
+
+        [JsonProperty("interacinar", Required = Required.Always)]
+        public Interacinar Interacinar { get; set; }
+
+        [JsonProperty("intercorrelation", Required = Required.Always)]
+        public long[][] Intercorrelation { get; set; }
+
+        [JsonProperty("jacutinga", Required = Required.Always)]
+        public Jacutinga[] Jacutinga { get; set; }
+    }
+
+    public partial record CerographClass
+    {
+        [JsonProperty("apotropaion", Required = Required.AllowNull)]
+        public object Apotropaion { get; set; }
+
+        [JsonProperty("casuary", Required = Required.AllowNull)]
+        public object Casuary { get; set; }
+
+        [JsonProperty("creaker", Required = Required.AllowNull)]
+        public object Creaker { get; set; }
+
+        [JsonProperty("disqualification", Required = Required.AllowNull)]
+        public object Disqualification { get; set; }
+
+        [JsonProperty("imperatorious", Required = Required.AllowNull)]
+        public object Imperatorious { get; set; }
+
+        [JsonProperty("impermeabilize", Required = Required.AllowNull)]
+        public object Impermeabilize { get; set; }
+
+        [JsonProperty("metastoma", Required = Required.AllowNull)]
+        public object Metastoma { get; set; }
+
+        [JsonProperty("noctidiurnal", Required = Required.AllowNull)]
+        public object Noctidiurnal { get; set; }
+
+        [JsonProperty("nonreserve", Required = Required.AllowNull)]
+        public object Nonreserve { get; set; }
+
+        [JsonProperty("ophthalmotonometry", Required = Required.AllowNull)]
+        public object Ophthalmotonometry { get; set; }
+
+        [JsonProperty("pailful", Required = Required.AllowNull)]
+        public object Pailful { get; set; }
+
+        [JsonProperty("pigfish", Required = Required.AllowNull)]
+        public object Pigfish { get; set; }
+
+        [JsonProperty("pongee", Required = Required.AllowNull)]
+        public object Pongee { get; set; }
+
+        [JsonProperty("prosodical", Required = Required.AllowNull)]
+        public object Prosodical { get; set; }
+
+        [JsonProperty("scrofuloderm", Required = Required.AllowNull)]
+        public object Scrofuloderm { get; set; }
+
+        [JsonProperty("storekeeping", Required = Required.AllowNull)]
+        public object Storekeeping { get; set; }
+
+        [JsonProperty("therologist", Required = Required.AllowNull)]
+        public object Therologist { get; set; }
+
+        [JsonProperty("Tolowa", Required = Required.AllowNull)]
+        public object Tolowa { get; set; }
+
+        [JsonProperty("tradeful", Required = Required.AllowNull)]
+        public object Tradeful { get; set; }
+
+        [JsonProperty("unriveting", Required = Required.AllowNull)]
+        public object Unriveting { get; set; }
+    }
+
+    public partial record ChemotherapeuticClass
+    {
+        [JsonProperty("angioneurotic")]
+        public object Angioneurotic { get; set; }
+
+        [JsonProperty("availment")]
+        public object Availment { get; set; }
+
+        [JsonProperty("bladelet")]
+        public object Bladelet { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("caulis")]
+        public object Caulis { get; set; }
+
+        [JsonProperty("chalcus")]
+        public object Chalcus { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("enteradenological")]
+        public object Enteradenological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("imporosity")]
+        public object Imporosity { get; set; }
+
+        [JsonProperty("insistently")]
+        public object Insistently { get; set; }
+
+        [JsonProperty("intraparietal")]
+        public object Intraparietal { get; set; }
+
+        [JsonProperty("ivied")]
+        public object Ivied { get; set; }
+
+        [JsonProperty("Maureen")]
+        public object Maureen { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("nostochine")]
+        public object Nostochine { get; set; }
+
+        [JsonProperty("nutcracker")]
+        public object Nutcracker { get; set; }
+
+        [JsonProperty("ofttimes")]
+        public object Ofttimes { get; set; }
+
+        [JsonProperty("phenocryst")]
+        public object Phenocryst { get; set; }
+
+        [JsonProperty("precoincident")]
+        public object Precoincident { get; set; }
+
+        [JsonProperty("ramiferous")]
+        public object Ramiferous { get; set; }
+
+        [JsonProperty("stagmometer")]
+        public object Stagmometer { get; set; }
+
+        [JsonProperty("tetherball")]
+        public object Tetherball { get; set; }
+
+        [JsonProperty("unshy")]
+        public object Unshy { get; set; }
+    }
+
+    public partial record CimeliaClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record CoadjustClass
+    {
+        [JsonProperty("amidosulphonal")]
+        public object Amidosulphonal { get; set; }
+
+        [JsonProperty("Benny")]
+        public object Benny { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("ensnare")]
+        public object Ensnare { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hybridizer")]
+        public object Hybridizer { get; set; }
+
+        [JsonProperty("leastwise")]
+        public object Leastwise { get; set; }
+
+        [JsonProperty("lof")]
+        public object Lof { get; set; }
+
+        [JsonProperty("monkhood")]
+        public object Monkhood { get; set; }
+
+        [JsonProperty("Netherlandish")]
+        public object Netherlandish { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("peonism")]
+        public object Peonism { get; set; }
+
+        [JsonProperty("Phonelescope")]
+        public object Phonelescope { get; set; }
+
+        [JsonProperty("porphyrogeniture")]
+        public object Porphyrogeniture { get; set; }
+
+        [JsonProperty("preindemnify")]
+        public object Preindemnify { get; set; }
+
+        [JsonProperty("rosal")]
+        public object Rosal { get; set; }
+
+        [JsonProperty("scalenous")]
+        public object Scalenous { get; set; }
+
+        [JsonProperty("scopine")]
+        public object Scopine { get; set; }
+
+        [JsonProperty("Sedaceae")]
+        public object Sedaceae { get; set; }
+
+        [JsonProperty("suberinize")]
+        public object Suberinize { get; set; }
+
+        [JsonProperty("symbiot")]
+        public object Symbiot { get; set; }
+
+        [JsonProperty("tablefellow")]
+        public object Tablefellow { get; set; }
+
+        [JsonProperty("unchargeable")]
+        public object Unchargeable { get; set; }
+    }
+
+    public partial record CredulityClass
+    {
+        [JsonProperty("ammonolytic", Required = Required.AllowNull)]
+        public object Ammonolytic { get; set; }
+
+        [JsonProperty("bushmaster", Required = Required.AllowNull)]
+        public object Bushmaster { get; set; }
+
+        [JsonProperty("considering", Required = Required.AllowNull)]
+        public object Considering { get; set; }
+
+        [JsonProperty("consuetudinary", Required = Required.AllowNull)]
+        public object Consuetudinary { get; set; }
+
+        [JsonProperty("embarras", Required = Required.AllowNull)]
+        public object Embarras { get; set; }
+
+        [JsonProperty("fineness", Required = Required.AllowNull)]
+        public object Fineness { get; set; }
+
+        [JsonProperty("flaithship", Required = Required.AllowNull)]
+        public object Flaithship { get; set; }
+
+        [JsonProperty("Flavia", Required = Required.AllowNull)]
+        public object Flavia { get; set; }
+
+        [JsonProperty("gruffly", Required = Required.AllowNull)]
+        public object Gruffly { get; set; }
+
+        [JsonProperty("Hedychium", Required = Required.AllowNull)]
+        public object Hedychium { get; set; }
+
+        [JsonProperty("leadwort", Required = Required.AllowNull)]
+        public object Leadwort { get; set; }
+
+        [JsonProperty("overseriously", Required = Required.AllowNull)]
+        public object Overseriously { get; set; }
+
+        [JsonProperty("parabola", Required = Required.AllowNull)]
+        public object Parabola { get; set; }
+
+        [JsonProperty("pectinatodenticulate", Required = Required.AllowNull)]
+        public object Pectinatodenticulate { get; set; }
+
+        [JsonProperty("Popean", Required = Required.AllowNull)]
+        public object Popean { get; set; }
+
+        [JsonProperty("pornocrat", Required = Required.AllowNull)]
+        public object Pornocrat { get; set; }
+
+        [JsonProperty("quadrisect", Required = Required.AllowNull)]
+        public object Quadrisect { get; set; }
+
+        [JsonProperty("seriality", Required = Required.AllowNull)]
+        public object Seriality { get; set; }
+
+        [JsonProperty("vamphorn", Required = Required.AllowNull)]
+        public object Vamphorn { get; set; }
+
+        [JsonProperty("wharp", Required = Required.AllowNull)]
+        public object Wharp { get; set; }
+    }
+
+    public partial record DeruralizeClass
+    {
+        [JsonProperty("bockerel", Required = Required.AllowNull)]
+        public object Bockerel { get; set; }
+
+        [JsonProperty("boulder", Required = Required.AllowNull)]
+        public object Boulder { get; set; }
+
+        [JsonProperty("churrus", Required = Required.AllowNull)]
+        public object Churrus { get; set; }
+
+        [JsonProperty("counterdigged", Required = Required.AllowNull)]
+        public object Counterdigged { get; set; }
+
+        [JsonProperty("dialogite", Required = Required.AllowNull)]
+        public object Dialogite { get; set; }
+
+        [JsonProperty("digenic", Required = Required.AllowNull)]
+        public object Digenic { get; set; }
+
+        [JsonProperty("dunbird", Required = Required.AllowNull)]
+        public object Dunbird { get; set; }
+
+        [JsonProperty("ergatogyne", Required = Required.AllowNull)]
+        public object Ergatogyne { get; set; }
+
+        [JsonProperty("fiendful", Required = Required.AllowNull)]
+        public object Fiendful { get; set; }
+
+        [JsonProperty("jackrod", Required = Required.AllowNull)]
+        public object Jackrod { get; set; }
+
+        [JsonProperty("Jehovistic", Required = Required.AllowNull)]
+        public object Jehovistic { get; set; }
+
+        [JsonProperty("Paninean", Required = Required.AllowNull)]
+        public object Paninean { get; set; }
+
+        [JsonProperty("panther", Required = Required.AllowNull)]
+        public object Panther { get; set; }
+
+        [JsonProperty("placentigerous", Required = Required.AllowNull)]
+        public object Placentigerous { get; set; }
+
+        [JsonProperty("Romney", Required = Required.AllowNull)]
+        public object Romney { get; set; }
+
+        [JsonProperty("sparm", Required = Required.AllowNull)]
+        public object Sparm { get; set; }
+
+        [JsonProperty("tocsin", Required = Required.AllowNull)]
+        public object Tocsin { get; set; }
+
+        [JsonProperty("unnicked", Required = Required.AllowNull)]
+        public object Unnicked { get; set; }
+
+        [JsonProperty("unstavable", Required = Required.AllowNull)]
+        public object Unstavable { get; set; }
+
+        [JsonProperty("windfirm", Required = Required.AllowNull)]
+        public object Windfirm { get; set; }
+    }
+
+    public partial record DiaereseClass
+    {
+        [JsonProperty("Amoreuxia", Required = Required.AllowNull)]
+        public object Amoreuxia { get; set; }
+
+        [JsonProperty("ani", Required = Required.AllowNull)]
+        public object Ani { get; set; }
+
+        [JsonProperty("bernicle", Required = Required.AllowNull)]
+        public object Bernicle { get; set; }
+
+        [JsonProperty("blackwasher", Required = Required.AllowNull)]
+        public object Blackwasher { get; set; }
+
+        [JsonProperty("blowhard", Required = Required.AllowNull)]
+        public object Blowhard { get; set; }
+
+        [JsonProperty("broma", Required = Required.AllowNull)]
+        public object Broma { get; set; }
+
+        [JsonProperty("closecross", Required = Required.AllowNull)]
+        public object Closecross { get; set; }
+
+        [JsonProperty("congregationalism", Required = Required.AllowNull)]
+        public object Congregationalism { get; set; }
+
+        [JsonProperty("grayly", Required = Required.AllowNull)]
+        public object Grayly { get; set; }
+
+        [JsonProperty("historically", Required = Required.AllowNull)]
+        public object Historically { get; set; }
+
+        [JsonProperty("hoast", Required = Required.AllowNull)]
+        public object Hoast { get; set; }
+
+        [JsonProperty("irretentive", Required = Required.AllowNull)]
+        public object Irretentive { get; set; }
+
+        [JsonProperty("parcener", Required = Required.AllowNull)]
+        public object Parcener { get; set; }
+
+        [JsonProperty("pedder", Required = Required.AllowNull)]
+        public object Pedder { get; set; }
+
+        [JsonProperty("pseudoanatomic", Required = Required.AllowNull)]
+        public object Pseudoanatomic { get; set; }
+
+        [JsonProperty("rhizocarpian", Required = Required.AllowNull)]
+        public object Rhizocarpian { get; set; }
+
+        [JsonProperty("samel", Required = Required.AllowNull)]
+        public object Samel { get; set; }
+
+        [JsonProperty("silker", Required = Required.AllowNull)]
+        public object Silker { get; set; }
+
+        [JsonProperty("subdentated", Required = Required.AllowNull)]
+        public object Subdentated { get; set; }
+
+        [JsonProperty("subobscure", Required = Required.AllowNull)]
+        public object Subobscure { get; set; }
+    }
+
+    public partial record Encrust
+    {
+        [JsonProperty("comradely", Required = Required.AllowNull)]
+        public object Comradely { get; set; }
+
+        [JsonProperty("diacanthous", Required = Required.AllowNull)]
+        public object Diacanthous { get; set; }
+
+        [JsonProperty("feminineness", Required = Required.AllowNull)]
+        public object Feminineness { get; set; }
+
+        [JsonProperty("gossamered", Required = Required.AllowNull)]
+        public object Gossamered { get; set; }
+
+        [JsonProperty("Hibernia", Required = Required.AllowNull)]
+        public object Hibernia { get; set; }
+
+        [JsonProperty("Hibiscus", Required = Required.AllowNull)]
+        public object Hibiscus { get; set; }
+
+        [JsonProperty("Lepidosauria", Required = Required.AllowNull)]
+        public object Lepidosauria { get; set; }
+
+        [JsonProperty("lollingly", Required = Required.AllowNull)]
+        public object Lollingly { get; set; }
+
+        [JsonProperty("manager", Required = Required.AllowNull)]
+        public object Manager { get; set; }
+
+        [JsonProperty("mechanic", Required = Required.AllowNull)]
+        public object Mechanic { get; set; }
+
+        [JsonProperty("overminuteness", Required = Required.AllowNull)]
+        public object Overminuteness { get; set; }
+
+        [JsonProperty("papelonne", Required = Required.AllowNull)]
+        public object Papelonne { get; set; }
+
+        [JsonProperty("plebification", Required = Required.AllowNull)]
+        public object Plebification { get; set; }
+
+        [JsonProperty("pugmiller", Required = Required.AllowNull)]
+        public object Pugmiller { get; set; }
+
+        [JsonProperty("recoveror", Required = Required.AllowNull)]
+        public object Recoveror { get; set; }
+
+        [JsonProperty("spermatoblastic", Required = Required.AllowNull)]
+        public object Spermatoblastic { get; set; }
+
+        [JsonProperty("Syllidae", Required = Required.AllowNull)]
+        public object Syllidae { get; set; }
+
+        [JsonProperty("ungyved", Required = Required.AllowNull)]
+        public object Ungyved { get; set; }
+
+        [JsonProperty("whirlabout", Required = Required.AllowNull)]
+        public object Whirlabout { get; set; }
+
+        [JsonProperty("woodenware", Required = Required.AllowNull)]
+        public object Woodenware { get; set; }
+    }
+
+    public partial record FagginglyClass
+    {
+        [JsonProperty("abranchian", Required = Required.AllowNull)]
+        public object Abranchian { get; set; }
+
+        [JsonProperty("aculeiform", Required = Required.AllowNull)]
+        public object Aculeiform { get; set; }
+
+        [JsonProperty("adiaphoristic", Required = Required.AllowNull)]
+        public object Adiaphoristic { get; set; }
+
+        [JsonProperty("adoptionism", Required = Required.AllowNull)]
+        public object Adoptionism { get; set; }
+
+        [JsonProperty("Anglic", Required = Required.AllowNull)]
+        public object Anglic { get; set; }
+
+        [JsonProperty("antrotomy", Required = Required.AllowNull)]
+        public object Antrotomy { get; set; }
+
+        [JsonProperty("coerciveness", Required = Required.AllowNull)]
+        public object Coerciveness { get; set; }
+
+        [JsonProperty("decorist", Required = Required.AllowNull)]
+        public object Decorist { get; set; }
+
+        [JsonProperty("duckhood", Required = Required.AllowNull)]
+        public object Duckhood { get; set; }
+
+        [JsonProperty("Heteromeri", Required = Required.AllowNull)]
+        public object Heteromeri { get; set; }
+
+        [JsonProperty("hypochnose", Required = Required.AllowNull)]
+        public object Hypochnose { get; set; }
+
+        [JsonProperty("lochage", Required = Required.AllowNull)]
+        public object Lochage { get; set; }
+
+        [JsonProperty("melee", Required = Required.AllowNull)]
+        public object Melee { get; set; }
+
+        [JsonProperty("nonconformitant", Required = Required.AllowNull)]
+        public object Nonconformitant { get; set; }
+
+        [JsonProperty("Poinsettia", Required = Required.AllowNull)]
+        public object Poinsettia { get; set; }
+
+        [JsonProperty("putatively", Required = Required.AllowNull)]
+        public object Putatively { get; set; }
+
+        [JsonProperty("semivolatile", Required = Required.AllowNull)]
+        public object Semivolatile { get; set; }
+
+        [JsonProperty("soleas", Required = Required.AllowNull)]
+        public object Soleas { get; set; }
+
+        [JsonProperty("unfastenable", Required = Required.AllowNull)]
+        public object Unfastenable { get; set; }
+
+        [JsonProperty("unmillinered", Required = Required.AllowNull)]
+        public object Unmillinered { get; set; }
+    }
+
+    public partial record FenkClass
+    {
+        [JsonProperty("apoise", Required = Required.AllowNull)]
+        public object Apoise { get; set; }
+
+        [JsonProperty("astronomize", Required = Required.AllowNull)]
+        public object Astronomize { get; set; }
+
+        [JsonProperty("cockhorse", Required = Required.AllowNull)]
+        public object Cockhorse { get; set; }
+
+        [JsonProperty("copular", Required = Required.AllowNull)]
+        public object Copular { get; set; }
+
+        [JsonProperty("Dagomba", Required = Required.AllowNull)]
+        public object Dagomba { get; set; }
+
+        [JsonProperty("draffy", Required = Required.AllowNull)]
+        public object Draffy { get; set; }
+
+        [JsonProperty("foreigner", Required = Required.AllowNull)]
+        public object Foreigner { get; set; }
+
+        [JsonProperty("Guyandot", Required = Required.AllowNull)]
+        public object Guyandot { get; set; }
+
+        [JsonProperty("neurogliosis", Required = Required.AllowNull)]
+        public object Neurogliosis { get; set; }
+
+        [JsonProperty("osmious", Required = Required.AllowNull)]
+        public object Osmious { get; set; }
+
+        [JsonProperty("palpitate", Required = Required.AllowNull)]
+        public object Palpitate { get; set; }
+
+        [JsonProperty("rebukeable", Required = Required.AllowNull)]
+        public object Rebukeable { get; set; }
+
+        [JsonProperty("Reinwardtia", Required = Required.AllowNull)]
+        public object Reinwardtia { get; set; }
+
+        [JsonProperty("reservatory", Required = Required.AllowNull)]
+        public object Reservatory { get; set; }
+
+        [JsonProperty("scalt", Required = Required.AllowNull)]
+        public object Scalt { get; set; }
+
+        [JsonProperty("scripturalize", Required = Required.AllowNull)]
+        public object Scripturalize { get; set; }
+
+        [JsonProperty("tintometer", Required = Required.AllowNull)]
+        public object Tintometer { get; set; }
+
+        [JsonProperty("Tritoness", Required = Required.AllowNull)]
+        public object Tritoness { get; set; }
+
+        [JsonProperty("undergrade", Required = Required.AllowNull)]
+        public object Undergrade { get; set; }
+
+        [JsonProperty("undermountain", Required = Required.AllowNull)]
+        public object Undermountain { get; set; }
+    }
+
+    public partial record FlagmakingClass
+    {
+        [JsonProperty("albarco", Required = Required.AllowNull)]
+        public object Albarco { get; set; }
+
+        [JsonProperty("Bunodonta", Required = Required.AllowNull)]
+        public object Bunodonta { get; set; }
+
+        [JsonProperty("hornify", Required = Required.AllowNull)]
+        public object Hornify { get; set; }
+
+        [JsonProperty("Hydrocorisae", Required = Required.AllowNull)]
+        public object Hydrocorisae { get; set; }
+
+        [JsonProperty("hypoglossus", Required = Required.AllowNull)]
+        public object Hypoglossus { get; set; }
+
+        [JsonProperty("inexpiably", Required = Required.AllowNull)]
+        public object Inexpiably { get; set; }
+
+        [JsonProperty("ingratitude", Required = Required.AllowNull)]
+        public object Ingratitude { get; set; }
+
+        [JsonProperty("ladyfly", Required = Required.AllowNull)]
+        public object Ladyfly { get; set; }
+
+        [JsonProperty("medicament", Required = Required.AllowNull)]
+        public object Medicament { get; set; }
+
+        [JsonProperty("monogrammatic", Required = Required.AllowNull)]
+        public object Monogrammatic { get; set; }
+
+        [JsonProperty("nobbut", Required = Required.AllowNull)]
+        public object Nobbut { get; set; }
+
+        [JsonProperty("Notacanthidae", Required = Required.AllowNull)]
+        public object Notacanthidae { get; set; }
+
+        [JsonProperty("polyplacophore", Required = Required.AllowNull)]
+        public object Polyplacophore { get; set; }
+
+        [JsonProperty("proexercise", Required = Required.AllowNull)]
+        public object Proexercise { get; set; }
+
+        [JsonProperty("protoplast", Required = Required.AllowNull)]
+        public object Protoplast { get; set; }
+
+        [JsonProperty("puzzling", Required = Required.AllowNull)]
+        public object Puzzling { get; set; }
+
+        [JsonProperty("splanchnoskeleton", Required = Required.AllowNull)]
+        public object Splanchnoskeleton { get; set; }
+
+        [JsonProperty("unloveliness", Required = Required.AllowNull)]
+        public object Unloveliness { get; set; }
+
+        [JsonProperty("unquarantined", Required = Required.AllowNull)]
+        public object Unquarantined { get; set; }
+
+        [JsonProperty("unrenounceable", Required = Required.AllowNull)]
+        public object Unrenounceable { get; set; }
+    }
+
+    public partial record HemocoeleClass
+    {
+        [JsonProperty("acrogamy")]
+        public object Acrogamy { get; set; }
+
+        [JsonProperty("amelification")]
+        public object Amelification { get; set; }
+
+        [JsonProperty("autobiographic")]
+        public object Autobiographic { get; set; }
+
+        [JsonProperty("berat")]
+        public object Berat { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("disproportionably")]
+        public object Disproportionably { get; set; }
+
+        [JsonProperty("erythrite")]
+        public object Erythrite { get; set; }
+
+        [JsonProperty("graphic")]
+        public object Graphic { get; set; }
+
+        [JsonProperty("hepatological")]
+        public object Hepatological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("incommensurably")]
+        public object Incommensurably { get; set; }
+
+        [JsonProperty("misaffirm")]
+        public object Misaffirm { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("pocketbook")]
+        public object Pocketbook { get; set; }
+
+        [JsonProperty("sclerometric")]
+        public object Sclerometric { get; set; }
+
+        [JsonProperty("stambouline")]
+        public object Stambouline { get; set; }
+
+        [JsonProperty("stickpin")]
+        public object Stickpin { get; set; }
+
+        [JsonProperty("tubulure")]
+        public object Tubulure { get; set; }
+
+        [JsonProperty("undelated")]
+        public object Undelated { get; set; }
+
+        [JsonProperty("unsalt")]
+        public object Unsalt { get; set; }
+
+        [JsonProperty("untutelar")]
+        public object Untutelar { get; set; }
+
+        [JsonProperty("vagrant")]
+        public object Vagrant { get; set; }
+
+        [JsonProperty("Walt")]
+        public object Walt { get; set; }
+    }
+
+    public partial record Interacinar
+    {
+        [JsonProperty("assapan", Required = Required.Always)]
+        public double Assapan { get; set; }
+
+        [JsonProperty("benefactorship", Required = Required.Always)]
+        public bool Benefactorship { get; set; }
+
+        [JsonProperty("triseriatim", Required = Required.Always)]
+        public string Triseriatim { get; set; }
+
+        [JsonProperty("tubbing", Required = Required.Always)]
+        public long Tubbing { get; set; }
+
+        [JsonProperty("untrimmed", Required = Required.AllowNull)]
+        public object Untrimmed { get; set; }
+    }
+
+    public partial struct CerographElement
+    {
+        public CerographClass CerographClass;
+        public string String;
+
+        public static implicit operator CerographElement(CerographClass CerographClass)
+        {
+            return new CerographElement { CerographClass = CerographClass };
+        }
+        public static implicit operator CerographElement(string String)
+        {
+            return new CerographElement { String = String };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return CerographClass == null && String == null;
+            }
+        }
+    }
+
+    public partial struct ChemotherapeuticElement
+    {
+        public ChemotherapeuticClass ChemotherapeuticClass;
+        public long? Integer;
+
+        public static implicit operator ChemotherapeuticElement(ChemotherapeuticClass ChemotherapeuticClass)
+        {
+            return new ChemotherapeuticElement { ChemotherapeuticClass = ChemotherapeuticClass };
+        }
+        public static implicit operator ChemotherapeuticElement(long Integer)
+        {
+            return new ChemotherapeuticElement { Integer = Integer };
+        }
+    }
+
+    public partial struct CimeliaElement
+    {
+        public CimeliaClass CimeliaClass;
+        public long[] IntegerArray;
+
+        public static implicit operator CimeliaElement(CimeliaClass CimeliaClass)
+        {
+            return new CimeliaElement { CimeliaClass = CimeliaClass };
+        }
+        public static implicit operator CimeliaElement(long[] IntegerArray)
+        {
+            return new CimeliaElement { IntegerArray = IntegerArray };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return IntegerArray == null && CimeliaClass == null;
+            }
+        }
+    }
+
+    public partial struct Clinodome
+    {
+        public double? Double;
+        public string String;
+
+        public static implicit operator Clinodome(double Double)
+        {
+            return new Clinodome { Double = Double };
+        }
+        public static implicit operator Clinodome(string String)
+        {
+            return new Clinodome { String = String };
+        }
+    }
+
+    public partial struct CoadjustElement
+    {
+        public CoadjustClass CoadjustClass;
+        public double? Double;
+
+        public static implicit operator CoadjustElement(CoadjustClass CoadjustClass)
+        {
+            return new CoadjustElement { CoadjustClass = CoadjustClass };
+        }
+        public static implicit operator CoadjustElement(double Double)
+        {
+            return new CoadjustElement { Double = Double };
+        }
+    }
+
+    public partial struct Consilience
+    {
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Consilience(double Double)
+        {
+            return new Consilience { Double = Double };
+        }
+        public static implicit operator Consilience(Dictionary<string, long> IntegerMap)
+        {
+            return new Consilience { IntegerMap = IntegerMap };
+        }
+    }
+
+    public partial struct Constructor
+    {
+        public bool? Bool;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Constructor(bool Bool)
+        {
+            return new Constructor { Bool = Bool };
+        }
+        public static implicit operator Constructor(Dictionary<string, long?> UnionMap)
+        {
+            return new Constructor { UnionMap = UnionMap };
+        }
+    }
+
+    public partial struct Continuative
+    {
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Continuative(Dictionary<string, long> IntegerMap)
+        {
+            return new Continuative { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Continuative(string String)
+        {
+            return new Continuative { String = String };
+        }
+    }
+
+    public partial struct CredulityElement
+    {
+        public CredulityClass CredulityClass;
+        public long? Integer;
+        public string String;
+
+        public static implicit operator CredulityElement(CredulityClass CredulityClass)
+        {
+            return new CredulityElement { CredulityClass = CredulityClass };
+        }
+        public static implicit operator CredulityElement(long Integer)
+        {
+            return new CredulityElement { Integer = Integer };
+        }
+        public static implicit operator CredulityElement(string String)
+        {
+            return new CredulityElement { String = String };
+        }
+    }
+
+    public partial struct Creviced
+    {
+        public bool? Bool;
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Creviced(bool Bool)
+        {
+            return new Creviced { Bool = Bool };
+        }
+        public static implicit operator Creviced(Dictionary<string, long> IntegerMap)
+        {
+            return new Creviced { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Creviced(string String)
+        {
+            return new Creviced { String = String };
+        }
+    }
+
+    public partial struct DeruralizeElement
+    {
+        public bool? Bool;
+        public DeruralizeClass DeruralizeClass;
+        public object[] NullArray;
+
+        public static implicit operator DeruralizeElement(bool Bool)
+        {
+            return new DeruralizeElement { Bool = Bool };
+        }
+        public static implicit operator DeruralizeElement(DeruralizeClass DeruralizeClass)
+        {
+            return new DeruralizeElement { DeruralizeClass = DeruralizeClass };
+        }
+        public static implicit operator DeruralizeElement(object[] NullArray)
+        {
+            return new DeruralizeElement { NullArray = NullArray };
+        }
+    }
+
+    public partial struct DiaereseElement
+    {
+        public bool? Bool;
+        public DiaereseClass DiaereseClass;
+        public long[] IntegerArray;
+
+        public static implicit operator DiaereseElement(bool Bool)
+        {
+            return new DiaereseElement { Bool = Bool };
+        }
+        public static implicit operator DiaereseElement(DiaereseClass DiaereseClass)
+        {
+            return new DiaereseElement { DiaereseClass = DiaereseClass };
+        }
+        public static implicit operator DiaereseElement(long[] IntegerArray)
+        {
+            return new DiaereseElement { IntegerArray = IntegerArray };
+        }
+    }
+
+    public partial struct Downstroke
+    {
+        public bool? Bool;
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Downstroke(bool Bool)
+        {
+            return new Downstroke { Bool = Bool };
+        }
+        public static implicit operator Downstroke(object[] NullArray)
+        {
+            return new Downstroke { NullArray = NullArray };
+        }
+        public static implicit operator Downstroke(string String)
+        {
+            return new Downstroke { String = String };
+        }
+    }
+
+    public partial struct Eleutheromania
+    {
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Eleutheromania(double Double)
+        {
+            return new Eleutheromania { Double = Double };
+        }
+        public static implicit operator Eleutheromania(Dictionary<string, long> IntegerMap)
+        {
+            return new Eleutheromania { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Eleutheromania(string String)
+        {
+            return new Eleutheromania { String = String };
+        }
+    }
+
+    public partial struct Entomoid
+    {
+        public CimeliaClass CimeliaClass;
+        public long? Integer;
+
+        public static implicit operator Entomoid(CimeliaClass CimeliaClass)
+        {
+            return new Entomoid { CimeliaClass = CimeliaClass };
+        }
+        public static implicit operator Entomoid(long Integer)
+        {
+            return new Entomoid { Integer = Integer };
+        }
+    }
+
+    public partial struct Epipaleolithic
+    {
+        public double? Double;
+        public long[] IntegerArray;
+
+        public static implicit operator Epipaleolithic(double Double)
+        {
+            return new Epipaleolithic { Double = Double };
+        }
+        public static implicit operator Epipaleolithic(long[] IntegerArray)
+        {
+            return new Epipaleolithic { IntegerArray = IntegerArray };
+        }
+    }
+
+    public partial struct Expropriable
+    {
+        public CimeliaClass CimeliaClass;
+        public double? Double;
+        public object[] NullArray;
+
+        public static implicit operator Expropriable(CimeliaClass CimeliaClass)
+        {
+            return new Expropriable { CimeliaClass = CimeliaClass };
+        }
+        public static implicit operator Expropriable(double Double)
+        {
+            return new Expropriable { Double = Double };
+        }
+        public static implicit operator Expropriable(object[] NullArray)
+        {
+            return new Expropriable { NullArray = NullArray };
+        }
+    }
+
+    public partial struct FagginglyElement
+    {
+        public double? Double;
+        public FagginglyClass FagginglyClass;
+
+        public static implicit operator FagginglyElement(double Double)
+        {
+            return new FagginglyElement { Double = Double };
+        }
+        public static implicit operator FagginglyElement(FagginglyClass FagginglyClass)
+        {
+            return new FagginglyElement { FagginglyClass = FagginglyClass };
+        }
+    }
+
+    public partial struct FenkElement
+    {
+        public FenkClass FenkClass;
+        public string String;
+
+        public static implicit operator FenkElement(FenkClass FenkClass)
+        {
+            return new FenkElement { FenkClass = FenkClass };
+        }
+        public static implicit operator FenkElement(string String)
+        {
+            return new FenkElement { String = String };
+        }
+    }
+
+    public partial struct FlagmakingElement
+    {
+        public bool? Bool;
+        public double? Double;
+        public FlagmakingClass FlagmakingClass;
+
+        public static implicit operator FlagmakingElement(bool Bool)
+        {
+            return new FlagmakingElement { Bool = Bool };
+        }
+        public static implicit operator FlagmakingElement(double Double)
+        {
+            return new FlagmakingElement { Double = Double };
+        }
+        public static implicit operator FlagmakingElement(FlagmakingClass FlagmakingClass)
+        {
+            return new FlagmakingElement { FlagmakingClass = FlagmakingClass };
+        }
+    }
+
+    public partial struct Fluorometer
+    {
+        public long? Integer;
+        public string String;
+
+        public static implicit operator Fluorometer(long Integer)
+        {
+            return new Fluorometer { Integer = Integer };
+        }
+        public static implicit operator Fluorometer(string String)
+        {
+            return new Fluorometer { String = String };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return Integer == null && String == null;
+            }
+        }
+    }
+
+    public partial struct Fuzzy
+    {
+        public long? Integer;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Fuzzy(long Integer)
+        {
+            return new Fuzzy { Integer = Integer };
+        }
+        public static implicit operator Fuzzy(Dictionary<string, long?> UnionMap)
+        {
+            return new Fuzzy { UnionMap = UnionMap };
+        }
+    }
+
+    public partial struct Gardenward
+    {
+        public bool? Bool;
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator Gardenward(bool Bool)
+        {
+            return new Gardenward { Bool = Bool };
+        }
+        public static implicit operator Gardenward(long[] IntegerArray)
+        {
+            return new Gardenward { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Gardenward(string String)
+        {
+            return new Gardenward { String = String };
+        }
+    }
+
+    public partial struct Generalissimo
+    {
+        public bool? Bool;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Generalissimo(bool Bool)
+        {
+            return new Generalissimo { Bool = Bool };
+        }
+        public static implicit operator Generalissimo(Dictionary<string, long> IntegerMap)
+        {
+            return new Generalissimo { IntegerMap = IntegerMap };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return Bool == null && IntegerMap == null;
+            }
+        }
+    }
+
+    public partial struct Hemicrystalline
+    {
+        public CimeliaClass CimeliaClass;
+        public string String;
+
+        public static implicit operator Hemicrystalline(CimeliaClass CimeliaClass)
+        {
+            return new Hemicrystalline { CimeliaClass = CimeliaClass };
+        }
+        public static implicit operator Hemicrystalline(string String)
+        {
+            return new Hemicrystalline { String = String };
+        }
+    }
+
+    public partial struct HemocoeleElement
+    {
+        public HemocoeleClass HemocoeleClass;
+        public long[] IntegerArray;
+
+        public static implicit operator HemocoeleElement(HemocoeleClass HemocoeleClass)
+        {
+            return new HemocoeleElement { HemocoeleClass = HemocoeleClass };
+        }
+        public static implicit operator HemocoeleElement(long[] IntegerArray)
+        {
+            return new HemocoeleElement { IntegerArray = IntegerArray };
+        }
+    }
+
+    public partial struct Hoister
+    {
+        public CimeliaClass CimeliaClass;
+        public string String;
+
+        public static implicit operator Hoister(CimeliaClass CimeliaClass)
+        {
+            return new Hoister { CimeliaClass = CimeliaClass };
+        }
+        public static implicit operator Hoister(string String)
+        {
+            return new Hoister { String = String };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return CimeliaClass == null && String == null;
+            }
+        }
+    }
+
+    public partial struct Hyperpiesi
+    {
+        public CimeliaClass CimeliaClass;
+        public object[] NullArray;
+
+        public static implicit operator Hyperpiesi(CimeliaClass CimeliaClass)
+        {
+            return new Hyperpiesi { CimeliaClass = CimeliaClass };
+        }
+        public static implicit operator Hyperpiesi(object[] NullArray)
+        {
+            return new Hyperpiesi { NullArray = NullArray };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return NullArray == null && CimeliaClass == null;
+            }
+        }
+    }
+
+    public partial struct Hyppish
+    {
+        public bool? Bool;
+        public string String;
+
+        public static implicit operator Hyppish(bool Bool)
+        {
+            return new Hyppish { Bool = Bool };
+        }
+        public static implicit operator Hyppish(string String)
+        {
+            return new Hyppish { String = String };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return Bool == null && String == null;
+            }
+        }
+    }
+
+    public partial struct Idealizer
+    {
+        public CimeliaClass CimeliaClass;
+        public long? Integer;
+        public object[] NullArray;
+
+        public static implicit operator Idealizer(CimeliaClass CimeliaClass)
+        {
+            return new Idealizer { CimeliaClass = CimeliaClass };
+        }
+        public static implicit operator Idealizer(long Integer)
+        {
+            return new Idealizer { Integer = Integer };
+        }
+        public static implicit operator Idealizer(object[] NullArray)
+        {
+            return new Idealizer { NullArray = NullArray };
+        }
+    }
+
+    public partial struct Incrustator
+    {
+        public long? Integer;
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator Incrustator(long Integer)
+        {
+            return new Incrustator { Integer = Integer };
+        }
+        public static implicit operator Incrustator(long[] IntegerArray)
+        {
+            return new Incrustator { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Incrustator(string String)
+        {
+            return new Incrustator { String = String };
+        }
+    }
+
+    public partial struct Intentiveness
+    {
+        public CimeliaClass CimeliaClass;
+        public double? Double;
+        public string String;
+
+        public static implicit operator Intentiveness(CimeliaClass CimeliaClass)
+        {
+            return new Intentiveness { CimeliaClass = CimeliaClass };
+        }
+        public static implicit operator Intentiveness(double Double)
+        {
+            return new Intentiveness { Double = Double };
+        }
+        public static implicit operator Intentiveness(string String)
+        {
+            return new Intentiveness { String = String };
+        }
+    }
+
+    public partial struct Jacutinga
+    {
+        public long[] IntegerArray;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Jacutinga(long[] IntegerArray)
+        {
+            return new Jacutinga { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Jacutinga(Dictionary<string, long?> UnionMap)
+        {
+            return new Jacutinga { UnionMap = UnionMap };
+        }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json)
+        {
+            return JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+        }
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self)
+        {
+            return JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+        }
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CerographElementConverter.Singleton,
+                ChemotherapeuticElementConverter.Singleton,
+                CimeliaElementConverter.Singleton,
+                ClinodomeConverter.Singleton,
+                CoadjustElementConverter.Singleton,
+                ConsilienceConverter.Singleton,
+                ConstructorConverter.Singleton,
+                ContinuativeConverter.Singleton,
+                CredulityElementConverter.Singleton,
+                CrevicedConverter.Singleton,
+                DeruralizeElementConverter.Singleton,
+                DiaereseElementConverter.Singleton,
+                DownstrokeConverter.Singleton,
+                EleutheromaniaConverter.Singleton,
+                EntomoidConverter.Singleton,
+                EpipaleolithicConverter.Singleton,
+                ExpropriableConverter.Singleton,
+                FagginglyElementConverter.Singleton,
+                FenkElementConverter.Singleton,
+                FlagmakingElementConverter.Singleton,
+                FluorometerConverter.Singleton,
+                FuzzyConverter.Singleton,
+                GardenwardConverter.Singleton,
+                GeneralissimoConverter.Singleton,
+                HemicrystallineConverter.Singleton,
+                HemocoeleElementConverter.Singleton,
+                HoisterConverter.Singleton,
+                HyperpiesiConverter.Singleton,
+                HyppishConverter.Singleton,
+                IdealizerConverter.Singleton,
+                IncrustatorConverter.Singleton,
+                IntentivenessConverter.Singleton,
+                JacutingaConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CerographElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(CerographElement) || t == typeof(CerographElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CerographElement { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CerographElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CerographClass>(reader);
+                    return new CerographElement { CerographClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CerographElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CerographElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CerographClass != null)
+            {
+                serializer.Serialize(writer, value.CerographClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CerographElement");
+        }
+
+        public static readonly CerographElementConverter Singleton = new CerographElementConverter();
+    }
+
+    internal class ChemotherapeuticElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(ChemotherapeuticElement) || t == typeof(ChemotherapeuticElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new ChemotherapeuticElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChemotherapeuticClass>(reader);
+                    return new ChemotherapeuticElement { ChemotherapeuticClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChemotherapeuticElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChemotherapeuticElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.ChemotherapeuticClass != null)
+            {
+                serializer.Serialize(writer, value.ChemotherapeuticClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChemotherapeuticElement");
+        }
+
+        public static readonly ChemotherapeuticElementConverter Singleton = new ChemotherapeuticElementConverter();
+    }
+
+    internal class CimeliaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(CimeliaElement) || t == typeof(CimeliaElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CimeliaElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new CimeliaElement { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new CimeliaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type CimeliaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CimeliaElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CimeliaElement");
+        }
+
+        public static readonly CimeliaElementConverter Singleton = new CimeliaElementConverter();
+    }
+
+    internal class ClinodomeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Clinodome) || t == typeof(Clinodome?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Clinodome { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Clinodome { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Clinodome");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Clinodome)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Clinodome");
+        }
+
+        public static readonly ClinodomeConverter Singleton = new ClinodomeConverter();
+    }
+
+    internal class CoadjustElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(CoadjustElement) || t == typeof(CoadjustElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new CoadjustElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CoadjustClass>(reader);
+                    return new CoadjustElement { CoadjustClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CoadjustElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CoadjustElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.CoadjustClass != null)
+            {
+                serializer.Serialize(writer, value.CoadjustClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CoadjustElement");
+        }
+
+        public static readonly CoadjustElementConverter Singleton = new CoadjustElementConverter();
+    }
+
+    internal class ConsilienceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Consilience) || t == typeof(Consilience?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Consilience { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Consilience { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Consilience");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Consilience)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Consilience");
+        }
+
+        public static readonly ConsilienceConverter Singleton = new ConsilienceConverter();
+    }
+
+    internal class ConstructorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Constructor) || t == typeof(Constructor?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Constructor { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Constructor { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Constructor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Constructor)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Constructor");
+        }
+
+        public static readonly ConstructorConverter Singleton = new ConstructorConverter();
+    }
+
+    internal class ContinuativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Continuative) || t == typeof(Continuative?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Continuative { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Continuative { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Continuative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Continuative)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Continuative");
+        }
+
+        public static readonly ContinuativeConverter Singleton = new ContinuativeConverter();
+    }
+
+    internal class CredulityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(CredulityElement) || t == typeof(CredulityElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new CredulityElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CredulityElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CredulityClass>(reader);
+                    return new CredulityElement { CredulityClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CredulityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CredulityElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CredulityClass != null)
+            {
+                serializer.Serialize(writer, value.CredulityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CredulityElement");
+        }
+
+        public static readonly CredulityElementConverter Singleton = new CredulityElementConverter();
+    }
+
+    internal class CrevicedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Creviced) || t == typeof(Creviced?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Creviced { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Creviced { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Creviced { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Creviced");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Creviced)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Creviced");
+        }
+
+        public static readonly CrevicedConverter Singleton = new CrevicedConverter();
+    }
+
+    internal class DeruralizeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(DeruralizeElement) || t == typeof(DeruralizeElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DeruralizeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DeruralizeClass>(reader);
+                    return new DeruralizeElement { DeruralizeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new DeruralizeElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DeruralizeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DeruralizeElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.DeruralizeClass != null)
+            {
+                serializer.Serialize(writer, value.DeruralizeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DeruralizeElement");
+        }
+
+        public static readonly DeruralizeElementConverter Singleton = new DeruralizeElementConverter();
+    }
+
+    internal class DiaereseElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(DiaereseElement) || t == typeof(DiaereseElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DiaereseElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiaereseClass>(reader);
+                    return new DiaereseElement { DiaereseClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiaereseElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiaereseElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiaereseElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiaereseClass != null)
+            {
+                serializer.Serialize(writer, value.DiaereseClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiaereseElement");
+        }
+
+        public static readonly DiaereseElementConverter Singleton = new DiaereseElementConverter();
+    }
+
+    internal class DownstrokeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Downstroke) || t == typeof(Downstroke?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Downstroke { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Downstroke { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Downstroke { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Downstroke");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Downstroke)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Downstroke");
+        }
+
+        public static readonly DownstrokeConverter Singleton = new DownstrokeConverter();
+    }
+
+    internal class EleutheromaniaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Eleutheromania) || t == typeof(Eleutheromania?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Eleutheromania { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Eleutheromania { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eleutheromania { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Eleutheromania");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eleutheromania)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eleutheromania");
+        }
+
+        public static readonly EleutheromaniaConverter Singleton = new EleutheromaniaConverter();
+    }
+
+    internal class EntomoidConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Entomoid) || t == typeof(Entomoid?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Entomoid { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Entomoid { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Entomoid");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Entomoid)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Entomoid");
+        }
+
+        public static readonly EntomoidConverter Singleton = new EntomoidConverter();
+    }
+
+    internal class EpipaleolithicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Epipaleolithic) || t == typeof(Epipaleolithic?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Epipaleolithic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Epipaleolithic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Epipaleolithic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epipaleolithic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epipaleolithic");
+        }
+
+        public static readonly EpipaleolithicConverter Singleton = new EpipaleolithicConverter();
+    }
+
+    internal class ExpropriableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Expropriable) || t == typeof(Expropriable?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Expropriable { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Expropriable { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Expropriable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Expropriable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Expropriable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Expropriable");
+        }
+
+        public static readonly ExpropriableConverter Singleton = new ExpropriableConverter();
+    }
+
+    internal class FagginglyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(FagginglyElement) || t == typeof(FagginglyElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FagginglyElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FagginglyClass>(reader);
+                    return new FagginglyElement { FagginglyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FagginglyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FagginglyElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.FagginglyClass != null)
+            {
+                serializer.Serialize(writer, value.FagginglyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FagginglyElement");
+        }
+
+        public static readonly FagginglyElementConverter Singleton = new FagginglyElementConverter();
+    }
+
+    internal class FenkElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(FenkElement) || t == typeof(FenkElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new FenkElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FenkClass>(reader);
+                    return new FenkElement { FenkClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FenkElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FenkElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.FenkClass != null)
+            {
+                serializer.Serialize(writer, value.FenkClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FenkElement");
+        }
+
+        public static readonly FenkElementConverter Singleton = new FenkElementConverter();
+    }
+
+    internal class FlagmakingElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(FlagmakingElement) || t == typeof(FlagmakingElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FlagmakingElement { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new FlagmakingElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FlagmakingClass>(reader);
+                    return new FlagmakingElement { FlagmakingClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FlagmakingElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FlagmakingElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.FlagmakingClass != null)
+            {
+                serializer.Serialize(writer, value.FlagmakingClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FlagmakingElement");
+        }
+
+        public static readonly FlagmakingElementConverter Singleton = new FlagmakingElementConverter();
+    }
+
+    internal class FluorometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Fluorometer) || t == typeof(Fluorometer?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Fluorometer { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fluorometer { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Fluorometer { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Fluorometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fluorometer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fluorometer");
+        }
+
+        public static readonly FluorometerConverter Singleton = new FluorometerConverter();
+    }
+
+    internal class FuzzyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Fuzzy) || t == typeof(Fuzzy?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fuzzy { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Fuzzy { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Fuzzy");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fuzzy)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fuzzy");
+        }
+
+        public static readonly FuzzyConverter Singleton = new FuzzyConverter();
+    }
+
+    internal class GardenwardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Gardenward) || t == typeof(Gardenward?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Gardenward { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Gardenward { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Gardenward { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Gardenward");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Gardenward)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Gardenward");
+        }
+
+        public static readonly GardenwardConverter Singleton = new GardenwardConverter();
+    }
+
+    internal class GeneralissimoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Generalissimo) || t == typeof(Generalissimo?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Generalissimo { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Generalissimo { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Generalissimo { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Generalissimo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Generalissimo)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Generalissimo");
+        }
+
+        public static readonly GeneralissimoConverter Singleton = new GeneralissimoConverter();
+    }
+
+    internal class HemicrystallineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Hemicrystalline) || t == typeof(Hemicrystalline?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hemicrystalline { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hemicrystalline { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hemicrystalline");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hemicrystalline)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hemicrystalline");
+        }
+
+        public static readonly HemicrystallineConverter Singleton = new HemicrystallineConverter();
+    }
+
+    internal class HemocoeleElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(HemocoeleElement) || t == typeof(HemocoeleElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<HemocoeleClass>(reader);
+                    return new HemocoeleElement { HemocoeleClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new HemocoeleElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type HemocoeleElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (HemocoeleElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.HemocoeleClass != null)
+            {
+                serializer.Serialize(writer, value.HemocoeleClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type HemocoeleElement");
+        }
+
+        public static readonly HemocoeleElementConverter Singleton = new HemocoeleElementConverter();
+    }
+
+    internal class HoisterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Hoister) || t == typeof(Hoister?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hoister { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hoister { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hoister { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hoister");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hoister)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hoister");
+        }
+
+        public static readonly HoisterConverter Singleton = new HoisterConverter();
+    }
+
+    internal class HyperpiesiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Hyperpiesi) || t == typeof(Hyperpiesi?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyperpiesi { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hyperpiesi { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Hyperpiesi { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyperpiesi");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyperpiesi)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyperpiesi");
+        }
+
+        public static readonly HyperpiesiConverter Singleton = new HyperpiesiConverter();
+    }
+
+    internal class HyppishConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Hyppish) || t == typeof(Hyppish?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyppish { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Hyppish { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hyppish { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyppish");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyppish)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyppish");
+        }
+
+        public static readonly HyppishConverter Singleton = new HyppishConverter();
+    }
+
+    internal class IdealizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Idealizer) || t == typeof(Idealizer?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Idealizer { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Idealizer { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Idealizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Idealizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Idealizer)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Idealizer");
+        }
+
+        public static readonly IdealizerConverter Singleton = new IdealizerConverter();
+    }
+
+    internal class IncrustatorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Incrustator) || t == typeof(Incrustator?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Incrustator { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Incrustator { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Incrustator { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Incrustator");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Incrustator)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Incrustator");
+        }
+
+        public static readonly IncrustatorConverter Singleton = new IncrustatorConverter();
+    }
+
+    internal class IntentivenessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Intentiveness) || t == typeof(Intentiveness?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Intentiveness { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Intentiveness { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Intentiveness { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Intentiveness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Intentiveness)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Intentiveness");
+        }
+
+        public static readonly IntentivenessConverter Singleton = new IntentivenessConverter();
+    }
+
+    internal class JacutingaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Jacutinga) || t == typeof(Jacutinga?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Jacutinga { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Jacutinga { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Jacutinga");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Jacutinga)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Jacutinga");
+        }
+
+        public static readonly JacutingaConverter Singleton = new JacutingaConverter();
+    }
+}
diff --git a/head/csharp-records/test/inputs/json/priority/combinations1.json/csharp-version-6--6a3b58bb4100/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations1.json/csharp-version-6--6a3b58bb4100/QuickType.cs
new file mode 100644
index 0000000..45c31a6
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations1.json/csharp-version-6--6a3b58bb4100/QuickType.cs
@@ -0,0 +1,2697 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("centrodesmose", Required = Required.Always)]
+        public string Centrodesmose { get; set; }
+
+        [JsonProperty("cerograph", Required = Required.Always)]
+        public CerographElement[] Cerograph { get; set; }
+
+        [JsonProperty("chemotherapeutics", Required = Required.Always)]
+        public ChemotherapeuticElement[] Chemotherapeutics { get; set; }
+
+        [JsonProperty("cimelia", Required = Required.Always)]
+        public CimeliaElement[] Cimelia { get; set; }
+
+        [JsonProperty("citrated", Required = Required.Always)]
+        public long Citrated { get; set; }
+
+        [JsonProperty("clinodome", Required = Required.Always)]
+        public Clinodome[] Clinodome { get; set; }
+
+        [JsonProperty("coadjust", Required = Required.Always)]
+        public CoadjustElement[] Coadjust { get; set; }
+
+        [JsonProperty("consilience", Required = Required.Always)]
+        public Consilience[] Consilience { get; set; }
+
+        [JsonProperty("constructor", Required = Required.Always)]
+        public Constructor[] Constructor { get; set; }
+
+        [JsonProperty("continuative", Required = Required.Always)]
+        public Continuative[] Continuative { get; set; }
+
+        [JsonProperty("credulity", Required = Required.Always)]
+        public CredulityElement[] Credulity { get; set; }
+
+        [JsonProperty("creviced", Required = Required.Always)]
+        public Creviced[] Creviced { get; set; }
+
+        [JsonProperty("cubiculum", Required = Required.Always)]
+        public long?[][] Cubiculum { get; set; }
+
+        [JsonProperty("deruralize", Required = Required.Always)]
+        public DeruralizeElement[] Deruralize { get; set; }
+
+        [JsonProperty("diaereses", Required = Required.Always)]
+        public DiaereseElement[] Diaereses { get; set; }
+
+        [JsonProperty("dissolution", Required = Required.Always)]
+        public object[][] Dissolution { get; set; }
+
+        [JsonProperty("downstroke", Required = Required.Always)]
+        public Downstroke[] Downstroke { get; set; }
+
+        [JsonProperty("electrotautomerism", Required = Required.Always)]
+        public double?[] Electrotautomerism { get; set; }
+
+        [JsonProperty("eleutheromania", Required = Required.Always)]
+        public Eleutheromania[] Eleutheromania { get; set; }
+
+        [JsonProperty("encrust", Required = Required.Always)]
+        public Encrust Encrust { get; set; }
+
+        [JsonProperty("entomoid", Required = Required.Always)]
+        public Entomoid[] Entomoid { get; set; }
+
+        [JsonProperty("epipaleolithic", Required = Required.Always)]
+        public Epipaleolithic[] Epipaleolithic { get; set; }
+
+        [JsonProperty("expropriable", Required = Required.Always)]
+        public Expropriable[] Expropriable { get; set; }
+
+        [JsonProperty("faggingly", Required = Required.Always)]
+        public FagginglyElement[] Faggingly { get; set; }
+
+        [JsonProperty("fenks", Required = Required.Always)]
+        public FenkElement[] Fenks { get; set; }
+
+        [JsonProperty("flagmaking", Required = Required.Always)]
+        public FlagmakingElement[] Flagmaking { get; set; }
+
+        [JsonProperty("fluorometer", Required = Required.Always)]
+        public Fluorometer[] Fluorometer { get; set; }
+
+        [JsonProperty("fulsome", Required = Required.Always)]
+        public long?[] Fulsome { get; set; }
+
+        [JsonProperty("fuzzy", Required = Required.Always)]
+        public Fuzzy[] Fuzzy { get; set; }
+
+        [JsonProperty("gardenwards", Required = Required.Always)]
+        public Gardenward[] Gardenwards { get; set; }
+
+        [JsonProperty("generalissimo", Required = Required.Always)]
+        public Generalissimo[] Generalissimo { get; set; }
+
+        [JsonProperty("habeas", Required = Required.Always)]
+        public Dictionary<string, long>[] Habeas { get; set; }
+
+        [JsonProperty("hemicrystalline", Required = Required.Always)]
+        public Hemicrystalline[] Hemicrystalline { get; set; }
+
+        [JsonProperty("hemocoele", Required = Required.Always)]
+        public HemocoeleElement[] Hemocoele { get; set; }
+
+        [JsonProperty("hoister", Required = Required.Always)]
+        public Hoister[] Hoister { get; set; }
+
+        [JsonProperty("hyperpiesis", Required = Required.Always)]
+        public Hyperpiesi[] Hyperpiesis { get; set; }
+
+        [JsonProperty("hyppish", Required = Required.Always)]
+        public Hyppish[] Hyppish { get; set; }
+
+        [JsonProperty("idealizer", Required = Required.Always)]
+        public Idealizer[] Idealizer { get; set; }
+
+        [JsonProperty("incrustator", Required = Required.Always)]
+        public Incrustator[] Incrustator { get; set; }
+
+        [JsonProperty("intentiveness", Required = Required.Always)]
+        public Intentiveness[] Intentiveness { get; set; }
+
+        [JsonProperty("interacinar", Required = Required.Always)]
+        public Interacinar Interacinar { get; set; }
+
+        [JsonProperty("intercorrelation", Required = Required.Always)]
+        public long[][] Intercorrelation { get; set; }
+
+        [JsonProperty("jacutinga", Required = Required.Always)]
+        public Jacutinga[] Jacutinga { get; set; }
+    }
+
+    public partial record CerographClass
+    {
+        [JsonProperty("apotropaion", Required = Required.AllowNull)]
+        public object Apotropaion { get; set; }
+
+        [JsonProperty("casuary", Required = Required.AllowNull)]
+        public object Casuary { get; set; }
+
+        [JsonProperty("creaker", Required = Required.AllowNull)]
+        public object Creaker { get; set; }
+
+        [JsonProperty("disqualification", Required = Required.AllowNull)]
+        public object Disqualification { get; set; }
+
+        [JsonProperty("imperatorious", Required = Required.AllowNull)]
+        public object Imperatorious { get; set; }
+
+        [JsonProperty("impermeabilize", Required = Required.AllowNull)]
+        public object Impermeabilize { get; set; }
+
+        [JsonProperty("metastoma", Required = Required.AllowNull)]
+        public object Metastoma { get; set; }
+
+        [JsonProperty("noctidiurnal", Required = Required.AllowNull)]
+        public object Noctidiurnal { get; set; }
+
+        [JsonProperty("nonreserve", Required = Required.AllowNull)]
+        public object Nonreserve { get; set; }
+
+        [JsonProperty("ophthalmotonometry", Required = Required.AllowNull)]
+        public object Ophthalmotonometry { get; set; }
+
+        [JsonProperty("pailful", Required = Required.AllowNull)]
+        public object Pailful { get; set; }
+
+        [JsonProperty("pigfish", Required = Required.AllowNull)]
+        public object Pigfish { get; set; }
+
+        [JsonProperty("pongee", Required = Required.AllowNull)]
+        public object Pongee { get; set; }
+
+        [JsonProperty("prosodical", Required = Required.AllowNull)]
+        public object Prosodical { get; set; }
+
+        [JsonProperty("scrofuloderm", Required = Required.AllowNull)]
+        public object Scrofuloderm { get; set; }
+
+        [JsonProperty("storekeeping", Required = Required.AllowNull)]
+        public object Storekeeping { get; set; }
+
+        [JsonProperty("therologist", Required = Required.AllowNull)]
+        public object Therologist { get; set; }
+
+        [JsonProperty("Tolowa", Required = Required.AllowNull)]
+        public object Tolowa { get; set; }
+
+        [JsonProperty("tradeful", Required = Required.AllowNull)]
+        public object Tradeful { get; set; }
+
+        [JsonProperty("unriveting", Required = Required.AllowNull)]
+        public object Unriveting { get; set; }
+    }
+
+    public partial record ChemotherapeuticClass
+    {
+        [JsonProperty("angioneurotic")]
+        public object Angioneurotic { get; set; }
+
+        [JsonProperty("availment")]
+        public object Availment { get; set; }
+
+        [JsonProperty("bladelet")]
+        public object Bladelet { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("caulis")]
+        public object Caulis { get; set; }
+
+        [JsonProperty("chalcus")]
+        public object Chalcus { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("enteradenological")]
+        public object Enteradenological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("imporosity")]
+        public object Imporosity { get; set; }
+
+        [JsonProperty("insistently")]
+        public object Insistently { get; set; }
+
+        [JsonProperty("intraparietal")]
+        public object Intraparietal { get; set; }
+
+        [JsonProperty("ivied")]
+        public object Ivied { get; set; }
+
+        [JsonProperty("Maureen")]
+        public object Maureen { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("nostochine")]
+        public object Nostochine { get; set; }
+
+        [JsonProperty("nutcracker")]
+        public object Nutcracker { get; set; }
+
+        [JsonProperty("ofttimes")]
+        public object Ofttimes { get; set; }
+
+        [JsonProperty("phenocryst")]
+        public object Phenocryst { get; set; }
+
+        [JsonProperty("precoincident")]
+        public object Precoincident { get; set; }
+
+        [JsonProperty("ramiferous")]
+        public object Ramiferous { get; set; }
+
+        [JsonProperty("stagmometer")]
+        public object Stagmometer { get; set; }
+
+        [JsonProperty("tetherball")]
+        public object Tetherball { get; set; }
+
+        [JsonProperty("unshy")]
+        public object Unshy { get; set; }
+    }
+
+    public partial record CimeliaClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record CoadjustClass
+    {
+        [JsonProperty("amidosulphonal")]
+        public object Amidosulphonal { get; set; }
+
+        [JsonProperty("Benny")]
+        public object Benny { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("ensnare")]
+        public object Ensnare { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hybridizer")]
+        public object Hybridizer { get; set; }
+
+        [JsonProperty("leastwise")]
+        public object Leastwise { get; set; }
+
+        [JsonProperty("lof")]
+        public object Lof { get; set; }
+
+        [JsonProperty("monkhood")]
+        public object Monkhood { get; set; }
+
+        [JsonProperty("Netherlandish")]
+        public object Netherlandish { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("peonism")]
+        public object Peonism { get; set; }
+
+        [JsonProperty("Phonelescope")]
+        public object Phonelescope { get; set; }
+
+        [JsonProperty("porphyrogeniture")]
+        public object Porphyrogeniture { get; set; }
+
+        [JsonProperty("preindemnify")]
+        public object Preindemnify { get; set; }
+
+        [JsonProperty("rosal")]
+        public object Rosal { get; set; }
+
+        [JsonProperty("scalenous")]
+        public object Scalenous { get; set; }
+
+        [JsonProperty("scopine")]
+        public object Scopine { get; set; }
+
+        [JsonProperty("Sedaceae")]
+        public object Sedaceae { get; set; }
+
+        [JsonProperty("suberinize")]
+        public object Suberinize { get; set; }
+
+        [JsonProperty("symbiot")]
+        public object Symbiot { get; set; }
+
+        [JsonProperty("tablefellow")]
+        public object Tablefellow { get; set; }
+
+        [JsonProperty("unchargeable")]
+        public object Unchargeable { get; set; }
+    }
+
+    public partial record CredulityClass
+    {
+        [JsonProperty("ammonolytic", Required = Required.AllowNull)]
+        public object Ammonolytic { get; set; }
+
+        [JsonProperty("bushmaster", Required = Required.AllowNull)]
+        public object Bushmaster { get; set; }
+
+        [JsonProperty("considering", Required = Required.AllowNull)]
+        public object Considering { get; set; }
+
+        [JsonProperty("consuetudinary", Required = Required.AllowNull)]
+        public object Consuetudinary { get; set; }
+
+        [JsonProperty("embarras", Required = Required.AllowNull)]
+        public object Embarras { get; set; }
+
+        [JsonProperty("fineness", Required = Required.AllowNull)]
+        public object Fineness { get; set; }
+
+        [JsonProperty("flaithship", Required = Required.AllowNull)]
+        public object Flaithship { get; set; }
+
+        [JsonProperty("Flavia", Required = Required.AllowNull)]
+        public object Flavia { get; set; }
+
+        [JsonProperty("gruffly", Required = Required.AllowNull)]
+        public object Gruffly { get; set; }
+
+        [JsonProperty("Hedychium", Required = Required.AllowNull)]
+        public object Hedychium { get; set; }
+
+        [JsonProperty("leadwort", Required = Required.AllowNull)]
+        public object Leadwort { get; set; }
+
+        [JsonProperty("overseriously", Required = Required.AllowNull)]
+        public object Overseriously { get; set; }
+
+        [JsonProperty("parabola", Required = Required.AllowNull)]
+        public object Parabola { get; set; }
+
+        [JsonProperty("pectinatodenticulate", Required = Required.AllowNull)]
+        public object Pectinatodenticulate { get; set; }
+
+        [JsonProperty("Popean", Required = Required.AllowNull)]
+        public object Popean { get; set; }
+
+        [JsonProperty("pornocrat", Required = Required.AllowNull)]
+        public object Pornocrat { get; set; }
+
+        [JsonProperty("quadrisect", Required = Required.AllowNull)]
+        public object Quadrisect { get; set; }
+
+        [JsonProperty("seriality", Required = Required.AllowNull)]
+        public object Seriality { get; set; }
+
+        [JsonProperty("vamphorn", Required = Required.AllowNull)]
+        public object Vamphorn { get; set; }
+
+        [JsonProperty("wharp", Required = Required.AllowNull)]
+        public object Wharp { get; set; }
+    }
+
+    public partial record DeruralizeClass
+    {
+        [JsonProperty("bockerel", Required = Required.AllowNull)]
+        public object Bockerel { get; set; }
+
+        [JsonProperty("boulder", Required = Required.AllowNull)]
+        public object Boulder { get; set; }
+
+        [JsonProperty("churrus", Required = Required.AllowNull)]
+        public object Churrus { get; set; }
+
+        [JsonProperty("counterdigged", Required = Required.AllowNull)]
+        public object Counterdigged { get; set; }
+
+        [JsonProperty("dialogite", Required = Required.AllowNull)]
+        public object Dialogite { get; set; }
+
+        [JsonProperty("digenic", Required = Required.AllowNull)]
+        public object Digenic { get; set; }
+
+        [JsonProperty("dunbird", Required = Required.AllowNull)]
+        public object Dunbird { get; set; }
+
+        [JsonProperty("ergatogyne", Required = Required.AllowNull)]
+        public object Ergatogyne { get; set; }
+
+        [JsonProperty("fiendful", Required = Required.AllowNull)]
+        public object Fiendful { get; set; }
+
+        [JsonProperty("jackrod", Required = Required.AllowNull)]
+        public object Jackrod { get; set; }
+
+        [JsonProperty("Jehovistic", Required = Required.AllowNull)]
+        public object Jehovistic { get; set; }
+
+        [JsonProperty("Paninean", Required = Required.AllowNull)]
+        public object Paninean { get; set; }
+
+        [JsonProperty("panther", Required = Required.AllowNull)]
+        public object Panther { get; set; }
+
+        [JsonProperty("placentigerous", Required = Required.AllowNull)]
+        public object Placentigerous { get; set; }
+
+        [JsonProperty("Romney", Required = Required.AllowNull)]
+        public object Romney { get; set; }
+
+        [JsonProperty("sparm", Required = Required.AllowNull)]
+        public object Sparm { get; set; }
+
+        [JsonProperty("tocsin", Required = Required.AllowNull)]
+        public object Tocsin { get; set; }
+
+        [JsonProperty("unnicked", Required = Required.AllowNull)]
+        public object Unnicked { get; set; }
+
+        [JsonProperty("unstavable", Required = Required.AllowNull)]
+        public object Unstavable { get; set; }
+
+        [JsonProperty("windfirm", Required = Required.AllowNull)]
+        public object Windfirm { get; set; }
+    }
+
+    public partial record DiaereseClass
+    {
+        [JsonProperty("Amoreuxia", Required = Required.AllowNull)]
+        public object Amoreuxia { get; set; }
+
+        [JsonProperty("ani", Required = Required.AllowNull)]
+        public object Ani { get; set; }
+
+        [JsonProperty("bernicle", Required = Required.AllowNull)]
+        public object Bernicle { get; set; }
+
+        [JsonProperty("blackwasher", Required = Required.AllowNull)]
+        public object Blackwasher { get; set; }
+
+        [JsonProperty("blowhard", Required = Required.AllowNull)]
+        public object Blowhard { get; set; }
+
+        [JsonProperty("broma", Required = Required.AllowNull)]
+        public object Broma { get; set; }
+
+        [JsonProperty("closecross", Required = Required.AllowNull)]
+        public object Closecross { get; set; }
+
+        [JsonProperty("congregationalism", Required = Required.AllowNull)]
+        public object Congregationalism { get; set; }
+
+        [JsonProperty("grayly", Required = Required.AllowNull)]
+        public object Grayly { get; set; }
+
+        [JsonProperty("historically", Required = Required.AllowNull)]
+        public object Historically { get; set; }
+
+        [JsonProperty("hoast", Required = Required.AllowNull)]
+        public object Hoast { get; set; }
+
+        [JsonProperty("irretentive", Required = Required.AllowNull)]
+        public object Irretentive { get; set; }
+
+        [JsonProperty("parcener", Required = Required.AllowNull)]
+        public object Parcener { get; set; }
+
+        [JsonProperty("pedder", Required = Required.AllowNull)]
+        public object Pedder { get; set; }
+
+        [JsonProperty("pseudoanatomic", Required = Required.AllowNull)]
+        public object Pseudoanatomic { get; set; }
+
+        [JsonProperty("rhizocarpian", Required = Required.AllowNull)]
+        public object Rhizocarpian { get; set; }
+
+        [JsonProperty("samel", Required = Required.AllowNull)]
+        public object Samel { get; set; }
+
+        [JsonProperty("silker", Required = Required.AllowNull)]
+        public object Silker { get; set; }
+
+        [JsonProperty("subdentated", Required = Required.AllowNull)]
+        public object Subdentated { get; set; }
+
+        [JsonProperty("subobscure", Required = Required.AllowNull)]
+        public object Subobscure { get; set; }
+    }
+
+    public partial record Encrust
+    {
+        [JsonProperty("comradely", Required = Required.AllowNull)]
+        public object Comradely { get; set; }
+
+        [JsonProperty("diacanthous", Required = Required.AllowNull)]
+        public object Diacanthous { get; set; }
+
+        [JsonProperty("feminineness", Required = Required.AllowNull)]
+        public object Feminineness { get; set; }
+
+        [JsonProperty("gossamered", Required = Required.AllowNull)]
+        public object Gossamered { get; set; }
+
+        [JsonProperty("Hibernia", Required = Required.AllowNull)]
+        public object Hibernia { get; set; }
+
+        [JsonProperty("Hibiscus", Required = Required.AllowNull)]
+        public object Hibiscus { get; set; }
+
+        [JsonProperty("Lepidosauria", Required = Required.AllowNull)]
+        public object Lepidosauria { get; set; }
+
+        [JsonProperty("lollingly", Required = Required.AllowNull)]
+        public object Lollingly { get; set; }
+
+        [JsonProperty("manager", Required = Required.AllowNull)]
+        public object Manager { get; set; }
+
+        [JsonProperty("mechanic", Required = Required.AllowNull)]
+        public object Mechanic { get; set; }
+
+        [JsonProperty("overminuteness", Required = Required.AllowNull)]
+        public object Overminuteness { get; set; }
+
+        [JsonProperty("papelonne", Required = Required.AllowNull)]
+        public object Papelonne { get; set; }
+
+        [JsonProperty("plebification", Required = Required.AllowNull)]
+        public object Plebification { get; set; }
+
+        [JsonProperty("pugmiller", Required = Required.AllowNull)]
+        public object Pugmiller { get; set; }
+
+        [JsonProperty("recoveror", Required = Required.AllowNull)]
+        public object Recoveror { get; set; }
+
+        [JsonProperty("spermatoblastic", Required = Required.AllowNull)]
+        public object Spermatoblastic { get; set; }
+
+        [JsonProperty("Syllidae", Required = Required.AllowNull)]
+        public object Syllidae { get; set; }
+
+        [JsonProperty("ungyved", Required = Required.AllowNull)]
+        public object Ungyved { get; set; }
+
+        [JsonProperty("whirlabout", Required = Required.AllowNull)]
+        public object Whirlabout { get; set; }
+
+        [JsonProperty("woodenware", Required = Required.AllowNull)]
+        public object Woodenware { get; set; }
+    }
+
+    public partial record FagginglyClass
+    {
+        [JsonProperty("abranchian", Required = Required.AllowNull)]
+        public object Abranchian { get; set; }
+
+        [JsonProperty("aculeiform", Required = Required.AllowNull)]
+        public object Aculeiform { get; set; }
+
+        [JsonProperty("adiaphoristic", Required = Required.AllowNull)]
+        public object Adiaphoristic { get; set; }
+
+        [JsonProperty("adoptionism", Required = Required.AllowNull)]
+        public object Adoptionism { get; set; }
+
+        [JsonProperty("Anglic", Required = Required.AllowNull)]
+        public object Anglic { get; set; }
+
+        [JsonProperty("antrotomy", Required = Required.AllowNull)]
+        public object Antrotomy { get; set; }
+
+        [JsonProperty("coerciveness", Required = Required.AllowNull)]
+        public object Coerciveness { get; set; }
+
+        [JsonProperty("decorist", Required = Required.AllowNull)]
+        public object Decorist { get; set; }
+
+        [JsonProperty("duckhood", Required = Required.AllowNull)]
+        public object Duckhood { get; set; }
+
+        [JsonProperty("Heteromeri", Required = Required.AllowNull)]
+        public object Heteromeri { get; set; }
+
+        [JsonProperty("hypochnose", Required = Required.AllowNull)]
+        public object Hypochnose { get; set; }
+
+        [JsonProperty("lochage", Required = Required.AllowNull)]
+        public object Lochage { get; set; }
+
+        [JsonProperty("melee", Required = Required.AllowNull)]
+        public object Melee { get; set; }
+
+        [JsonProperty("nonconformitant", Required = Required.AllowNull)]
+        public object Nonconformitant { get; set; }
+
+        [JsonProperty("Poinsettia", Required = Required.AllowNull)]
+        public object Poinsettia { get; set; }
+
+        [JsonProperty("putatively", Required = Required.AllowNull)]
+        public object Putatively { get; set; }
+
+        [JsonProperty("semivolatile", Required = Required.AllowNull)]
+        public object Semivolatile { get; set; }
+
+        [JsonProperty("soleas", Required = Required.AllowNull)]
+        public object Soleas { get; set; }
+
+        [JsonProperty("unfastenable", Required = Required.AllowNull)]
+        public object Unfastenable { get; set; }
+
+        [JsonProperty("unmillinered", Required = Required.AllowNull)]
+        public object Unmillinered { get; set; }
+    }
+
+    public partial record FenkClass
+    {
+        [JsonProperty("apoise", Required = Required.AllowNull)]
+        public object Apoise { get; set; }
+
+        [JsonProperty("astronomize", Required = Required.AllowNull)]
+        public object Astronomize { get; set; }
+
+        [JsonProperty("cockhorse", Required = Required.AllowNull)]
+        public object Cockhorse { get; set; }
+
+        [JsonProperty("copular", Required = Required.AllowNull)]
+        public object Copular { get; set; }
+
+        [JsonProperty("Dagomba", Required = Required.AllowNull)]
+        public object Dagomba { get; set; }
+
+        [JsonProperty("draffy", Required = Required.AllowNull)]
+        public object Draffy { get; set; }
+
+        [JsonProperty("foreigner", Required = Required.AllowNull)]
+        public object Foreigner { get; set; }
+
+        [JsonProperty("Guyandot", Required = Required.AllowNull)]
+        public object Guyandot { get; set; }
+
+        [JsonProperty("neurogliosis", Required = Required.AllowNull)]
+        public object Neurogliosis { get; set; }
+
+        [JsonProperty("osmious", Required = Required.AllowNull)]
+        public object Osmious { get; set; }
+
+        [JsonProperty("palpitate", Required = Required.AllowNull)]
+        public object Palpitate { get; set; }
+
+        [JsonProperty("rebukeable", Required = Required.AllowNull)]
+        public object Rebukeable { get; set; }
+
+        [JsonProperty("Reinwardtia", Required = Required.AllowNull)]
+        public object Reinwardtia { get; set; }
+
+        [JsonProperty("reservatory", Required = Required.AllowNull)]
+        public object Reservatory { get; set; }
+
+        [JsonProperty("scalt", Required = Required.AllowNull)]
+        public object Scalt { get; set; }
+
+        [JsonProperty("scripturalize", Required = Required.AllowNull)]
+        public object Scripturalize { get; set; }
+
+        [JsonProperty("tintometer", Required = Required.AllowNull)]
+        public object Tintometer { get; set; }
+
+        [JsonProperty("Tritoness", Required = Required.AllowNull)]
+        public object Tritoness { get; set; }
+
+        [JsonProperty("undergrade", Required = Required.AllowNull)]
+        public object Undergrade { get; set; }
+
+        [JsonProperty("undermountain", Required = Required.AllowNull)]
+        public object Undermountain { get; set; }
+    }
+
+    public partial record FlagmakingClass
+    {
+        [JsonProperty("albarco", Required = Required.AllowNull)]
+        public object Albarco { get; set; }
+
+        [JsonProperty("Bunodonta", Required = Required.AllowNull)]
+        public object Bunodonta { get; set; }
+
+        [JsonProperty("hornify", Required = Required.AllowNull)]
+        public object Hornify { get; set; }
+
+        [JsonProperty("Hydrocorisae", Required = Required.AllowNull)]
+        public object Hydrocorisae { get; set; }
+
+        [JsonProperty("hypoglossus", Required = Required.AllowNull)]
+        public object Hypoglossus { get; set; }
+
+        [JsonProperty("inexpiably", Required = Required.AllowNull)]
+        public object Inexpiably { get; set; }
+
+        [JsonProperty("ingratitude", Required = Required.AllowNull)]
+        public object Ingratitude { get; set; }
+
+        [JsonProperty("ladyfly", Required = Required.AllowNull)]
+        public object Ladyfly { get; set; }
+
+        [JsonProperty("medicament", Required = Required.AllowNull)]
+        public object Medicament { get; set; }
+
+        [JsonProperty("monogrammatic", Required = Required.AllowNull)]
+        public object Monogrammatic { get; set; }
+
+        [JsonProperty("nobbut", Required = Required.AllowNull)]
+        public object Nobbut { get; set; }
+
+        [JsonProperty("Notacanthidae", Required = Required.AllowNull)]
+        public object Notacanthidae { get; set; }
+
+        [JsonProperty("polyplacophore", Required = Required.AllowNull)]
+        public object Polyplacophore { get; set; }
+
+        [JsonProperty("proexercise", Required = Required.AllowNull)]
+        public object Proexercise { get; set; }
+
+        [JsonProperty("protoplast", Required = Required.AllowNull)]
+        public object Protoplast { get; set; }
+
+        [JsonProperty("puzzling", Required = Required.AllowNull)]
+        public object Puzzling { get; set; }
+
+        [JsonProperty("splanchnoskeleton", Required = Required.AllowNull)]
+        public object Splanchnoskeleton { get; set; }
+
+        [JsonProperty("unloveliness", Required = Required.AllowNull)]
+        public object Unloveliness { get; set; }
+
+        [JsonProperty("unquarantined", Required = Required.AllowNull)]
+        public object Unquarantined { get; set; }
+
+        [JsonProperty("unrenounceable", Required = Required.AllowNull)]
+        public object Unrenounceable { get; set; }
+    }
+
+    public partial record HemocoeleClass
+    {
+        [JsonProperty("acrogamy")]
+        public object Acrogamy { get; set; }
+
+        [JsonProperty("amelification")]
+        public object Amelification { get; set; }
+
+        [JsonProperty("autobiographic")]
+        public object Autobiographic { get; set; }
+
+        [JsonProperty("berat")]
+        public object Berat { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("disproportionably")]
+        public object Disproportionably { get; set; }
+
+        [JsonProperty("erythrite")]
+        public object Erythrite { get; set; }
+
+        [JsonProperty("graphic")]
+        public object Graphic { get; set; }
+
+        [JsonProperty("hepatological")]
+        public object Hepatological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("incommensurably")]
+        public object Incommensurably { get; set; }
+
+        [JsonProperty("misaffirm")]
+        public object Misaffirm { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("pocketbook")]
+        public object Pocketbook { get; set; }
+
+        [JsonProperty("sclerometric")]
+        public object Sclerometric { get; set; }
+
+        [JsonProperty("stambouline")]
+        public object Stambouline { get; set; }
+
+        [JsonProperty("stickpin")]
+        public object Stickpin { get; set; }
+
+        [JsonProperty("tubulure")]
+        public object Tubulure { get; set; }
+
+        [JsonProperty("undelated")]
+        public object Undelated { get; set; }
+
+        [JsonProperty("unsalt")]
+        public object Unsalt { get; set; }
+
+        [JsonProperty("untutelar")]
+        public object Untutelar { get; set; }
+
+        [JsonProperty("vagrant")]
+        public object Vagrant { get; set; }
+
+        [JsonProperty("Walt")]
+        public object Walt { get; set; }
+    }
+
+    public partial record Interacinar
+    {
+        [JsonProperty("assapan", Required = Required.Always)]
+        public double Assapan { get; set; }
+
+        [JsonProperty("benefactorship", Required = Required.Always)]
+        public bool Benefactorship { get; set; }
+
+        [JsonProperty("triseriatim", Required = Required.Always)]
+        public string Triseriatim { get; set; }
+
+        [JsonProperty("tubbing", Required = Required.Always)]
+        public long Tubbing { get; set; }
+
+        [JsonProperty("untrimmed", Required = Required.AllowNull)]
+        public object Untrimmed { get; set; }
+    }
+
+    public partial struct CerographElement
+    {
+        public CerographClass CerographClass;
+        public string String;
+
+        public static implicit operator CerographElement(CerographClass CerographClass) => new CerographElement { CerographClass = CerographClass };
+        public static implicit operator CerographElement(string String) => new CerographElement { String = String };
+        public bool IsNull => CerographClass == null && String == null;
+    }
+
+    public partial struct ChemotherapeuticElement
+    {
+        public ChemotherapeuticClass ChemotherapeuticClass;
+        public long? Integer;
+
+        public static implicit operator ChemotherapeuticElement(ChemotherapeuticClass ChemotherapeuticClass) => new ChemotherapeuticElement { ChemotherapeuticClass = ChemotherapeuticClass };
+        public static implicit operator ChemotherapeuticElement(long Integer) => new ChemotherapeuticElement { Integer = Integer };
+    }
+
+    public partial struct CimeliaElement
+    {
+        public CimeliaClass CimeliaClass;
+        public long[] IntegerArray;
+
+        public static implicit operator CimeliaElement(CimeliaClass CimeliaClass) => new CimeliaElement { CimeliaClass = CimeliaClass };
+        public static implicit operator CimeliaElement(long[] IntegerArray) => new CimeliaElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Clinodome
+    {
+        public double? Double;
+        public string String;
+
+        public static implicit operator Clinodome(double Double) => new Clinodome { Double = Double };
+        public static implicit operator Clinodome(string String) => new Clinodome { String = String };
+    }
+
+    public partial struct CoadjustElement
+    {
+        public CoadjustClass CoadjustClass;
+        public double? Double;
+
+        public static implicit operator CoadjustElement(CoadjustClass CoadjustClass) => new CoadjustElement { CoadjustClass = CoadjustClass };
+        public static implicit operator CoadjustElement(double Double) => new CoadjustElement { Double = Double };
+    }
+
+    public partial struct Consilience
+    {
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Consilience(double Double) => new Consilience { Double = Double };
+        public static implicit operator Consilience(Dictionary<string, long> IntegerMap) => new Consilience { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Constructor
+    {
+        public bool? Bool;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Constructor(bool Bool) => new Constructor { Bool = Bool };
+        public static implicit operator Constructor(Dictionary<string, long?> UnionMap) => new Constructor { UnionMap = UnionMap };
+    }
+
+    public partial struct Continuative
+    {
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Continuative(Dictionary<string, long> IntegerMap) => new Continuative { IntegerMap = IntegerMap };
+        public static implicit operator Continuative(string String) => new Continuative { String = String };
+    }
+
+    public partial struct CredulityElement
+    {
+        public CredulityClass CredulityClass;
+        public long? Integer;
+        public string String;
+
+        public static implicit operator CredulityElement(CredulityClass CredulityClass) => new CredulityElement { CredulityClass = CredulityClass };
+        public static implicit operator CredulityElement(long Integer) => new CredulityElement { Integer = Integer };
+        public static implicit operator CredulityElement(string String) => new CredulityElement { String = String };
+    }
+
+    public partial struct Creviced
+    {
+        public bool? Bool;
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Creviced(bool Bool) => new Creviced { Bool = Bool };
+        public static implicit operator Creviced(Dictionary<string, long> IntegerMap) => new Creviced { IntegerMap = IntegerMap };
+        public static implicit operator Creviced(string String) => new Creviced { String = String };
+    }
+
+    public partial struct DeruralizeElement
+    {
+        public bool? Bool;
+        public DeruralizeClass DeruralizeClass;
+        public object[] NullArray;
+
+        public static implicit operator DeruralizeElement(bool Bool) => new DeruralizeElement { Bool = Bool };
+        public static implicit operator DeruralizeElement(DeruralizeClass DeruralizeClass) => new DeruralizeElement { DeruralizeClass = DeruralizeClass };
+        public static implicit operator DeruralizeElement(object[] NullArray) => new DeruralizeElement { NullArray = NullArray };
+    }
+
+    public partial struct DiaereseElement
+    {
+        public bool? Bool;
+        public DiaereseClass DiaereseClass;
+        public long[] IntegerArray;
+
+        public static implicit operator DiaereseElement(bool Bool) => new DiaereseElement { Bool = Bool };
+        public static implicit operator DiaereseElement(DiaereseClass DiaereseClass) => new DiaereseElement { DiaereseClass = DiaereseClass };
+        public static implicit operator DiaereseElement(long[] IntegerArray) => new DiaereseElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Downstroke
+    {
+        public bool? Bool;
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Downstroke(bool Bool) => new Downstroke { Bool = Bool };
+        public static implicit operator Downstroke(object[] NullArray) => new Downstroke { NullArray = NullArray };
+        public static implicit operator Downstroke(string String) => new Downstroke { String = String };
+    }
+
+    public partial struct Eleutheromania
+    {
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Eleutheromania(double Double) => new Eleutheromania { Double = Double };
+        public static implicit operator Eleutheromania(Dictionary<string, long> IntegerMap) => new Eleutheromania { IntegerMap = IntegerMap };
+        public static implicit operator Eleutheromania(string String) => new Eleutheromania { String = String };
+    }
+
+    public partial struct Entomoid
+    {
+        public CimeliaClass CimeliaClass;
+        public long? Integer;
+
+        public static implicit operator Entomoid(CimeliaClass CimeliaClass) => new Entomoid { CimeliaClass = CimeliaClass };
+        public static implicit operator Entomoid(long Integer) => new Entomoid { Integer = Integer };
+    }
+
+    public partial struct Epipaleolithic
+    {
+        public double? Double;
+        public long[] IntegerArray;
+
+        public static implicit operator Epipaleolithic(double Double) => new Epipaleolithic { Double = Double };
+        public static implicit operator Epipaleolithic(long[] IntegerArray) => new Epipaleolithic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Expropriable
+    {
+        public CimeliaClass CimeliaClass;
+        public double? Double;
+        public object[] NullArray;
+
+        public static implicit operator Expropriable(CimeliaClass CimeliaClass) => new Expropriable { CimeliaClass = CimeliaClass };
+        public static implicit operator Expropriable(double Double) => new Expropriable { Double = Double };
+        public static implicit operator Expropriable(object[] NullArray) => new Expropriable { NullArray = NullArray };
+    }
+
+    public partial struct FagginglyElement
+    {
+        public double? Double;
+        public FagginglyClass FagginglyClass;
+
+        public static implicit operator FagginglyElement(double Double) => new FagginglyElement { Double = Double };
+        public static implicit operator FagginglyElement(FagginglyClass FagginglyClass) => new FagginglyElement { FagginglyClass = FagginglyClass };
+    }
+
+    public partial struct FenkElement
+    {
+        public FenkClass FenkClass;
+        public string String;
+
+        public static implicit operator FenkElement(FenkClass FenkClass) => new FenkElement { FenkClass = FenkClass };
+        public static implicit operator FenkElement(string String) => new FenkElement { String = String };
+    }
+
+    public partial struct FlagmakingElement
+    {
+        public bool? Bool;
+        public double? Double;
+        public FlagmakingClass FlagmakingClass;
+
+        public static implicit operator FlagmakingElement(bool Bool) => new FlagmakingElement { Bool = Bool };
+        public static implicit operator FlagmakingElement(double Double) => new FlagmakingElement { Double = Double };
+        public static implicit operator FlagmakingElement(FlagmakingClass FlagmakingClass) => new FlagmakingElement { FlagmakingClass = FlagmakingClass };
+    }
+
+    public partial struct Fluorometer
+    {
+        public long? Integer;
+        public string String;
+
+        public static implicit operator Fluorometer(long Integer) => new Fluorometer { Integer = Integer };
+        public static implicit operator Fluorometer(string String) => new Fluorometer { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial struct Fuzzy
+    {
+        public long? Integer;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Fuzzy(long Integer) => new Fuzzy { Integer = Integer };
+        public static implicit operator Fuzzy(Dictionary<string, long?> UnionMap) => new Fuzzy { UnionMap = UnionMap };
+    }
+
+    public partial struct Gardenward
+    {
+        public bool? Bool;
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator Gardenward(bool Bool) => new Gardenward { Bool = Bool };
+        public static implicit operator Gardenward(long[] IntegerArray) => new Gardenward { IntegerArray = IntegerArray };
+        public static implicit operator Gardenward(string String) => new Gardenward { String = String };
+    }
+
+    public partial struct Generalissimo
+    {
+        public bool? Bool;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Generalissimo(bool Bool) => new Generalissimo { Bool = Bool };
+        public static implicit operator Generalissimo(Dictionary<string, long> IntegerMap) => new Generalissimo { IntegerMap = IntegerMap };
+        public bool IsNull => Bool == null && IntegerMap == null;
+    }
+
+    public partial struct Hemicrystalline
+    {
+        public CimeliaClass CimeliaClass;
+        public string String;
+
+        public static implicit operator Hemicrystalline(CimeliaClass CimeliaClass) => new Hemicrystalline { CimeliaClass = CimeliaClass };
+        public static implicit operator Hemicrystalline(string String) => new Hemicrystalline { String = String };
+    }
+
+    public partial struct HemocoeleElement
+    {
+        public HemocoeleClass HemocoeleClass;
+        public long[] IntegerArray;
+
+        public static implicit operator HemocoeleElement(HemocoeleClass HemocoeleClass) => new HemocoeleElement { HemocoeleClass = HemocoeleClass };
+        public static implicit operator HemocoeleElement(long[] IntegerArray) => new HemocoeleElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Hoister
+    {
+        public CimeliaClass CimeliaClass;
+        public string String;
+
+        public static implicit operator Hoister(CimeliaClass CimeliaClass) => new Hoister { CimeliaClass = CimeliaClass };
+        public static implicit operator Hoister(string String) => new Hoister { String = String };
+        public bool IsNull => CimeliaClass == null && String == null;
+    }
+
+    public partial struct Hyperpiesi
+    {
+        public CimeliaClass CimeliaClass;
+        public object[] NullArray;
+
+        public static implicit operator Hyperpiesi(CimeliaClass CimeliaClass) => new Hyperpiesi { CimeliaClass = CimeliaClass };
+        public static implicit operator Hyperpiesi(object[] NullArray) => new Hyperpiesi { NullArray = NullArray };
+        public bool IsNull => NullArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Hyppish
+    {
+        public bool? Bool;
+        public string String;
+
+        public static implicit operator Hyppish(bool Bool) => new Hyppish { Bool = Bool };
+        public static implicit operator Hyppish(string String) => new Hyppish { String = String };
+        public bool IsNull => Bool == null && String == null;
+    }
+
+    public partial struct Idealizer
+    {
+        public CimeliaClass CimeliaClass;
+        public long? Integer;
+        public object[] NullArray;
+
+        public static implicit operator Idealizer(CimeliaClass CimeliaClass) => new Idealizer { CimeliaClass = CimeliaClass };
+        public static implicit operator Idealizer(long Integer) => new Idealizer { Integer = Integer };
+        public static implicit operator Idealizer(object[] NullArray) => new Idealizer { NullArray = NullArray };
+    }
+
+    public partial struct Incrustator
+    {
+        public long? Integer;
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator Incrustator(long Integer) => new Incrustator { Integer = Integer };
+        public static implicit operator Incrustator(long[] IntegerArray) => new Incrustator { IntegerArray = IntegerArray };
+        public static implicit operator Incrustator(string String) => new Incrustator { String = String };
+    }
+
+    public partial struct Intentiveness
+    {
+        public CimeliaClass CimeliaClass;
+        public double? Double;
+        public string String;
+
+        public static implicit operator Intentiveness(CimeliaClass CimeliaClass) => new Intentiveness { CimeliaClass = CimeliaClass };
+        public static implicit operator Intentiveness(double Double) => new Intentiveness { Double = Double };
+        public static implicit operator Intentiveness(string String) => new Intentiveness { String = String };
+    }
+
+    public partial struct Jacutinga
+    {
+        public long[] IntegerArray;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Jacutinga(long[] IntegerArray) => new Jacutinga { IntegerArray = IntegerArray };
+        public static implicit operator Jacutinga(Dictionary<string, long?> UnionMap) => new Jacutinga { UnionMap = UnionMap };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CerographElementConverter.Singleton,
+                ChemotherapeuticElementConverter.Singleton,
+                CimeliaElementConverter.Singleton,
+                ClinodomeConverter.Singleton,
+                CoadjustElementConverter.Singleton,
+                ConsilienceConverter.Singleton,
+                ConstructorConverter.Singleton,
+                ContinuativeConverter.Singleton,
+                CredulityElementConverter.Singleton,
+                CrevicedConverter.Singleton,
+                DeruralizeElementConverter.Singleton,
+                DiaereseElementConverter.Singleton,
+                DownstrokeConverter.Singleton,
+                EleutheromaniaConverter.Singleton,
+                EntomoidConverter.Singleton,
+                EpipaleolithicConverter.Singleton,
+                ExpropriableConverter.Singleton,
+                FagginglyElementConverter.Singleton,
+                FenkElementConverter.Singleton,
+                FlagmakingElementConverter.Singleton,
+                FluorometerConverter.Singleton,
+                FuzzyConverter.Singleton,
+                GardenwardConverter.Singleton,
+                GeneralissimoConverter.Singleton,
+                HemicrystallineConverter.Singleton,
+                HemocoeleElementConverter.Singleton,
+                HoisterConverter.Singleton,
+                HyperpiesiConverter.Singleton,
+                HyppishConverter.Singleton,
+                IdealizerConverter.Singleton,
+                IncrustatorConverter.Singleton,
+                IntentivenessConverter.Singleton,
+                JacutingaConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CerographElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CerographElement) || t == typeof(CerographElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CerographElement { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CerographElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CerographClass>(reader);
+                    return new CerographElement { CerographClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CerographElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CerographElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CerographClass != null)
+            {
+                serializer.Serialize(writer, value.CerographClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CerographElement");
+        }
+
+        public static readonly CerographElementConverter Singleton = new CerographElementConverter();
+    }
+
+    internal class ChemotherapeuticElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChemotherapeuticElement) || t == typeof(ChemotherapeuticElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new ChemotherapeuticElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChemotherapeuticClass>(reader);
+                    return new ChemotherapeuticElement { ChemotherapeuticClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChemotherapeuticElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChemotherapeuticElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.ChemotherapeuticClass != null)
+            {
+                serializer.Serialize(writer, value.ChemotherapeuticClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChemotherapeuticElement");
+        }
+
+        public static readonly ChemotherapeuticElementConverter Singleton = new ChemotherapeuticElementConverter();
+    }
+
+    internal class CimeliaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CimeliaElement) || t == typeof(CimeliaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CimeliaElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new CimeliaElement { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new CimeliaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type CimeliaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CimeliaElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CimeliaElement");
+        }
+
+        public static readonly CimeliaElementConverter Singleton = new CimeliaElementConverter();
+    }
+
+    internal class ClinodomeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Clinodome) || t == typeof(Clinodome?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Clinodome { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Clinodome { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Clinodome");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Clinodome)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Clinodome");
+        }
+
+        public static readonly ClinodomeConverter Singleton = new ClinodomeConverter();
+    }
+
+    internal class CoadjustElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CoadjustElement) || t == typeof(CoadjustElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new CoadjustElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CoadjustClass>(reader);
+                    return new CoadjustElement { CoadjustClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CoadjustElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CoadjustElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.CoadjustClass != null)
+            {
+                serializer.Serialize(writer, value.CoadjustClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CoadjustElement");
+        }
+
+        public static readonly CoadjustElementConverter Singleton = new CoadjustElementConverter();
+    }
+
+    internal class ConsilienceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Consilience) || t == typeof(Consilience?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Consilience { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Consilience { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Consilience");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Consilience)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Consilience");
+        }
+
+        public static readonly ConsilienceConverter Singleton = new ConsilienceConverter();
+    }
+
+    internal class ConstructorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Constructor) || t == typeof(Constructor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Constructor { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Constructor { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Constructor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Constructor)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Constructor");
+        }
+
+        public static readonly ConstructorConverter Singleton = new ConstructorConverter();
+    }
+
+    internal class ContinuativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Continuative) || t == typeof(Continuative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Continuative { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Continuative { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Continuative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Continuative)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Continuative");
+        }
+
+        public static readonly ContinuativeConverter Singleton = new ContinuativeConverter();
+    }
+
+    internal class CredulityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CredulityElement) || t == typeof(CredulityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new CredulityElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CredulityElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CredulityClass>(reader);
+                    return new CredulityElement { CredulityClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CredulityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CredulityElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CredulityClass != null)
+            {
+                serializer.Serialize(writer, value.CredulityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CredulityElement");
+        }
+
+        public static readonly CredulityElementConverter Singleton = new CredulityElementConverter();
+    }
+
+    internal class CrevicedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Creviced) || t == typeof(Creviced?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Creviced { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Creviced { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Creviced { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Creviced");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Creviced)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Creviced");
+        }
+
+        public static readonly CrevicedConverter Singleton = new CrevicedConverter();
+    }
+
+    internal class DeruralizeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DeruralizeElement) || t == typeof(DeruralizeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DeruralizeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DeruralizeClass>(reader);
+                    return new DeruralizeElement { DeruralizeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new DeruralizeElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DeruralizeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DeruralizeElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.DeruralizeClass != null)
+            {
+                serializer.Serialize(writer, value.DeruralizeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DeruralizeElement");
+        }
+
+        public static readonly DeruralizeElementConverter Singleton = new DeruralizeElementConverter();
+    }
+
+    internal class DiaereseElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiaereseElement) || t == typeof(DiaereseElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DiaereseElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiaereseClass>(reader);
+                    return new DiaereseElement { DiaereseClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiaereseElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiaereseElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiaereseElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiaereseClass != null)
+            {
+                serializer.Serialize(writer, value.DiaereseClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiaereseElement");
+        }
+
+        public static readonly DiaereseElementConverter Singleton = new DiaereseElementConverter();
+    }
+
+    internal class DownstrokeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Downstroke) || t == typeof(Downstroke?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Downstroke { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Downstroke { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Downstroke { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Downstroke");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Downstroke)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Downstroke");
+        }
+
+        public static readonly DownstrokeConverter Singleton = new DownstrokeConverter();
+    }
+
+    internal class EleutheromaniaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eleutheromania) || t == typeof(Eleutheromania?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Eleutheromania { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Eleutheromania { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eleutheromania { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Eleutheromania");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eleutheromania)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eleutheromania");
+        }
+
+        public static readonly EleutheromaniaConverter Singleton = new EleutheromaniaConverter();
+    }
+
+    internal class EntomoidConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Entomoid) || t == typeof(Entomoid?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Entomoid { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Entomoid { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Entomoid");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Entomoid)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Entomoid");
+        }
+
+        public static readonly EntomoidConverter Singleton = new EntomoidConverter();
+    }
+
+    internal class EpipaleolithicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epipaleolithic) || t == typeof(Epipaleolithic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Epipaleolithic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Epipaleolithic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Epipaleolithic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epipaleolithic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epipaleolithic");
+        }
+
+        public static readonly EpipaleolithicConverter Singleton = new EpipaleolithicConverter();
+    }
+
+    internal class ExpropriableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Expropriable) || t == typeof(Expropriable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Expropriable { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Expropriable { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Expropriable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Expropriable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Expropriable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Expropriable");
+        }
+
+        public static readonly ExpropriableConverter Singleton = new ExpropriableConverter();
+    }
+
+    internal class FagginglyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FagginglyElement) || t == typeof(FagginglyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FagginglyElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FagginglyClass>(reader);
+                    return new FagginglyElement { FagginglyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FagginglyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FagginglyElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.FagginglyClass != null)
+            {
+                serializer.Serialize(writer, value.FagginglyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FagginglyElement");
+        }
+
+        public static readonly FagginglyElementConverter Singleton = new FagginglyElementConverter();
+    }
+
+    internal class FenkElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FenkElement) || t == typeof(FenkElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new FenkElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FenkClass>(reader);
+                    return new FenkElement { FenkClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FenkElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FenkElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.FenkClass != null)
+            {
+                serializer.Serialize(writer, value.FenkClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FenkElement");
+        }
+
+        public static readonly FenkElementConverter Singleton = new FenkElementConverter();
+    }
+
+    internal class FlagmakingElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FlagmakingElement) || t == typeof(FlagmakingElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FlagmakingElement { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new FlagmakingElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FlagmakingClass>(reader);
+                    return new FlagmakingElement { FlagmakingClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FlagmakingElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FlagmakingElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.FlagmakingClass != null)
+            {
+                serializer.Serialize(writer, value.FlagmakingClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FlagmakingElement");
+        }
+
+        public static readonly FlagmakingElementConverter Singleton = new FlagmakingElementConverter();
+    }
+
+    internal class FluorometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fluorometer) || t == typeof(Fluorometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Fluorometer { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fluorometer { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Fluorometer { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Fluorometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fluorometer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fluorometer");
+        }
+
+        public static readonly FluorometerConverter Singleton = new FluorometerConverter();
+    }
+
+    internal class FuzzyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fuzzy) || t == typeof(Fuzzy?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fuzzy { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Fuzzy { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Fuzzy");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fuzzy)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fuzzy");
+        }
+
+        public static readonly FuzzyConverter Singleton = new FuzzyConverter();
+    }
+
+    internal class GardenwardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gardenward) || t == typeof(Gardenward?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Gardenward { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Gardenward { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Gardenward { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Gardenward");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Gardenward)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Gardenward");
+        }
+
+        public static readonly GardenwardConverter Singleton = new GardenwardConverter();
+    }
+
+    internal class GeneralissimoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Generalissimo) || t == typeof(Generalissimo?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Generalissimo { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Generalissimo { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Generalissimo { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Generalissimo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Generalissimo)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Generalissimo");
+        }
+
+        public static readonly GeneralissimoConverter Singleton = new GeneralissimoConverter();
+    }
+
+    internal class HemicrystallineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hemicrystalline) || t == typeof(Hemicrystalline?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hemicrystalline { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hemicrystalline { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hemicrystalline");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hemicrystalline)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hemicrystalline");
+        }
+
+        public static readonly HemicrystallineConverter Singleton = new HemicrystallineConverter();
+    }
+
+    internal class HemocoeleElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(HemocoeleElement) || t == typeof(HemocoeleElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<HemocoeleClass>(reader);
+                    return new HemocoeleElement { HemocoeleClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new HemocoeleElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type HemocoeleElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (HemocoeleElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.HemocoeleClass != null)
+            {
+                serializer.Serialize(writer, value.HemocoeleClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type HemocoeleElement");
+        }
+
+        public static readonly HemocoeleElementConverter Singleton = new HemocoeleElementConverter();
+    }
+
+    internal class HoisterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hoister) || t == typeof(Hoister?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hoister { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hoister { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hoister { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hoister");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hoister)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hoister");
+        }
+
+        public static readonly HoisterConverter Singleton = new HoisterConverter();
+    }
+
+    internal class HyperpiesiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyperpiesi) || t == typeof(Hyperpiesi?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyperpiesi { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hyperpiesi { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Hyperpiesi { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyperpiesi");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyperpiesi)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyperpiesi");
+        }
+
+        public static readonly HyperpiesiConverter Singleton = new HyperpiesiConverter();
+    }
+
+    internal class HyppishConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyppish) || t == typeof(Hyppish?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyppish { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Hyppish { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hyppish { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyppish");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyppish)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyppish");
+        }
+
+        public static readonly HyppishConverter Singleton = new HyppishConverter();
+    }
+
+    internal class IdealizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Idealizer) || t == typeof(Idealizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Idealizer { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Idealizer { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Idealizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Idealizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Idealizer)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Idealizer");
+        }
+
+        public static readonly IdealizerConverter Singleton = new IdealizerConverter();
+    }
+
+    internal class IncrustatorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Incrustator) || t == typeof(Incrustator?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Incrustator { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Incrustator { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Incrustator { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Incrustator");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Incrustator)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Incrustator");
+        }
+
+        public static readonly IncrustatorConverter Singleton = new IncrustatorConverter();
+    }
+
+    internal class IntentivenessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Intentiveness) || t == typeof(Intentiveness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Intentiveness { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Intentiveness { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Intentiveness { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Intentiveness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Intentiveness)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Intentiveness");
+        }
+
+        public static readonly IntentivenessConverter Singleton = new IntentivenessConverter();
+    }
+
+    internal class JacutingaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Jacutinga) || t == typeof(Jacutinga?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Jacutinga { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Jacutinga { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Jacutinga");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Jacutinga)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Jacutinga");
+        }
+
+        public static readonly JacutingaConverter Singleton = new JacutingaConverter();
+    }
+}
diff --git a/head/csharp-records/test/inputs/json/priority/combinations1.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations1.json/default/QuickType.cs
new file mode 100644
index 0000000..9ceb9a1
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations1.json/default/QuickType.cs
@@ -0,0 +1,2712 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("centrodesmose", Required = Required.Always)]
+        public string Centrodesmose { get; set; }
+
+        [JsonProperty("cerograph", Required = Required.Always)]
+        public CerographElement[] Cerograph { get; set; }
+
+        [JsonProperty("chemotherapeutics", Required = Required.Always)]
+        public ChemotherapeuticElement[] Chemotherapeutics { get; set; }
+
+        [JsonProperty("cimelia", Required = Required.Always)]
+        public CimeliaElement[] Cimelia { get; set; }
+
+        [JsonProperty("citrated", Required = Required.Always)]
+        public long Citrated { get; set; }
+
+        [JsonProperty("clinodome", Required = Required.Always)]
+        public Clinodome[] Clinodome { get; set; }
+
+        [JsonProperty("coadjust", Required = Required.Always)]
+        public CoadjustElement[] Coadjust { get; set; }
+
+        [JsonProperty("consilience", Required = Required.Always)]
+        public Consilience[] Consilience { get; set; }
+
+        [JsonProperty("constructor", Required = Required.Always)]
+        public Constructor[] Constructor { get; set; }
+
+        [JsonProperty("continuative", Required = Required.Always)]
+        public Continuative[] Continuative { get; set; }
+
+        [JsonProperty("credulity", Required = Required.Always)]
+        public CredulityElement[] Credulity { get; set; }
+
+        [JsonProperty("creviced", Required = Required.Always)]
+        public Creviced[] Creviced { get; set; }
+
+        [JsonProperty("cubiculum", Required = Required.Always)]
+        public long?[][] Cubiculum { get; set; }
+
+        [JsonProperty("deruralize", Required = Required.Always)]
+        public DeruralizeElement[] Deruralize { get; set; }
+
+        [JsonProperty("diaereses", Required = Required.Always)]
+        public DiaereseElement[] Diaereses { get; set; }
+
+        [JsonProperty("dissolution", Required = Required.Always)]
+        public object[]?[] Dissolution { get; set; }
+
+        [JsonProperty("downstroke", Required = Required.Always)]
+        public Downstroke[] Downstroke { get; set; }
+
+        [JsonProperty("electrotautomerism", Required = Required.Always)]
+        public double?[] Electrotautomerism { get; set; }
+
+        [JsonProperty("eleutheromania", Required = Required.Always)]
+        public Eleutheromania[] Eleutheromania { get; set; }
+
+        [JsonProperty("encrust", Required = Required.Always)]
+        public Encrust Encrust { get; set; }
+
+        [JsonProperty("entomoid", Required = Required.Always)]
+        public Entomoid[] Entomoid { get; set; }
+
+        [JsonProperty("epipaleolithic", Required = Required.Always)]
+        public Epipaleolithic[] Epipaleolithic { get; set; }
+
+        [JsonProperty("expropriable", Required = Required.Always)]
+        public Expropriable[] Expropriable { get; set; }
+
+        [JsonProperty("faggingly", Required = Required.Always)]
+        public FagginglyElement[] Faggingly { get; set; }
+
+        [JsonProperty("fenks", Required = Required.Always)]
+        public FenkElement[] Fenks { get; set; }
+
+        [JsonProperty("flagmaking", Required = Required.Always)]
+        public FlagmakingElement[] Flagmaking { get; set; }
+
+        [JsonProperty("fluorometer", Required = Required.Always)]
+        public Fluorometer[] Fluorometer { get; set; }
+
+        [JsonProperty("fulsome", Required = Required.Always)]
+        public long?[] Fulsome { get; set; }
+
+        [JsonProperty("fuzzy", Required = Required.Always)]
+        public Fuzzy[] Fuzzy { get; set; }
+
+        [JsonProperty("gardenwards", Required = Required.Always)]
+        public Gardenward[] Gardenwards { get; set; }
+
+        [JsonProperty("generalissimo", Required = Required.Always)]
+        public Generalissimo[] Generalissimo { get; set; }
+
+        [JsonProperty("habeas", Required = Required.Always)]
+        public Dictionary<string, long>?[] Habeas { get; set; }
+
+        [JsonProperty("hemicrystalline", Required = Required.Always)]
+        public Hemicrystalline[] Hemicrystalline { get; set; }
+
+        [JsonProperty("hemocoele", Required = Required.Always)]
+        public HemocoeleElement[] Hemocoele { get; set; }
+
+        [JsonProperty("hoister", Required = Required.Always)]
+        public Hoister[] Hoister { get; set; }
+
+        [JsonProperty("hyperpiesis", Required = Required.Always)]
+        public Hyperpiesi[] Hyperpiesis { get; set; }
+
+        [JsonProperty("hyppish", Required = Required.Always)]
+        public Hyppish[] Hyppish { get; set; }
+
+        [JsonProperty("idealizer", Required = Required.Always)]
+        public Idealizer[] Idealizer { get; set; }
+
+        [JsonProperty("incrustator", Required = Required.Always)]
+        public Incrustator[] Incrustator { get; set; }
+
+        [JsonProperty("intentiveness", Required = Required.Always)]
+        public Intentiveness[] Intentiveness { get; set; }
+
+        [JsonProperty("interacinar", Required = Required.Always)]
+        public Interacinar Interacinar { get; set; }
+
+        [JsonProperty("intercorrelation", Required = Required.Always)]
+        public long[]?[] Intercorrelation { get; set; }
+
+        [JsonProperty("jacutinga", Required = Required.Always)]
+        public Jacutinga[] Jacutinga { get; set; }
+    }
+
+    public partial record CerographClass
+    {
+        [JsonProperty("apotropaion", Required = Required.AllowNull)]
+        public object Apotropaion { get; set; }
+
+        [JsonProperty("casuary", Required = Required.AllowNull)]
+        public object Casuary { get; set; }
+
+        [JsonProperty("creaker", Required = Required.AllowNull)]
+        public object Creaker { get; set; }
+
+        [JsonProperty("disqualification", Required = Required.AllowNull)]
+        public object Disqualification { get; set; }
+
+        [JsonProperty("imperatorious", Required = Required.AllowNull)]
+        public object Imperatorious { get; set; }
+
+        [JsonProperty("impermeabilize", Required = Required.AllowNull)]
+        public object Impermeabilize { get; set; }
+
+        [JsonProperty("metastoma", Required = Required.AllowNull)]
+        public object Metastoma { get; set; }
+
+        [JsonProperty("noctidiurnal", Required = Required.AllowNull)]
+        public object Noctidiurnal { get; set; }
+
+        [JsonProperty("nonreserve", Required = Required.AllowNull)]
+        public object Nonreserve { get; set; }
+
+        [JsonProperty("ophthalmotonometry", Required = Required.AllowNull)]
+        public object Ophthalmotonometry { get; set; }
+
+        [JsonProperty("pailful", Required = Required.AllowNull)]
+        public object Pailful { get; set; }
+
+        [JsonProperty("pigfish", Required = Required.AllowNull)]
+        public object Pigfish { get; set; }
+
+        [JsonProperty("pongee", Required = Required.AllowNull)]
+        public object Pongee { get; set; }
+
+        [JsonProperty("prosodical", Required = Required.AllowNull)]
+        public object Prosodical { get; set; }
+
+        [JsonProperty("scrofuloderm", Required = Required.AllowNull)]
+        public object Scrofuloderm { get; set; }
+
+        [JsonProperty("storekeeping", Required = Required.AllowNull)]
+        public object Storekeeping { get; set; }
+
+        [JsonProperty("therologist", Required = Required.AllowNull)]
+        public object Therologist { get; set; }
+
+        [JsonProperty("Tolowa", Required = Required.AllowNull)]
+        public object Tolowa { get; set; }
+
+        [JsonProperty("tradeful", Required = Required.AllowNull)]
+        public object Tradeful { get; set; }
+
+        [JsonProperty("unriveting", Required = Required.AllowNull)]
+        public object Unriveting { get; set; }
+    }
+
+    public partial record ChemotherapeuticClass
+    {
+        [JsonProperty("angioneurotic")]
+        public object? Angioneurotic { get; set; }
+
+        [JsonProperty("availment")]
+        public object? Availment { get; set; }
+
+        [JsonProperty("bladelet")]
+        public object? Bladelet { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("caulis")]
+        public object? Caulis { get; set; }
+
+        [JsonProperty("chalcus")]
+        public object? Chalcus { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enteradenological")]
+        public object? Enteradenological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("imporosity")]
+        public object? Imporosity { get; set; }
+
+        [JsonProperty("insistently")]
+        public object? Insistently { get; set; }
+
+        [JsonProperty("intraparietal")]
+        public object? Intraparietal { get; set; }
+
+        [JsonProperty("ivied")]
+        public object? Ivied { get; set; }
+
+        [JsonProperty("Maureen")]
+        public object? Maureen { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("nostochine")]
+        public object? Nostochine { get; set; }
+
+        [JsonProperty("nutcracker")]
+        public object? Nutcracker { get; set; }
+
+        [JsonProperty("ofttimes")]
+        public object? Ofttimes { get; set; }
+
+        [JsonProperty("phenocryst")]
+        public object? Phenocryst { get; set; }
+
+        [JsonProperty("precoincident")]
+        public object? Precoincident { get; set; }
+
+        [JsonProperty("ramiferous")]
+        public object? Ramiferous { get; set; }
+
+        [JsonProperty("stagmometer")]
+        public object? Stagmometer { get; set; }
+
+        [JsonProperty("tetherball")]
+        public object? Tetherball { get; set; }
+
+        [JsonProperty("unshy")]
+        public object? Unshy { get; set; }
+    }
+
+    public partial record CimeliaClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record CoadjustClass
+    {
+        [JsonProperty("amidosulphonal")]
+        public object? Amidosulphonal { get; set; }
+
+        [JsonProperty("Benny")]
+        public object? Benny { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ensnare")]
+        public object? Ensnare { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hybridizer")]
+        public object? Hybridizer { get; set; }
+
+        [JsonProperty("leastwise")]
+        public object? Leastwise { get; set; }
+
+        [JsonProperty("lof")]
+        public object? Lof { get; set; }
+
+        [JsonProperty("monkhood")]
+        public object? Monkhood { get; set; }
+
+        [JsonProperty("Netherlandish")]
+        public object? Netherlandish { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("peonism")]
+        public object? Peonism { get; set; }
+
+        [JsonProperty("Phonelescope")]
+        public object? Phonelescope { get; set; }
+
+        [JsonProperty("porphyrogeniture")]
+        public object? Porphyrogeniture { get; set; }
+
+        [JsonProperty("preindemnify")]
+        public object? Preindemnify { get; set; }
+
+        [JsonProperty("rosal")]
+        public object? Rosal { get; set; }
+
+        [JsonProperty("scalenous")]
+        public object? Scalenous { get; set; }
+
+        [JsonProperty("scopine")]
+        public object? Scopine { get; set; }
+
+        [JsonProperty("Sedaceae")]
+        public object? Sedaceae { get; set; }
+
+        [JsonProperty("suberinize")]
+        public object? Suberinize { get; set; }
+
+        [JsonProperty("symbiot")]
+        public object? Symbiot { get; set; }
+
+        [JsonProperty("tablefellow")]
+        public object? Tablefellow { get; set; }
+
+        [JsonProperty("unchargeable")]
+        public object? Unchargeable { get; set; }
+    }
+
+    public partial record CredulityClass
+    {
+        [JsonProperty("ammonolytic", Required = Required.AllowNull)]
+        public object Ammonolytic { get; set; }
+
+        [JsonProperty("bushmaster", Required = Required.AllowNull)]
+        public object Bushmaster { get; set; }
+
+        [JsonProperty("considering", Required = Required.AllowNull)]
+        public object Considering { get; set; }
+
+        [JsonProperty("consuetudinary", Required = Required.AllowNull)]
+        public object Consuetudinary { get; set; }
+
+        [JsonProperty("embarras", Required = Required.AllowNull)]
+        public object Embarras { get; set; }
+
+        [JsonProperty("fineness", Required = Required.AllowNull)]
+        public object Fineness { get; set; }
+
+        [JsonProperty("flaithship", Required = Required.AllowNull)]
+        public object Flaithship { get; set; }
+
+        [JsonProperty("Flavia", Required = Required.AllowNull)]
+        public object Flavia { get; set; }
+
+        [JsonProperty("gruffly", Required = Required.AllowNull)]
+        public object Gruffly { get; set; }
+
+        [JsonProperty("Hedychium", Required = Required.AllowNull)]
+        public object Hedychium { get; set; }
+
+        [JsonProperty("leadwort", Required = Required.AllowNull)]
+        public object Leadwort { get; set; }
+
+        [JsonProperty("overseriously", Required = Required.AllowNull)]
+        public object Overseriously { get; set; }
+
+        [JsonProperty("parabola", Required = Required.AllowNull)]
+        public object Parabola { get; set; }
+
+        [JsonProperty("pectinatodenticulate", Required = Required.AllowNull)]
+        public object Pectinatodenticulate { get; set; }
+
+        [JsonProperty("Popean", Required = Required.AllowNull)]
+        public object Popean { get; set; }
+
+        [JsonProperty("pornocrat", Required = Required.AllowNull)]
+        public object Pornocrat { get; set; }
+
+        [JsonProperty("quadrisect", Required = Required.AllowNull)]
+        public object Quadrisect { get; set; }
+
+        [JsonProperty("seriality", Required = Required.AllowNull)]
+        public object Seriality { get; set; }
+
+        [JsonProperty("vamphorn", Required = Required.AllowNull)]
+        public object Vamphorn { get; set; }
+
+        [JsonProperty("wharp", Required = Required.AllowNull)]
+        public object Wharp { get; set; }
+    }
+
+    public partial record DeruralizeClass
+    {
+        [JsonProperty("bockerel", Required = Required.AllowNull)]
+        public object Bockerel { get; set; }
+
+        [JsonProperty("boulder", Required = Required.AllowNull)]
+        public object Boulder { get; set; }
+
+        [JsonProperty("churrus", Required = Required.AllowNull)]
+        public object Churrus { get; set; }
+
+        [JsonProperty("counterdigged", Required = Required.AllowNull)]
+        public object Counterdigged { get; set; }
+
+        [JsonProperty("dialogite", Required = Required.AllowNull)]
+        public object Dialogite { get; set; }
+
+        [JsonProperty("digenic", Required = Required.AllowNull)]
+        public object Digenic { get; set; }
+
+        [JsonProperty("dunbird", Required = Required.AllowNull)]
+        public object Dunbird { get; set; }
+
+        [JsonProperty("ergatogyne", Required = Required.AllowNull)]
+        public object Ergatogyne { get; set; }
+
+        [JsonProperty("fiendful", Required = Required.AllowNull)]
+        public object Fiendful { get; set; }
+
+        [JsonProperty("jackrod", Required = Required.AllowNull)]
+        public object Jackrod { get; set; }
+
+        [JsonProperty("Jehovistic", Required = Required.AllowNull)]
+        public object Jehovistic { get; set; }
+
+        [JsonProperty("Paninean", Required = Required.AllowNull)]
+        public object Paninean { get; set; }
+
+        [JsonProperty("panther", Required = Required.AllowNull)]
+        public object Panther { get; set; }
+
+        [JsonProperty("placentigerous", Required = Required.AllowNull)]
+        public object Placentigerous { get; set; }
+
+        [JsonProperty("Romney", Required = Required.AllowNull)]
+        public object Romney { get; set; }
+
+        [JsonProperty("sparm", Required = Required.AllowNull)]
+        public object Sparm { get; set; }
+
+        [JsonProperty("tocsin", Required = Required.AllowNull)]
+        public object Tocsin { get; set; }
+
+        [JsonProperty("unnicked", Required = Required.AllowNull)]
+        public object Unnicked { get; set; }
+
+        [JsonProperty("unstavable", Required = Required.AllowNull)]
+        public object Unstavable { get; set; }
+
+        [JsonProperty("windfirm", Required = Required.AllowNull)]
+        public object Windfirm { get; set; }
+    }
+
+    public partial record DiaereseClass
+    {
+        [JsonProperty("Amoreuxia", Required = Required.AllowNull)]
+        public object Amoreuxia { get; set; }
+
+        [JsonProperty("ani", Required = Required.AllowNull)]
+        public object Ani { get; set; }
+
+        [JsonProperty("bernicle", Required = Required.AllowNull)]
+        public object Bernicle { get; set; }
+
+        [JsonProperty("blackwasher", Required = Required.AllowNull)]
+        public object Blackwasher { get; set; }
+
+        [JsonProperty("blowhard", Required = Required.AllowNull)]
+        public object Blowhard { get; set; }
+
+        [JsonProperty("broma", Required = Required.AllowNull)]
+        public object Broma { get; set; }
+
+        [JsonProperty("closecross", Required = Required.AllowNull)]
+        public object Closecross { get; set; }
+
+        [JsonProperty("congregationalism", Required = Required.AllowNull)]
+        public object Congregationalism { get; set; }
+
+        [JsonProperty("grayly", Required = Required.AllowNull)]
+        public object Grayly { get; set; }
+
+        [JsonProperty("historically", Required = Required.AllowNull)]
+        public object Historically { get; set; }
+
+        [JsonProperty("hoast", Required = Required.AllowNull)]
+        public object Hoast { get; set; }
+
+        [JsonProperty("irretentive", Required = Required.AllowNull)]
+        public object Irretentive { get; set; }
+
+        [JsonProperty("parcener", Required = Required.AllowNull)]
+        public object Parcener { get; set; }
+
+        [JsonProperty("pedder", Required = Required.AllowNull)]
+        public object Pedder { get; set; }
+
+        [JsonProperty("pseudoanatomic", Required = Required.AllowNull)]
+        public object Pseudoanatomic { get; set; }
+
+        [JsonProperty("rhizocarpian", Required = Required.AllowNull)]
+        public object Rhizocarpian { get; set; }
+
+        [JsonProperty("samel", Required = Required.AllowNull)]
+        public object Samel { get; set; }
+
+        [JsonProperty("silker", Required = Required.AllowNull)]
+        public object Silker { get; set; }
+
+        [JsonProperty("subdentated", Required = Required.AllowNull)]
+        public object Subdentated { get; set; }
+
+        [JsonProperty("subobscure", Required = Required.AllowNull)]
+        public object Subobscure { get; set; }
+    }
+
+    public partial record Encrust
+    {
+        [JsonProperty("comradely", Required = Required.AllowNull)]
+        public object Comradely { get; set; }
+
+        [JsonProperty("diacanthous", Required = Required.AllowNull)]
+        public object Diacanthous { get; set; }
+
+        [JsonProperty("feminineness", Required = Required.AllowNull)]
+        public object Feminineness { get; set; }
+
+        [JsonProperty("gossamered", Required = Required.AllowNull)]
+        public object Gossamered { get; set; }
+
+        [JsonProperty("Hibernia", Required = Required.AllowNull)]
+        public object Hibernia { get; set; }
+
+        [JsonProperty("Hibiscus", Required = Required.AllowNull)]
+        public object Hibiscus { get; set; }
+
+        [JsonProperty("Lepidosauria", Required = Required.AllowNull)]
+        public object Lepidosauria { get; set; }
+
+        [JsonProperty("lollingly", Required = Required.AllowNull)]
+        public object Lollingly { get; set; }
+
+        [JsonProperty("manager", Required = Required.AllowNull)]
+        public object Manager { get; set; }
+
+        [JsonProperty("mechanic", Required = Required.AllowNull)]
+        public object Mechanic { get; set; }
+
+        [JsonProperty("overminuteness", Required = Required.AllowNull)]
+        public object Overminuteness { get; set; }
+
+        [JsonProperty("papelonne", Required = Required.AllowNull)]
+        public object Papelonne { get; set; }
+
+        [JsonProperty("plebification", Required = Required.AllowNull)]
+        public object Plebification { get; set; }
+
+        [JsonProperty("pugmiller", Required = Required.AllowNull)]
+        public object Pugmiller { get; set; }
+
+        [JsonProperty("recoveror", Required = Required.AllowNull)]
+        public object Recoveror { get; set; }
+
+        [JsonProperty("spermatoblastic", Required = Required.AllowNull)]
+        public object Spermatoblastic { get; set; }
+
+        [JsonProperty("Syllidae", Required = Required.AllowNull)]
+        public object Syllidae { get; set; }
+
+        [JsonProperty("ungyved", Required = Required.AllowNull)]
+        public object Ungyved { get; set; }
+
+        [JsonProperty("whirlabout", Required = Required.AllowNull)]
+        public object Whirlabout { get; set; }
+
+        [JsonProperty("woodenware", Required = Required.AllowNull)]
+        public object Woodenware { get; set; }
+    }
+
+    public partial record FagginglyClass
+    {
+        [JsonProperty("abranchian", Required = Required.AllowNull)]
+        public object Abranchian { get; set; }
+
+        [JsonProperty("aculeiform", Required = Required.AllowNull)]
+        public object Aculeiform { get; set; }
+
+        [JsonProperty("adiaphoristic", Required = Required.AllowNull)]
+        public object Adiaphoristic { get; set; }
+
+        [JsonProperty("adoptionism", Required = Required.AllowNull)]
+        public object Adoptionism { get; set; }
+
+        [JsonProperty("Anglic", Required = Required.AllowNull)]
+        public object Anglic { get; set; }
+
+        [JsonProperty("antrotomy", Required = Required.AllowNull)]
+        public object Antrotomy { get; set; }
+
+        [JsonProperty("coerciveness", Required = Required.AllowNull)]
+        public object Coerciveness { get; set; }
+
+        [JsonProperty("decorist", Required = Required.AllowNull)]
+        public object Decorist { get; set; }
+
+        [JsonProperty("duckhood", Required = Required.AllowNull)]
+        public object Duckhood { get; set; }
+
+        [JsonProperty("Heteromeri", Required = Required.AllowNull)]
+        public object Heteromeri { get; set; }
+
+        [JsonProperty("hypochnose", Required = Required.AllowNull)]
+        public object Hypochnose { get; set; }
+
+        [JsonProperty("lochage", Required = Required.AllowNull)]
+        public object Lochage { get; set; }
+
+        [JsonProperty("melee", Required = Required.AllowNull)]
+        public object Melee { get; set; }
+
+        [JsonProperty("nonconformitant", Required = Required.AllowNull)]
+        public object Nonconformitant { get; set; }
+
+        [JsonProperty("Poinsettia", Required = Required.AllowNull)]
+        public object Poinsettia { get; set; }
+
+        [JsonProperty("putatively", Required = Required.AllowNull)]
+        public object Putatively { get; set; }
+
+        [JsonProperty("semivolatile", Required = Required.AllowNull)]
+        public object Semivolatile { get; set; }
+
+        [JsonProperty("soleas", Required = Required.AllowNull)]
+        public object Soleas { get; set; }
+
+        [JsonProperty("unfastenable", Required = Required.AllowNull)]
+        public object Unfastenable { get; set; }
+
+        [JsonProperty("unmillinered", Required = Required.AllowNull)]
+        public object Unmillinered { get; set; }
+    }
+
+    public partial record FenkClass
+    {
+        [JsonProperty("apoise", Required = Required.AllowNull)]
+        public object Apoise { get; set; }
+
+        [JsonProperty("astronomize", Required = Required.AllowNull)]
+        public object Astronomize { get; set; }
+
+        [JsonProperty("cockhorse", Required = Required.AllowNull)]
+        public object Cockhorse { get; set; }
+
+        [JsonProperty("copular", Required = Required.AllowNull)]
+        public object Copular { get; set; }
+
+        [JsonProperty("Dagomba", Required = Required.AllowNull)]
+        public object Dagomba { get; set; }
+
+        [JsonProperty("draffy", Required = Required.AllowNull)]
+        public object Draffy { get; set; }
+
+        [JsonProperty("foreigner", Required = Required.AllowNull)]
+        public object Foreigner { get; set; }
+
+        [JsonProperty("Guyandot", Required = Required.AllowNull)]
+        public object Guyandot { get; set; }
+
+        [JsonProperty("neurogliosis", Required = Required.AllowNull)]
+        public object Neurogliosis { get; set; }
+
+        [JsonProperty("osmious", Required = Required.AllowNull)]
+        public object Osmious { get; set; }
+
+        [JsonProperty("palpitate", Required = Required.AllowNull)]
+        public object Palpitate { get; set; }
+
+        [JsonProperty("rebukeable", Required = Required.AllowNull)]
+        public object Rebukeable { get; set; }
+
+        [JsonProperty("Reinwardtia", Required = Required.AllowNull)]
+        public object Reinwardtia { get; set; }
+
+        [JsonProperty("reservatory", Required = Required.AllowNull)]
+        public object Reservatory { get; set; }
+
+        [JsonProperty("scalt", Required = Required.AllowNull)]
+        public object Scalt { get; set; }
+
+        [JsonProperty("scripturalize", Required = Required.AllowNull)]
+        public object Scripturalize { get; set; }
+
+        [JsonProperty("tintometer", Required = Required.AllowNull)]
+        public object Tintometer { get; set; }
+
+        [JsonProperty("Tritoness", Required = Required.AllowNull)]
+        public object Tritoness { get; set; }
+
+        [JsonProperty("undergrade", Required = Required.AllowNull)]
+        public object Undergrade { get; set; }
+
+        [JsonProperty("undermountain", Required = Required.AllowNull)]
+        public object Undermountain { get; set; }
+    }
+
+    public partial record FlagmakingClass
+    {
+        [JsonProperty("albarco", Required = Required.AllowNull)]
+        public object Albarco { get; set; }
+
+        [JsonProperty("Bunodonta", Required = Required.AllowNull)]
+        public object Bunodonta { get; set; }
+
+        [JsonProperty("hornify", Required = Required.AllowNull)]
+        public object Hornify { get; set; }
+
+        [JsonProperty("Hydrocorisae", Required = Required.AllowNull)]
+        public object Hydrocorisae { get; set; }
+
+        [JsonProperty("hypoglossus", Required = Required.AllowNull)]
+        public object Hypoglossus { get; set; }
+
+        [JsonProperty("inexpiably", Required = Required.AllowNull)]
+        public object Inexpiably { get; set; }
+
+        [JsonProperty("ingratitude", Required = Required.AllowNull)]
+        public object Ingratitude { get; set; }
+
+        [JsonProperty("ladyfly", Required = Required.AllowNull)]
+        public object Ladyfly { get; set; }
+
+        [JsonProperty("medicament", Required = Required.AllowNull)]
+        public object Medicament { get; set; }
+
+        [JsonProperty("monogrammatic", Required = Required.AllowNull)]
+        public object Monogrammatic { get; set; }
+
+        [JsonProperty("nobbut", Required = Required.AllowNull)]
+        public object Nobbut { get; set; }
+
+        [JsonProperty("Notacanthidae", Required = Required.AllowNull)]
+        public object Notacanthidae { get; set; }
+
+        [JsonProperty("polyplacophore", Required = Required.AllowNull)]
+        public object Polyplacophore { get; set; }
+
+        [JsonProperty("proexercise", Required = Required.AllowNull)]
+        public object Proexercise { get; set; }
+
+        [JsonProperty("protoplast", Required = Required.AllowNull)]
+        public object Protoplast { get; set; }
+
+        [JsonProperty("puzzling", Required = Required.AllowNull)]
+        public object Puzzling { get; set; }
+
+        [JsonProperty("splanchnoskeleton", Required = Required.AllowNull)]
+        public object Splanchnoskeleton { get; set; }
+
+        [JsonProperty("unloveliness", Required = Required.AllowNull)]
+        public object Unloveliness { get; set; }
+
+        [JsonProperty("unquarantined", Required = Required.AllowNull)]
+        public object Unquarantined { get; set; }
+
+        [JsonProperty("unrenounceable", Required = Required.AllowNull)]
+        public object Unrenounceable { get; set; }
+    }
+
+    public partial record HemocoeleClass
+    {
+        [JsonProperty("acrogamy")]
+        public object? Acrogamy { get; set; }
+
+        [JsonProperty("amelification")]
+        public object? Amelification { get; set; }
+
+        [JsonProperty("autobiographic")]
+        public object? Autobiographic { get; set; }
+
+        [JsonProperty("berat")]
+        public object? Berat { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("disproportionably")]
+        public object? Disproportionably { get; set; }
+
+        [JsonProperty("erythrite")]
+        public object? Erythrite { get; set; }
+
+        [JsonProperty("graphic")]
+        public object? Graphic { get; set; }
+
+        [JsonProperty("hepatological")]
+        public object? Hepatological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("incommensurably")]
+        public object? Incommensurably { get; set; }
+
+        [JsonProperty("misaffirm")]
+        public object? Misaffirm { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("pocketbook")]
+        public object? Pocketbook { get; set; }
+
+        [JsonProperty("sclerometric")]
+        public object? Sclerometric { get; set; }
+
+        [JsonProperty("stambouline")]
+        public object? Stambouline { get; set; }
+
+        [JsonProperty("stickpin")]
+        public object? Stickpin { get; set; }
+
+        [JsonProperty("tubulure")]
+        public object? Tubulure { get; set; }
+
+        [JsonProperty("undelated")]
+        public object? Undelated { get; set; }
+
+        [JsonProperty("unsalt")]
+        public object? Unsalt { get; set; }
+
+        [JsonProperty("untutelar")]
+        public object? Untutelar { get; set; }
+
+        [JsonProperty("vagrant")]
+        public object? Vagrant { get; set; }
+
+        [JsonProperty("Walt")]
+        public object? Walt { get; set; }
+    }
+
+    public partial record Interacinar
+    {
+        [JsonProperty("assapan", Required = Required.Always)]
+        public double Assapan { get; set; }
+
+        [JsonProperty("benefactorship", Required = Required.Always)]
+        public bool Benefactorship { get; set; }
+
+        [JsonProperty("triseriatim", Required = Required.Always)]
+        public string Triseriatim { get; set; }
+
+        [JsonProperty("tubbing", Required = Required.Always)]
+        public long Tubbing { get; set; }
+
+        [JsonProperty("untrimmed", Required = Required.AllowNull)]
+        public object Untrimmed { get; set; }
+    }
+
+    public partial struct CerographElement
+    {
+        public CerographClass? CerographClass;
+        public string? String;
+
+        public static implicit operator CerographElement(CerographClass CerographClass) => new CerographElement { CerographClass = CerographClass };
+        public static implicit operator CerographElement(string String) => new CerographElement { String = String };
+        public bool IsNull => CerographClass == null && String == null;
+    }
+
+    public partial struct ChemotherapeuticElement
+    {
+        public ChemotherapeuticClass? ChemotherapeuticClass;
+        public long? Integer;
+
+        public static implicit operator ChemotherapeuticElement(ChemotherapeuticClass ChemotherapeuticClass) => new ChemotherapeuticElement { ChemotherapeuticClass = ChemotherapeuticClass };
+        public static implicit operator ChemotherapeuticElement(long Integer) => new ChemotherapeuticElement { Integer = Integer };
+    }
+
+    public partial struct CimeliaElement
+    {
+        public CimeliaClass? CimeliaClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator CimeliaElement(CimeliaClass CimeliaClass) => new CimeliaElement { CimeliaClass = CimeliaClass };
+        public static implicit operator CimeliaElement(long[] IntegerArray) => new CimeliaElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Clinodome
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Clinodome(double Double) => new Clinodome { Double = Double };
+        public static implicit operator Clinodome(string String) => new Clinodome { String = String };
+    }
+
+    public partial struct CoadjustElement
+    {
+        public CoadjustClass? CoadjustClass;
+        public double? Double;
+
+        public static implicit operator CoadjustElement(CoadjustClass CoadjustClass) => new CoadjustElement { CoadjustClass = CoadjustClass };
+        public static implicit operator CoadjustElement(double Double) => new CoadjustElement { Double = Double };
+    }
+
+    public partial struct Consilience
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Consilience(double Double) => new Consilience { Double = Double };
+        public static implicit operator Consilience(Dictionary<string, long> IntegerMap) => new Consilience { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Constructor
+    {
+        public bool? Bool;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Constructor(bool Bool) => new Constructor { Bool = Bool };
+        public static implicit operator Constructor(Dictionary<string, long?> UnionMap) => new Constructor { UnionMap = UnionMap };
+    }
+
+    public partial struct Continuative
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Continuative(Dictionary<string, long> IntegerMap) => new Continuative { IntegerMap = IntegerMap };
+        public static implicit operator Continuative(string String) => new Continuative { String = String };
+    }
+
+    public partial struct CredulityElement
+    {
+        public CredulityClass? CredulityClass;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator CredulityElement(CredulityClass CredulityClass) => new CredulityElement { CredulityClass = CredulityClass };
+        public static implicit operator CredulityElement(long Integer) => new CredulityElement { Integer = Integer };
+        public static implicit operator CredulityElement(string String) => new CredulityElement { String = String };
+    }
+
+    public partial struct Creviced
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Creviced(bool Bool) => new Creviced { Bool = Bool };
+        public static implicit operator Creviced(Dictionary<string, long> IntegerMap) => new Creviced { IntegerMap = IntegerMap };
+        public static implicit operator Creviced(string String) => new Creviced { String = String };
+    }
+
+    public partial struct DeruralizeElement
+    {
+        public bool? Bool;
+        public DeruralizeClass? DeruralizeClass;
+        public object[]? NullArray;
+
+        public static implicit operator DeruralizeElement(bool Bool) => new DeruralizeElement { Bool = Bool };
+        public static implicit operator DeruralizeElement(DeruralizeClass DeruralizeClass) => new DeruralizeElement { DeruralizeClass = DeruralizeClass };
+        public static implicit operator DeruralizeElement(object[] NullArray) => new DeruralizeElement { NullArray = NullArray };
+    }
+
+    public partial struct DiaereseElement
+    {
+        public bool? Bool;
+        public DiaereseClass? DiaereseClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator DiaereseElement(bool Bool) => new DiaereseElement { Bool = Bool };
+        public static implicit operator DiaereseElement(DiaereseClass DiaereseClass) => new DiaereseElement { DiaereseClass = DiaereseClass };
+        public static implicit operator DiaereseElement(long[] IntegerArray) => new DiaereseElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Downstroke
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Downstroke(bool Bool) => new Downstroke { Bool = Bool };
+        public static implicit operator Downstroke(object[] NullArray) => new Downstroke { NullArray = NullArray };
+        public static implicit operator Downstroke(string String) => new Downstroke { String = String };
+    }
+
+    public partial struct Eleutheromania
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Eleutheromania(double Double) => new Eleutheromania { Double = Double };
+        public static implicit operator Eleutheromania(Dictionary<string, long> IntegerMap) => new Eleutheromania { IntegerMap = IntegerMap };
+        public static implicit operator Eleutheromania(string String) => new Eleutheromania { String = String };
+    }
+
+    public partial struct Entomoid
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+
+        public static implicit operator Entomoid(CimeliaClass CimeliaClass) => new Entomoid { CimeliaClass = CimeliaClass };
+        public static implicit operator Entomoid(long Integer) => new Entomoid { Integer = Integer };
+    }
+
+    public partial struct Epipaleolithic
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Epipaleolithic(double Double) => new Epipaleolithic { Double = Double };
+        public static implicit operator Epipaleolithic(long[] IntegerArray) => new Epipaleolithic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Expropriable
+    {
+        public CimeliaClass? CimeliaClass;
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Expropriable(CimeliaClass CimeliaClass) => new Expropriable { CimeliaClass = CimeliaClass };
+        public static implicit operator Expropriable(double Double) => new Expropriable { Double = Double };
+        public static implicit operator Expropriable(object[] NullArray) => new Expropriable { NullArray = NullArray };
+    }
+
+    public partial struct FagginglyElement
+    {
+        public double? Double;
+        public FagginglyClass? FagginglyClass;
+
+        public static implicit operator FagginglyElement(double Double) => new FagginglyElement { Double = Double };
+        public static implicit operator FagginglyElement(FagginglyClass FagginglyClass) => new FagginglyElement { FagginglyClass = FagginglyClass };
+    }
+
+    public partial struct FenkElement
+    {
+        public FenkClass? FenkClass;
+        public string? String;
+
+        public static implicit operator FenkElement(FenkClass FenkClass) => new FenkElement { FenkClass = FenkClass };
+        public static implicit operator FenkElement(string String) => new FenkElement { String = String };
+    }
+
+    public partial struct FlagmakingElement
+    {
+        public bool? Bool;
+        public double? Double;
+        public FlagmakingClass? FlagmakingClass;
+
+        public static implicit operator FlagmakingElement(bool Bool) => new FlagmakingElement { Bool = Bool };
+        public static implicit operator FlagmakingElement(double Double) => new FlagmakingElement { Double = Double };
+        public static implicit operator FlagmakingElement(FlagmakingClass FlagmakingClass) => new FlagmakingElement { FlagmakingClass = FlagmakingClass };
+    }
+
+    public partial struct Fluorometer
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Fluorometer(long Integer) => new Fluorometer { Integer = Integer };
+        public static implicit operator Fluorometer(string String) => new Fluorometer { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial struct Fuzzy
+    {
+        public long? Integer;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Fuzzy(long Integer) => new Fuzzy { Integer = Integer };
+        public static implicit operator Fuzzy(Dictionary<string, long?> UnionMap) => new Fuzzy { UnionMap = UnionMap };
+    }
+
+    public partial struct Gardenward
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Gardenward(bool Bool) => new Gardenward { Bool = Bool };
+        public static implicit operator Gardenward(long[] IntegerArray) => new Gardenward { IntegerArray = IntegerArray };
+        public static implicit operator Gardenward(string String) => new Gardenward { String = String };
+    }
+
+    public partial struct Generalissimo
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Generalissimo(bool Bool) => new Generalissimo { Bool = Bool };
+        public static implicit operator Generalissimo(Dictionary<string, long> IntegerMap) => new Generalissimo { IntegerMap = IntegerMap };
+        public bool IsNull => Bool == null && IntegerMap == null;
+    }
+
+    public partial struct Hemicrystalline
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hemicrystalline(CimeliaClass CimeliaClass) => new Hemicrystalline { CimeliaClass = CimeliaClass };
+        public static implicit operator Hemicrystalline(string String) => new Hemicrystalline { String = String };
+    }
+
+    public partial struct HemocoeleElement
+    {
+        public HemocoeleClass? HemocoeleClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator HemocoeleElement(HemocoeleClass HemocoeleClass) => new HemocoeleElement { HemocoeleClass = HemocoeleClass };
+        public static implicit operator HemocoeleElement(long[] IntegerArray) => new HemocoeleElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Hoister
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hoister(CimeliaClass CimeliaClass) => new Hoister { CimeliaClass = CimeliaClass };
+        public static implicit operator Hoister(string String) => new Hoister { String = String };
+        public bool IsNull => CimeliaClass == null && String == null;
+    }
+
+    public partial struct Hyperpiesi
+    {
+        public CimeliaClass? CimeliaClass;
+        public object[]? NullArray;
+
+        public static implicit operator Hyperpiesi(CimeliaClass CimeliaClass) => new Hyperpiesi { CimeliaClass = CimeliaClass };
+        public static implicit operator Hyperpiesi(object[] NullArray) => new Hyperpiesi { NullArray = NullArray };
+        public bool IsNull => NullArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Hyppish
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Hyppish(bool Bool) => new Hyppish { Bool = Bool };
+        public static implicit operator Hyppish(string String) => new Hyppish { String = String };
+        public bool IsNull => Bool == null && String == null;
+    }
+
+    public partial struct Idealizer
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Idealizer(CimeliaClass CimeliaClass) => new Idealizer { CimeliaClass = CimeliaClass };
+        public static implicit operator Idealizer(long Integer) => new Idealizer { Integer = Integer };
+        public static implicit operator Idealizer(object[] NullArray) => new Idealizer { NullArray = NullArray };
+    }
+
+    public partial struct Incrustator
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Incrustator(long Integer) => new Incrustator { Integer = Integer };
+        public static implicit operator Incrustator(long[] IntegerArray) => new Incrustator { IntegerArray = IntegerArray };
+        public static implicit operator Incrustator(string String) => new Incrustator { String = String };
+    }
+
+    public partial struct Intentiveness
+    {
+        public CimeliaClass? CimeliaClass;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Intentiveness(CimeliaClass CimeliaClass) => new Intentiveness { CimeliaClass = CimeliaClass };
+        public static implicit operator Intentiveness(double Double) => new Intentiveness { Double = Double };
+        public static implicit operator Intentiveness(string String) => new Intentiveness { String = String };
+    }
+
+    public partial struct Jacutinga
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Jacutinga(long[] IntegerArray) => new Jacutinga { IntegerArray = IntegerArray };
+        public static implicit operator Jacutinga(Dictionary<string, long?> UnionMap) => new Jacutinga { UnionMap = UnionMap };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CerographElementConverter.Singleton,
+                ChemotherapeuticElementConverter.Singleton,
+                CimeliaElementConverter.Singleton,
+                ClinodomeConverter.Singleton,
+                CoadjustElementConverter.Singleton,
+                ConsilienceConverter.Singleton,
+                ConstructorConverter.Singleton,
+                ContinuativeConverter.Singleton,
+                CredulityElementConverter.Singleton,
+                CrevicedConverter.Singleton,
+                DeruralizeElementConverter.Singleton,
+                DiaereseElementConverter.Singleton,
+                DownstrokeConverter.Singleton,
+                EleutheromaniaConverter.Singleton,
+                EntomoidConverter.Singleton,
+                EpipaleolithicConverter.Singleton,
+                ExpropriableConverter.Singleton,
+                FagginglyElementConverter.Singleton,
+                FenkElementConverter.Singleton,
+                FlagmakingElementConverter.Singleton,
+                FluorometerConverter.Singleton,
+                FuzzyConverter.Singleton,
+                GardenwardConverter.Singleton,
+                GeneralissimoConverter.Singleton,
+                HemicrystallineConverter.Singleton,
+                HemocoeleElementConverter.Singleton,
+                HoisterConverter.Singleton,
+                HyperpiesiConverter.Singleton,
+                HyppishConverter.Singleton,
+                IdealizerConverter.Singleton,
+                IncrustatorConverter.Singleton,
+                IntentivenessConverter.Singleton,
+                JacutingaConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CerographElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CerographElement) || t == typeof(CerographElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CerographElement { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CerographElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CerographClass>(reader);
+                    return new CerographElement { CerographClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CerographElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CerographElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CerographClass != null)
+            {
+                serializer.Serialize(writer, value.CerographClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CerographElement");
+        }
+
+        public static readonly CerographElementConverter Singleton = new CerographElementConverter();
+    }
+
+    internal class ChemotherapeuticElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChemotherapeuticElement) || t == typeof(ChemotherapeuticElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new ChemotherapeuticElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChemotherapeuticClass>(reader);
+                    return new ChemotherapeuticElement { ChemotherapeuticClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChemotherapeuticElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChemotherapeuticElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.ChemotherapeuticClass != null)
+            {
+                serializer.Serialize(writer, value.ChemotherapeuticClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChemotherapeuticElement");
+        }
+
+        public static readonly ChemotherapeuticElementConverter Singleton = new ChemotherapeuticElementConverter();
+    }
+
+    internal class CimeliaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CimeliaElement) || t == typeof(CimeliaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CimeliaElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new CimeliaElement { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new CimeliaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type CimeliaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CimeliaElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CimeliaElement");
+        }
+
+        public static readonly CimeliaElementConverter Singleton = new CimeliaElementConverter();
+    }
+
+    internal class ClinodomeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Clinodome) || t == typeof(Clinodome?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Clinodome { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Clinodome { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Clinodome");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Clinodome)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Clinodome");
+        }
+
+        public static readonly ClinodomeConverter Singleton = new ClinodomeConverter();
+    }
+
+    internal class CoadjustElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CoadjustElement) || t == typeof(CoadjustElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new CoadjustElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CoadjustClass>(reader);
+                    return new CoadjustElement { CoadjustClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CoadjustElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CoadjustElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.CoadjustClass != null)
+            {
+                serializer.Serialize(writer, value.CoadjustClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CoadjustElement");
+        }
+
+        public static readonly CoadjustElementConverter Singleton = new CoadjustElementConverter();
+    }
+
+    internal class ConsilienceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Consilience) || t == typeof(Consilience?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Consilience { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Consilience { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Consilience");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Consilience)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Consilience");
+        }
+
+        public static readonly ConsilienceConverter Singleton = new ConsilienceConverter();
+    }
+
+    internal class ConstructorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Constructor) || t == typeof(Constructor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Constructor { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Constructor { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Constructor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Constructor)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Constructor");
+        }
+
+        public static readonly ConstructorConverter Singleton = new ConstructorConverter();
+    }
+
+    internal class ContinuativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Continuative) || t == typeof(Continuative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Continuative { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Continuative { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Continuative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Continuative)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Continuative");
+        }
+
+        public static readonly ContinuativeConverter Singleton = new ContinuativeConverter();
+    }
+
+    internal class CredulityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CredulityElement) || t == typeof(CredulityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new CredulityElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CredulityElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CredulityClass>(reader);
+                    return new CredulityElement { CredulityClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CredulityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CredulityElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CredulityClass != null)
+            {
+                serializer.Serialize(writer, value.CredulityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CredulityElement");
+        }
+
+        public static readonly CredulityElementConverter Singleton = new CredulityElementConverter();
+    }
+
+    internal class CrevicedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Creviced) || t == typeof(Creviced?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Creviced { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Creviced { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Creviced { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Creviced");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Creviced)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Creviced");
+        }
+
+        public static readonly CrevicedConverter Singleton = new CrevicedConverter();
+    }
+
+    internal class DeruralizeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DeruralizeElement) || t == typeof(DeruralizeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DeruralizeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DeruralizeClass>(reader);
+                    return new DeruralizeElement { DeruralizeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new DeruralizeElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DeruralizeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DeruralizeElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.DeruralizeClass != null)
+            {
+                serializer.Serialize(writer, value.DeruralizeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DeruralizeElement");
+        }
+
+        public static readonly DeruralizeElementConverter Singleton = new DeruralizeElementConverter();
+    }
+
+    internal class DiaereseElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiaereseElement) || t == typeof(DiaereseElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DiaereseElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiaereseClass>(reader);
+                    return new DiaereseElement { DiaereseClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiaereseElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiaereseElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiaereseElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiaereseClass != null)
+            {
+                serializer.Serialize(writer, value.DiaereseClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiaereseElement");
+        }
+
+        public static readonly DiaereseElementConverter Singleton = new DiaereseElementConverter();
+    }
+
+    internal class DownstrokeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Downstroke) || t == typeof(Downstroke?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Downstroke { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Downstroke { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Downstroke { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Downstroke");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Downstroke)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Downstroke");
+        }
+
+        public static readonly DownstrokeConverter Singleton = new DownstrokeConverter();
+    }
+
+    internal class EleutheromaniaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eleutheromania) || t == typeof(Eleutheromania?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Eleutheromania { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Eleutheromania { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eleutheromania { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Eleutheromania");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eleutheromania)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eleutheromania");
+        }
+
+        public static readonly EleutheromaniaConverter Singleton = new EleutheromaniaConverter();
+    }
+
+    internal class EntomoidConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Entomoid) || t == typeof(Entomoid?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Entomoid { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Entomoid { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Entomoid");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Entomoid)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Entomoid");
+        }
+
+        public static readonly EntomoidConverter Singleton = new EntomoidConverter();
+    }
+
+    internal class EpipaleolithicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epipaleolithic) || t == typeof(Epipaleolithic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Epipaleolithic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Epipaleolithic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Epipaleolithic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epipaleolithic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epipaleolithic");
+        }
+
+        public static readonly EpipaleolithicConverter Singleton = new EpipaleolithicConverter();
+    }
+
+    internal class ExpropriableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Expropriable) || t == typeof(Expropriable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Expropriable { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Expropriable { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Expropriable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Expropriable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Expropriable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Expropriable");
+        }
+
+        public static readonly ExpropriableConverter Singleton = new ExpropriableConverter();
+    }
+
+    internal class FagginglyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FagginglyElement) || t == typeof(FagginglyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FagginglyElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FagginglyClass>(reader);
+                    return new FagginglyElement { FagginglyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FagginglyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FagginglyElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.FagginglyClass != null)
+            {
+                serializer.Serialize(writer, value.FagginglyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FagginglyElement");
+        }
+
+        public static readonly FagginglyElementConverter Singleton = new FagginglyElementConverter();
+    }
+
+    internal class FenkElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FenkElement) || t == typeof(FenkElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new FenkElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FenkClass>(reader);
+                    return new FenkElement { FenkClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FenkElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FenkElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.FenkClass != null)
+            {
+                serializer.Serialize(writer, value.FenkClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FenkElement");
+        }
+
+        public static readonly FenkElementConverter Singleton = new FenkElementConverter();
+    }
+
+    internal class FlagmakingElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FlagmakingElement) || t == typeof(FlagmakingElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FlagmakingElement { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new FlagmakingElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FlagmakingClass>(reader);
+                    return new FlagmakingElement { FlagmakingClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FlagmakingElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FlagmakingElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.FlagmakingClass != null)
+            {
+                serializer.Serialize(writer, value.FlagmakingClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FlagmakingElement");
+        }
+
+        public static readonly FlagmakingElementConverter Singleton = new FlagmakingElementConverter();
+    }
+
+    internal class FluorometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fluorometer) || t == typeof(Fluorometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Fluorometer { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fluorometer { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Fluorometer { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Fluorometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fluorometer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fluorometer");
+        }
+
+        public static readonly FluorometerConverter Singleton = new FluorometerConverter();
+    }
+
+    internal class FuzzyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fuzzy) || t == typeof(Fuzzy?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fuzzy { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Fuzzy { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Fuzzy");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fuzzy)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fuzzy");
+        }
+
+        public static readonly FuzzyConverter Singleton = new FuzzyConverter();
+    }
+
+    internal class GardenwardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gardenward) || t == typeof(Gardenward?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Gardenward { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Gardenward { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Gardenward { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Gardenward");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Gardenward)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Gardenward");
+        }
+
+        public static readonly GardenwardConverter Singleton = new GardenwardConverter();
+    }
+
+    internal class GeneralissimoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Generalissimo) || t == typeof(Generalissimo?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Generalissimo { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Generalissimo { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Generalissimo { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Generalissimo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Generalissimo)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Generalissimo");
+        }
+
+        public static readonly GeneralissimoConverter Singleton = new GeneralissimoConverter();
+    }
+
+    internal class HemicrystallineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hemicrystalline) || t == typeof(Hemicrystalline?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hemicrystalline { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hemicrystalline { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hemicrystalline");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hemicrystalline)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hemicrystalline");
+        }
+
+        public static readonly HemicrystallineConverter Singleton = new HemicrystallineConverter();
+    }
+
+    internal class HemocoeleElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(HemocoeleElement) || t == typeof(HemocoeleElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<HemocoeleClass>(reader);
+                    return new HemocoeleElement { HemocoeleClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new HemocoeleElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type HemocoeleElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (HemocoeleElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.HemocoeleClass != null)
+            {
+                serializer.Serialize(writer, value.HemocoeleClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type HemocoeleElement");
+        }
+
+        public static readonly HemocoeleElementConverter Singleton = new HemocoeleElementConverter();
+    }
+
+    internal class HoisterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hoister) || t == typeof(Hoister?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hoister { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hoister { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hoister { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hoister");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hoister)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hoister");
+        }
+
+        public static readonly HoisterConverter Singleton = new HoisterConverter();
+    }
+
+    internal class HyperpiesiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyperpiesi) || t == typeof(Hyperpiesi?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyperpiesi { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hyperpiesi { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Hyperpiesi { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyperpiesi");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyperpiesi)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyperpiesi");
+        }
+
+        public static readonly HyperpiesiConverter Singleton = new HyperpiesiConverter();
+    }
+
+    internal class HyppishConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyppish) || t == typeof(Hyppish?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyppish { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Hyppish { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hyppish { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyppish");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyppish)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyppish");
+        }
+
+        public static readonly HyppishConverter Singleton = new HyppishConverter();
+    }
+
+    internal class IdealizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Idealizer) || t == typeof(Idealizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Idealizer { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Idealizer { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Idealizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Idealizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Idealizer)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Idealizer");
+        }
+
+        public static readonly IdealizerConverter Singleton = new IdealizerConverter();
+    }
+
+    internal class IncrustatorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Incrustator) || t == typeof(Incrustator?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Incrustator { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Incrustator { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Incrustator { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Incrustator");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Incrustator)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Incrustator");
+        }
+
+        public static readonly IncrustatorConverter Singleton = new IncrustatorConverter();
+    }
+
+    internal class IntentivenessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Intentiveness) || t == typeof(Intentiveness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Intentiveness { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Intentiveness { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Intentiveness { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Intentiveness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Intentiveness)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Intentiveness");
+        }
+
+        public static readonly IntentivenessConverter Singleton = new IntentivenessConverter();
+    }
+
+    internal class JacutingaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Jacutinga) || t == typeof(Jacutinga?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Jacutinga { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Jacutinga { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Jacutinga");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Jacutinga)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Jacutinga");
+        }
+
+        public static readonly JacutingaConverter Singleton = new JacutingaConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations1.json/density-dense--3bfb4c22cfd0/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations1.json/density-dense--3bfb4c22cfd0/QuickType.cs
new file mode 100644
index 0000000..62979de
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations1.json/density-dense--3bfb4c22cfd0/QuickType.cs
@@ -0,0 +1,2153 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+    using J = Newtonsoft.Json.JsonPropertyAttribute;
+    using R = Newtonsoft.Json.Required;
+    using N = Newtonsoft.Json.NullValueHandling;
+
+    public partial record TopLevel
+    {
+        [J("centrodesmose", Required = R.Always)]      public string Centrodesmose { get; set; }                       
+        [J("cerograph", Required = R.Always)]          public CerographElement[] Cerograph { get; set; }               
+        [J("chemotherapeutics", Required = R.Always)]  public ChemotherapeuticElement[] Chemotherapeutics { get; set; }
+        [J("cimelia", Required = R.Always)]            public CimeliaElement[] Cimelia { get; set; }                   
+        [J("citrated", Required = R.Always)]           public long Citrated { get; set; }                              
+        [J("clinodome", Required = R.Always)]          public Clinodome[] Clinodome { get; set; }                      
+        [J("coadjust", Required = R.Always)]           public CoadjustElement[] Coadjust { get; set; }                 
+        [J("consilience", Required = R.Always)]        public Consilience[] Consilience { get; set; }                  
+        [J("constructor", Required = R.Always)]        public Constructor[] Constructor { get; set; }                  
+        [J("continuative", Required = R.Always)]       public Continuative[] Continuative { get; set; }                
+        [J("credulity", Required = R.Always)]          public CredulityElement[] Credulity { get; set; }               
+        [J("creviced", Required = R.Always)]           public Creviced[] Creviced { get; set; }                        
+        [J("cubiculum", Required = R.Always)]          public long?[][] Cubiculum { get; set; }                        
+        [J("deruralize", Required = R.Always)]         public DeruralizeElement[] Deruralize { get; set; }             
+        [J("diaereses", Required = R.Always)]          public DiaereseElement[] Diaereses { get; set; }                
+        [J("dissolution", Required = R.Always)]        public object[]?[] Dissolution { get; set; }                    
+        [J("downstroke", Required = R.Always)]         public Downstroke[] Downstroke { get; set; }                    
+        [J("electrotautomerism", Required = R.Always)] public double?[] Electrotautomerism { get; set; }               
+        [J("eleutheromania", Required = R.Always)]     public Eleutheromania[] Eleutheromania { get; set; }            
+        [J("encrust", Required = R.Always)]            public Encrust Encrust { get; set; }                            
+        [J("entomoid", Required = R.Always)]           public Entomoid[] Entomoid { get; set; }                        
+        [J("epipaleolithic", Required = R.Always)]     public Epipaleolithic[] Epipaleolithic { get; set; }            
+        [J("expropriable", Required = R.Always)]       public Expropriable[] Expropriable { get; set; }                
+        [J("faggingly", Required = R.Always)]          public FagginglyElement[] Faggingly { get; set; }               
+        [J("fenks", Required = R.Always)]              public FenkElement[] Fenks { get; set; }                        
+        [J("flagmaking", Required = R.Always)]         public FlagmakingElement[] Flagmaking { get; set; }             
+        [J("fluorometer", Required = R.Always)]        public Fluorometer[] Fluorometer { get; set; }                  
+        [J("fulsome", Required = R.Always)]            public long?[] Fulsome { get; set; }                            
+        [J("fuzzy", Required = R.Always)]              public Fuzzy[] Fuzzy { get; set; }                              
+        [J("gardenwards", Required = R.Always)]        public Gardenward[] Gardenwards { get; set; }                   
+        [J("generalissimo", Required = R.Always)]      public Generalissimo[] Generalissimo { get; set; }              
+        [J("habeas", Required = R.Always)]             public Dictionary<string, long>?[] Habeas { get; set; }         
+        [J("hemicrystalline", Required = R.Always)]    public Hemicrystalline[] Hemicrystalline { get; set; }          
+        [J("hemocoele", Required = R.Always)]          public HemocoeleElement[] Hemocoele { get; set; }               
+        [J("hoister", Required = R.Always)]            public Hoister[] Hoister { get; set; }                          
+        [J("hyperpiesis", Required = R.Always)]        public Hyperpiesi[] Hyperpiesis { get; set; }                   
+        [J("hyppish", Required = R.Always)]            public Hyppish[] Hyppish { get; set; }                          
+        [J("idealizer", Required = R.Always)]          public Idealizer[] Idealizer { get; set; }                      
+        [J("incrustator", Required = R.Always)]        public Incrustator[] Incrustator { get; set; }                  
+        [J("intentiveness", Required = R.Always)]      public Intentiveness[] Intentiveness { get; set; }              
+        [J("interacinar", Required = R.Always)]        public Interacinar Interacinar { get; set; }                    
+        [J("intercorrelation", Required = R.Always)]   public long[]?[] Intercorrelation { get; set; }                 
+        [J("jacutinga", Required = R.Always)]          public Jacutinga[] Jacutinga { get; set; }                      
+    }
+
+    public partial record CerographClass
+    {
+        [J("apotropaion", Required = R.AllowNull)]        public object Apotropaion { get; set; }       
+        [J("casuary", Required = R.AllowNull)]            public object Casuary { get; set; }           
+        [J("creaker", Required = R.AllowNull)]            public object Creaker { get; set; }           
+        [J("disqualification", Required = R.AllowNull)]   public object Disqualification { get; set; }  
+        [J("imperatorious", Required = R.AllowNull)]      public object Imperatorious { get; set; }     
+        [J("impermeabilize", Required = R.AllowNull)]     public object Impermeabilize { get; set; }    
+        [J("metastoma", Required = R.AllowNull)]          public object Metastoma { get; set; }         
+        [J("noctidiurnal", Required = R.AllowNull)]       public object Noctidiurnal { get; set; }      
+        [J("nonreserve", Required = R.AllowNull)]         public object Nonreserve { get; set; }        
+        [J("ophthalmotonometry", Required = R.AllowNull)] public object Ophthalmotonometry { get; set; }
+        [J("pailful", Required = R.AllowNull)]            public object Pailful { get; set; }           
+        [J("pigfish", Required = R.AllowNull)]            public object Pigfish { get; set; }           
+        [J("pongee", Required = R.AllowNull)]             public object Pongee { get; set; }            
+        [J("prosodical", Required = R.AllowNull)]         public object Prosodical { get; set; }        
+        [J("scrofuloderm", Required = R.AllowNull)]       public object Scrofuloderm { get; set; }      
+        [J("storekeeping", Required = R.AllowNull)]       public object Storekeeping { get; set; }      
+        [J("therologist", Required = R.AllowNull)]        public object Therologist { get; set; }       
+        [J("Tolowa", Required = R.AllowNull)]             public object Tolowa { get; set; }            
+        [J("tradeful", Required = R.AllowNull)]           public object Tradeful { get; set; }          
+        [J("unriveting", Required = R.AllowNull)]         public object Unriveting { get; set; }        
+    }
+
+    public partial record ChemotherapeuticClass
+    {
+        [J("angioneurotic")]                                                            public object? Angioneurotic { get; set; }    
+        [J("availment")]                                                                public object? Availment { get; set; }        
+        [J("bladelet")]                                                                 public object? Bladelet { get; set; }         
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }  
+        [J("caulis")]                                                                   public object? Caulis { get; set; }           
+        [J("chalcus")]                                                                  public object? Chalcus { get; set; }          
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }       
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }      
+        [J("enteradenological")]                                                        public object? Enteradenological { get; set; }
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }           
+        [J("imporosity")]                                                               public object? Imporosity { get; set; }       
+        [J("insistently")]                                                              public object? Insistently { get; set; }      
+        [J("intraparietal")]                                                            public object? Intraparietal { get; set; }    
+        [J("ivied")]                                                                    public object? Ivied { get; set; }            
+        [J("Maureen")]                                                                  public object? Maureen { get; set; }          
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }       
+        [J("nostochine")]                                                               public object? Nostochine { get; set; }       
+        [J("nutcracker")]                                                               public object? Nutcracker { get; set; }       
+        [J("ofttimes")]                                                                 public object? Ofttimes { get; set; }         
+        [J("phenocryst")]                                                               public object? Phenocryst { get; set; }       
+        [J("precoincident")]                                                            public object? Precoincident { get; set; }    
+        [J("ramiferous")]                                                               public object? Ramiferous { get; set; }       
+        [J("stagmometer")]                                                              public object? Stagmometer { get; set; }      
+        [J("tetherball")]                                                               public object? Tetherball { get; set; }       
+        [J("unshy")]                                                                    public object? Unshy { get; set; }            
+    }
+
+    public partial record CimeliaClass
+    {
+        [J("catharticalness", Required = R.Always)] public double Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.Always)]    public long Chirotherium { get; set; }     
+        [J("disdiapason", Required = R.Always)]     public string Disdiapason { get; set; }    
+        [J("homocerc", Required = R.Always)]        public bool Homocerc { get; set; }         
+        [J("nonbookish", Required = R.AllowNull)]   public object Nonbookish { get; set; }     
+    }
+
+    public partial record CoadjustClass
+    {
+        [J("amidosulphonal")]                                                           public object? Amidosulphonal { get; set; }  
+        [J("Benny")]                                                                    public object? Benny { get; set; }           
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; } 
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }      
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }     
+        [J("ensnare")]                                                                  public object? Ensnare { get; set; }         
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }          
+        [J("hybridizer")]                                                               public object? Hybridizer { get; set; }      
+        [J("leastwise")]                                                                public object? Leastwise { get; set; }       
+        [J("lof")]                                                                      public object? Lof { get; set; }             
+        [J("monkhood")]                                                                 public object? Monkhood { get; set; }        
+        [J("Netherlandish")]                                                            public object? Netherlandish { get; set; }   
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }      
+        [J("peonism")]                                                                  public object? Peonism { get; set; }         
+        [J("Phonelescope")]                                                             public object? Phonelescope { get; set; }    
+        [J("porphyrogeniture")]                                                         public object? Porphyrogeniture { get; set; }
+        [J("preindemnify")]                                                             public object? Preindemnify { get; set; }    
+        [J("rosal")]                                                                    public object? Rosal { get; set; }           
+        [J("scalenous")]                                                                public object? Scalenous { get; set; }       
+        [J("scopine")]                                                                  public object? Scopine { get; set; }         
+        [J("Sedaceae")]                                                                 public object? Sedaceae { get; set; }        
+        [J("suberinize")]                                                               public object? Suberinize { get; set; }      
+        [J("symbiot")]                                                                  public object? Symbiot { get; set; }         
+        [J("tablefellow")]                                                              public object? Tablefellow { get; set; }     
+        [J("unchargeable")]                                                             public object? Unchargeable { get; set; }    
+    }
+
+    public partial record CredulityClass
+    {
+        [J("ammonolytic", Required = R.AllowNull)]          public object Ammonolytic { get; set; }         
+        [J("bushmaster", Required = R.AllowNull)]           public object Bushmaster { get; set; }          
+        [J("considering", Required = R.AllowNull)]          public object Considering { get; set; }         
+        [J("consuetudinary", Required = R.AllowNull)]       public object Consuetudinary { get; set; }      
+        [J("embarras", Required = R.AllowNull)]             public object Embarras { get; set; }            
+        [J("fineness", Required = R.AllowNull)]             public object Fineness { get; set; }            
+        [J("flaithship", Required = R.AllowNull)]           public object Flaithship { get; set; }          
+        [J("Flavia", Required = R.AllowNull)]               public object Flavia { get; set; }              
+        [J("gruffly", Required = R.AllowNull)]              public object Gruffly { get; set; }             
+        [J("Hedychium", Required = R.AllowNull)]            public object Hedychium { get; set; }           
+        [J("leadwort", Required = R.AllowNull)]             public object Leadwort { get; set; }            
+        [J("overseriously", Required = R.AllowNull)]        public object Overseriously { get; set; }       
+        [J("parabola", Required = R.AllowNull)]             public object Parabola { get; set; }            
+        [J("pectinatodenticulate", Required = R.AllowNull)] public object Pectinatodenticulate { get; set; }
+        [J("Popean", Required = R.AllowNull)]               public object Popean { get; set; }              
+        [J("pornocrat", Required = R.AllowNull)]            public object Pornocrat { get; set; }           
+        [J("quadrisect", Required = R.AllowNull)]           public object Quadrisect { get; set; }          
+        [J("seriality", Required = R.AllowNull)]            public object Seriality { get; set; }           
+        [J("vamphorn", Required = R.AllowNull)]             public object Vamphorn { get; set; }            
+        [J("wharp", Required = R.AllowNull)]                public object Wharp { get; set; }               
+    }
+
+    public partial record DeruralizeClass
+    {
+        [J("bockerel", Required = R.AllowNull)]       public object Bockerel { get; set; }      
+        [J("boulder", Required = R.AllowNull)]        public object Boulder { get; set; }       
+        [J("churrus", Required = R.AllowNull)]        public object Churrus { get; set; }       
+        [J("counterdigged", Required = R.AllowNull)]  public object Counterdigged { get; set; } 
+        [J("dialogite", Required = R.AllowNull)]      public object Dialogite { get; set; }     
+        [J("digenic", Required = R.AllowNull)]        public object Digenic { get; set; }       
+        [J("dunbird", Required = R.AllowNull)]        public object Dunbird { get; set; }       
+        [J("ergatogyne", Required = R.AllowNull)]     public object Ergatogyne { get; set; }    
+        [J("fiendful", Required = R.AllowNull)]       public object Fiendful { get; set; }      
+        [J("jackrod", Required = R.AllowNull)]        public object Jackrod { get; set; }       
+        [J("Jehovistic", Required = R.AllowNull)]     public object Jehovistic { get; set; }    
+        [J("Paninean", Required = R.AllowNull)]       public object Paninean { get; set; }      
+        [J("panther", Required = R.AllowNull)]        public object Panther { get; set; }       
+        [J("placentigerous", Required = R.AllowNull)] public object Placentigerous { get; set; }
+        [J("Romney", Required = R.AllowNull)]         public object Romney { get; set; }        
+        [J("sparm", Required = R.AllowNull)]          public object Sparm { get; set; }         
+        [J("tocsin", Required = R.AllowNull)]         public object Tocsin { get; set; }        
+        [J("unnicked", Required = R.AllowNull)]       public object Unnicked { get; set; }      
+        [J("unstavable", Required = R.AllowNull)]     public object Unstavable { get; set; }    
+        [J("windfirm", Required = R.AllowNull)]       public object Windfirm { get; set; }      
+    }
+
+    public partial record DiaereseClass
+    {
+        [J("Amoreuxia", Required = R.AllowNull)]         public object Amoreuxia { get; set; }        
+        [J("ani", Required = R.AllowNull)]               public object Ani { get; set; }              
+        [J("bernicle", Required = R.AllowNull)]          public object Bernicle { get; set; }         
+        [J("blackwasher", Required = R.AllowNull)]       public object Blackwasher { get; set; }      
+        [J("blowhard", Required = R.AllowNull)]          public object Blowhard { get; set; }         
+        [J("broma", Required = R.AllowNull)]             public object Broma { get; set; }            
+        [J("closecross", Required = R.AllowNull)]        public object Closecross { get; set; }       
+        [J("congregationalism", Required = R.AllowNull)] public object Congregationalism { get; set; }
+        [J("grayly", Required = R.AllowNull)]            public object Grayly { get; set; }           
+        [J("historically", Required = R.AllowNull)]      public object Historically { get; set; }     
+        [J("hoast", Required = R.AllowNull)]             public object Hoast { get; set; }            
+        [J("irretentive", Required = R.AllowNull)]       public object Irretentive { get; set; }      
+        [J("parcener", Required = R.AllowNull)]          public object Parcener { get; set; }         
+        [J("pedder", Required = R.AllowNull)]            public object Pedder { get; set; }           
+        [J("pseudoanatomic", Required = R.AllowNull)]    public object Pseudoanatomic { get; set; }   
+        [J("rhizocarpian", Required = R.AllowNull)]      public object Rhizocarpian { get; set; }     
+        [J("samel", Required = R.AllowNull)]             public object Samel { get; set; }            
+        [J("silker", Required = R.AllowNull)]            public object Silker { get; set; }           
+        [J("subdentated", Required = R.AllowNull)]       public object Subdentated { get; set; }      
+        [J("subobscure", Required = R.AllowNull)]        public object Subobscure { get; set; }       
+    }
+
+    public partial record Encrust
+    {
+        [J("comradely", Required = R.AllowNull)]       public object Comradely { get; set; }      
+        [J("diacanthous", Required = R.AllowNull)]     public object Diacanthous { get; set; }    
+        [J("feminineness", Required = R.AllowNull)]    public object Feminineness { get; set; }   
+        [J("gossamered", Required = R.AllowNull)]      public object Gossamered { get; set; }     
+        [J("Hibernia", Required = R.AllowNull)]        public object Hibernia { get; set; }       
+        [J("Hibiscus", Required = R.AllowNull)]        public object Hibiscus { get; set; }       
+        [J("Lepidosauria", Required = R.AllowNull)]    public object Lepidosauria { get; set; }   
+        [J("lollingly", Required = R.AllowNull)]       public object Lollingly { get; set; }      
+        [J("manager", Required = R.AllowNull)]         public object Manager { get; set; }        
+        [J("mechanic", Required = R.AllowNull)]        public object Mechanic { get; set; }       
+        [J("overminuteness", Required = R.AllowNull)]  public object Overminuteness { get; set; } 
+        [J("papelonne", Required = R.AllowNull)]       public object Papelonne { get; set; }      
+        [J("plebification", Required = R.AllowNull)]   public object Plebification { get; set; }  
+        [J("pugmiller", Required = R.AllowNull)]       public object Pugmiller { get; set; }      
+        [J("recoveror", Required = R.AllowNull)]       public object Recoveror { get; set; }      
+        [J("spermatoblastic", Required = R.AllowNull)] public object Spermatoblastic { get; set; }
+        [J("Syllidae", Required = R.AllowNull)]        public object Syllidae { get; set; }       
+        [J("ungyved", Required = R.AllowNull)]         public object Ungyved { get; set; }        
+        [J("whirlabout", Required = R.AllowNull)]      public object Whirlabout { get; set; }     
+        [J("woodenware", Required = R.AllowNull)]      public object Woodenware { get; set; }     
+    }
+
+    public partial record FagginglyClass
+    {
+        [J("abranchian", Required = R.AllowNull)]      public object Abranchian { get; set; }     
+        [J("aculeiform", Required = R.AllowNull)]      public object Aculeiform { get; set; }     
+        [J("adiaphoristic", Required = R.AllowNull)]   public object Adiaphoristic { get; set; }  
+        [J("adoptionism", Required = R.AllowNull)]     public object Adoptionism { get; set; }    
+        [J("Anglic", Required = R.AllowNull)]          public object Anglic { get; set; }         
+        [J("antrotomy", Required = R.AllowNull)]       public object Antrotomy { get; set; }      
+        [J("coerciveness", Required = R.AllowNull)]    public object Coerciveness { get; set; }   
+        [J("decorist", Required = R.AllowNull)]        public object Decorist { get; set; }       
+        [J("duckhood", Required = R.AllowNull)]        public object Duckhood { get; set; }       
+        [J("Heteromeri", Required = R.AllowNull)]      public object Heteromeri { get; set; }     
+        [J("hypochnose", Required = R.AllowNull)]      public object Hypochnose { get; set; }     
+        [J("lochage", Required = R.AllowNull)]         public object Lochage { get; set; }        
+        [J("melee", Required = R.AllowNull)]           public object Melee { get; set; }          
+        [J("nonconformitant", Required = R.AllowNull)] public object Nonconformitant { get; set; }
+        [J("Poinsettia", Required = R.AllowNull)]      public object Poinsettia { get; set; }     
+        [J("putatively", Required = R.AllowNull)]      public object Putatively { get; set; }     
+        [J("semivolatile", Required = R.AllowNull)]    public object Semivolatile { get; set; }   
+        [J("soleas", Required = R.AllowNull)]          public object Soleas { get; set; }         
+        [J("unfastenable", Required = R.AllowNull)]    public object Unfastenable { get; set; }   
+        [J("unmillinered", Required = R.AllowNull)]    public object Unmillinered { get; set; }   
+    }
+
+    public partial record FenkClass
+    {
+        [J("apoise", Required = R.AllowNull)]        public object Apoise { get; set; }       
+        [J("astronomize", Required = R.AllowNull)]   public object Astronomize { get; set; }  
+        [J("cockhorse", Required = R.AllowNull)]     public object Cockhorse { get; set; }    
+        [J("copular", Required = R.AllowNull)]       public object Copular { get; set; }      
+        [J("Dagomba", Required = R.AllowNull)]       public object Dagomba { get; set; }      
+        [J("draffy", Required = R.AllowNull)]        public object Draffy { get; set; }       
+        [J("foreigner", Required = R.AllowNull)]     public object Foreigner { get; set; }    
+        [J("Guyandot", Required = R.AllowNull)]      public object Guyandot { get; set; }     
+        [J("neurogliosis", Required = R.AllowNull)]  public object Neurogliosis { get; set; } 
+        [J("osmious", Required = R.AllowNull)]       public object Osmious { get; set; }      
+        [J("palpitate", Required = R.AllowNull)]     public object Palpitate { get; set; }    
+        [J("rebukeable", Required = R.AllowNull)]    public object Rebukeable { get; set; }   
+        [J("Reinwardtia", Required = R.AllowNull)]   public object Reinwardtia { get; set; }  
+        [J("reservatory", Required = R.AllowNull)]   public object Reservatory { get; set; }  
+        [J("scalt", Required = R.AllowNull)]         public object Scalt { get; set; }        
+        [J("scripturalize", Required = R.AllowNull)] public object Scripturalize { get; set; }
+        [J("tintometer", Required = R.AllowNull)]    public object Tintometer { get; set; }   
+        [J("Tritoness", Required = R.AllowNull)]     public object Tritoness { get; set; }    
+        [J("undergrade", Required = R.AllowNull)]    public object Undergrade { get; set; }   
+        [J("undermountain", Required = R.AllowNull)] public object Undermountain { get; set; }
+    }
+
+    public partial record FlagmakingClass
+    {
+        [J("albarco", Required = R.AllowNull)]           public object Albarco { get; set; }          
+        [J("Bunodonta", Required = R.AllowNull)]         public object Bunodonta { get; set; }        
+        [J("hornify", Required = R.AllowNull)]           public object Hornify { get; set; }          
+        [J("Hydrocorisae", Required = R.AllowNull)]      public object Hydrocorisae { get; set; }     
+        [J("hypoglossus", Required = R.AllowNull)]       public object Hypoglossus { get; set; }      
+        [J("inexpiably", Required = R.AllowNull)]        public object Inexpiably { get; set; }       
+        [J("ingratitude", Required = R.AllowNull)]       public object Ingratitude { get; set; }      
+        [J("ladyfly", Required = R.AllowNull)]           public object Ladyfly { get; set; }          
+        [J("medicament", Required = R.AllowNull)]        public object Medicament { get; set; }       
+        [J("monogrammatic", Required = R.AllowNull)]     public object Monogrammatic { get; set; }    
+        [J("nobbut", Required = R.AllowNull)]            public object Nobbut { get; set; }           
+        [J("Notacanthidae", Required = R.AllowNull)]     public object Notacanthidae { get; set; }    
+        [J("polyplacophore", Required = R.AllowNull)]    public object Polyplacophore { get; set; }   
+        [J("proexercise", Required = R.AllowNull)]       public object Proexercise { get; set; }      
+        [J("protoplast", Required = R.AllowNull)]        public object Protoplast { get; set; }       
+        [J("puzzling", Required = R.AllowNull)]          public object Puzzling { get; set; }         
+        [J("splanchnoskeleton", Required = R.AllowNull)] public object Splanchnoskeleton { get; set; }
+        [J("unloveliness", Required = R.AllowNull)]      public object Unloveliness { get; set; }     
+        [J("unquarantined", Required = R.AllowNull)]     public object Unquarantined { get; set; }    
+        [J("unrenounceable", Required = R.AllowNull)]    public object Unrenounceable { get; set; }   
+    }
+
+    public partial record HemocoeleClass
+    {
+        [J("acrogamy")]                                                                 public object? Acrogamy { get; set; }         
+        [J("amelification")]                                                            public object? Amelification { get; set; }    
+        [J("autobiographic")]                                                           public object? Autobiographic { get; set; }   
+        [J("berat")]                                                                    public object? Berat { get; set; }            
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }  
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }       
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }      
+        [J("disproportionably")]                                                        public object? Disproportionably { get; set; }
+        [J("erythrite")]                                                                public object? Erythrite { get; set; }        
+        [J("graphic")]                                                                  public object? Graphic { get; set; }          
+        [J("hepatological")]                                                            public object? Hepatological { get; set; }    
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }           
+        [J("incommensurably")]                                                          public object? Incommensurably { get; set; }  
+        [J("misaffirm")]                                                                public object? Misaffirm { get; set; }        
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }       
+        [J("pocketbook")]                                                               public object? Pocketbook { get; set; }       
+        [J("sclerometric")]                                                             public object? Sclerometric { get; set; }     
+        [J("stambouline")]                                                              public object? Stambouline { get; set; }      
+        [J("stickpin")]                                                                 public object? Stickpin { get; set; }         
+        [J("tubulure")]                                                                 public object? Tubulure { get; set; }         
+        [J("undelated")]                                                                public object? Undelated { get; set; }        
+        [J("unsalt")]                                                                   public object? Unsalt { get; set; }           
+        [J("untutelar")]                                                                public object? Untutelar { get; set; }        
+        [J("vagrant")]                                                                  public object? Vagrant { get; set; }          
+        [J("Walt")]                                                                     public object? Walt { get; set; }             
+    }
+
+    public partial record Interacinar
+    {
+        [J("assapan", Required = R.Always)]        public double Assapan { get; set; }     
+        [J("benefactorship", Required = R.Always)] public bool Benefactorship { get; set; }
+        [J("triseriatim", Required = R.Always)]    public string Triseriatim { get; set; } 
+        [J("tubbing", Required = R.Always)]        public long Tubbing { get; set; }       
+        [J("untrimmed", Required = R.AllowNull)]   public object Untrimmed { get; set; }   
+    }
+
+    public partial struct CerographElement
+    {
+        public CerographClass? CerographClass;
+        public string? String;
+
+        public static implicit operator CerographElement(CerographClass CerographClass) => new CerographElement { CerographClass = CerographClass };
+        public static implicit operator CerographElement(string String) => new CerographElement { String = String };
+        public bool IsNull => CerographClass == null && String == null;
+    }
+
+    public partial struct ChemotherapeuticElement
+    {
+        public ChemotherapeuticClass? ChemotherapeuticClass;
+        public long? Integer;
+
+        public static implicit operator ChemotherapeuticElement(ChemotherapeuticClass ChemotherapeuticClass) => new ChemotherapeuticElement { ChemotherapeuticClass = ChemotherapeuticClass };
+        public static implicit operator ChemotherapeuticElement(long Integer) => new ChemotherapeuticElement { Integer = Integer };
+    }
+
+    public partial struct CimeliaElement
+    {
+        public CimeliaClass? CimeliaClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator CimeliaElement(CimeliaClass CimeliaClass) => new CimeliaElement { CimeliaClass = CimeliaClass };
+        public static implicit operator CimeliaElement(long[] IntegerArray) => new CimeliaElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Clinodome
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Clinodome(double Double) => new Clinodome { Double = Double };
+        public static implicit operator Clinodome(string String) => new Clinodome { String = String };
+    }
+
+    public partial struct CoadjustElement
+    {
+        public CoadjustClass? CoadjustClass;
+        public double? Double;
+
+        public static implicit operator CoadjustElement(CoadjustClass CoadjustClass) => new CoadjustElement { CoadjustClass = CoadjustClass };
+        public static implicit operator CoadjustElement(double Double) => new CoadjustElement { Double = Double };
+    }
+
+    public partial struct Consilience
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Consilience(double Double) => new Consilience { Double = Double };
+        public static implicit operator Consilience(Dictionary<string, long> IntegerMap) => new Consilience { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Constructor
+    {
+        public bool? Bool;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Constructor(bool Bool) => new Constructor { Bool = Bool };
+        public static implicit operator Constructor(Dictionary<string, long?> UnionMap) => new Constructor { UnionMap = UnionMap };
+    }
+
+    public partial struct Continuative
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Continuative(Dictionary<string, long> IntegerMap) => new Continuative { IntegerMap = IntegerMap };
+        public static implicit operator Continuative(string String) => new Continuative { String = String };
+    }
+
+    public partial struct CredulityElement
+    {
+        public CredulityClass? CredulityClass;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator CredulityElement(CredulityClass CredulityClass) => new CredulityElement { CredulityClass = CredulityClass };
+        public static implicit operator CredulityElement(long Integer) => new CredulityElement { Integer = Integer };
+        public static implicit operator CredulityElement(string String) => new CredulityElement { String = String };
+    }
+
+    public partial struct Creviced
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Creviced(bool Bool) => new Creviced { Bool = Bool };
+        public static implicit operator Creviced(Dictionary<string, long> IntegerMap) => new Creviced { IntegerMap = IntegerMap };
+        public static implicit operator Creviced(string String) => new Creviced { String = String };
+    }
+
+    public partial struct DeruralizeElement
+    {
+        public bool? Bool;
+        public DeruralizeClass? DeruralizeClass;
+        public object[]? NullArray;
+
+        public static implicit operator DeruralizeElement(bool Bool) => new DeruralizeElement { Bool = Bool };
+        public static implicit operator DeruralizeElement(DeruralizeClass DeruralizeClass) => new DeruralizeElement { DeruralizeClass = DeruralizeClass };
+        public static implicit operator DeruralizeElement(object[] NullArray) => new DeruralizeElement { NullArray = NullArray };
+    }
+
+    public partial struct DiaereseElement
+    {
+        public bool? Bool;
+        public DiaereseClass? DiaereseClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator DiaereseElement(bool Bool) => new DiaereseElement { Bool = Bool };
+        public static implicit operator DiaereseElement(DiaereseClass DiaereseClass) => new DiaereseElement { DiaereseClass = DiaereseClass };
+        public static implicit operator DiaereseElement(long[] IntegerArray) => new DiaereseElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Downstroke
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Downstroke(bool Bool) => new Downstroke { Bool = Bool };
+        public static implicit operator Downstroke(object[] NullArray) => new Downstroke { NullArray = NullArray };
+        public static implicit operator Downstroke(string String) => new Downstroke { String = String };
+    }
+
+    public partial struct Eleutheromania
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Eleutheromania(double Double) => new Eleutheromania { Double = Double };
+        public static implicit operator Eleutheromania(Dictionary<string, long> IntegerMap) => new Eleutheromania { IntegerMap = IntegerMap };
+        public static implicit operator Eleutheromania(string String) => new Eleutheromania { String = String };
+    }
+
+    public partial struct Entomoid
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+
+        public static implicit operator Entomoid(CimeliaClass CimeliaClass) => new Entomoid { CimeliaClass = CimeliaClass };
+        public static implicit operator Entomoid(long Integer) => new Entomoid { Integer = Integer };
+    }
+
+    public partial struct Epipaleolithic
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Epipaleolithic(double Double) => new Epipaleolithic { Double = Double };
+        public static implicit operator Epipaleolithic(long[] IntegerArray) => new Epipaleolithic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Expropriable
+    {
+        public CimeliaClass? CimeliaClass;
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Expropriable(CimeliaClass CimeliaClass) => new Expropriable { CimeliaClass = CimeliaClass };
+        public static implicit operator Expropriable(double Double) => new Expropriable { Double = Double };
+        public static implicit operator Expropriable(object[] NullArray) => new Expropriable { NullArray = NullArray };
+    }
+
+    public partial struct FagginglyElement
+    {
+        public double? Double;
+        public FagginglyClass? FagginglyClass;
+
+        public static implicit operator FagginglyElement(double Double) => new FagginglyElement { Double = Double };
+        public static implicit operator FagginglyElement(FagginglyClass FagginglyClass) => new FagginglyElement { FagginglyClass = FagginglyClass };
+    }
+
+    public partial struct FenkElement
+    {
+        public FenkClass? FenkClass;
+        public string? String;
+
+        public static implicit operator FenkElement(FenkClass FenkClass) => new FenkElement { FenkClass = FenkClass };
+        public static implicit operator FenkElement(string String) => new FenkElement { String = String };
+    }
+
+    public partial struct FlagmakingElement
+    {
+        public bool? Bool;
+        public double? Double;
+        public FlagmakingClass? FlagmakingClass;
+
+        public static implicit operator FlagmakingElement(bool Bool) => new FlagmakingElement { Bool = Bool };
+        public static implicit operator FlagmakingElement(double Double) => new FlagmakingElement { Double = Double };
+        public static implicit operator FlagmakingElement(FlagmakingClass FlagmakingClass) => new FlagmakingElement { FlagmakingClass = FlagmakingClass };
+    }
+
+    public partial struct Fluorometer
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Fluorometer(long Integer) => new Fluorometer { Integer = Integer };
+        public static implicit operator Fluorometer(string String) => new Fluorometer { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial struct Fuzzy
+    {
+        public long? Integer;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Fuzzy(long Integer) => new Fuzzy { Integer = Integer };
+        public static implicit operator Fuzzy(Dictionary<string, long?> UnionMap) => new Fuzzy { UnionMap = UnionMap };
+    }
+
+    public partial struct Gardenward
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Gardenward(bool Bool) => new Gardenward { Bool = Bool };
+        public static implicit operator Gardenward(long[] IntegerArray) => new Gardenward { IntegerArray = IntegerArray };
+        public static implicit operator Gardenward(string String) => new Gardenward { String = String };
+    }
+
+    public partial struct Generalissimo
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Generalissimo(bool Bool) => new Generalissimo { Bool = Bool };
+        public static implicit operator Generalissimo(Dictionary<string, long> IntegerMap) => new Generalissimo { IntegerMap = IntegerMap };
+        public bool IsNull => Bool == null && IntegerMap == null;
+    }
+
+    public partial struct Hemicrystalline
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hemicrystalline(CimeliaClass CimeliaClass) => new Hemicrystalline { CimeliaClass = CimeliaClass };
+        public static implicit operator Hemicrystalline(string String) => new Hemicrystalline { String = String };
+    }
+
+    public partial struct HemocoeleElement
+    {
+        public HemocoeleClass? HemocoeleClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator HemocoeleElement(HemocoeleClass HemocoeleClass) => new HemocoeleElement { HemocoeleClass = HemocoeleClass };
+        public static implicit operator HemocoeleElement(long[] IntegerArray) => new HemocoeleElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Hoister
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hoister(CimeliaClass CimeliaClass) => new Hoister { CimeliaClass = CimeliaClass };
+        public static implicit operator Hoister(string String) => new Hoister { String = String };
+        public bool IsNull => CimeliaClass == null && String == null;
+    }
+
+    public partial struct Hyperpiesi
+    {
+        public CimeliaClass? CimeliaClass;
+        public object[]? NullArray;
+
+        public static implicit operator Hyperpiesi(CimeliaClass CimeliaClass) => new Hyperpiesi { CimeliaClass = CimeliaClass };
+        public static implicit operator Hyperpiesi(object[] NullArray) => new Hyperpiesi { NullArray = NullArray };
+        public bool IsNull => NullArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Hyppish
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Hyppish(bool Bool) => new Hyppish { Bool = Bool };
+        public static implicit operator Hyppish(string String) => new Hyppish { String = String };
+        public bool IsNull => Bool == null && String == null;
+    }
+
+    public partial struct Idealizer
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Idealizer(CimeliaClass CimeliaClass) => new Idealizer { CimeliaClass = CimeliaClass };
+        public static implicit operator Idealizer(long Integer) => new Idealizer { Integer = Integer };
+        public static implicit operator Idealizer(object[] NullArray) => new Idealizer { NullArray = NullArray };
+    }
+
+    public partial struct Incrustator
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Incrustator(long Integer) => new Incrustator { Integer = Integer };
+        public static implicit operator Incrustator(long[] IntegerArray) => new Incrustator { IntegerArray = IntegerArray };
+        public static implicit operator Incrustator(string String) => new Incrustator { String = String };
+    }
+
+    public partial struct Intentiveness
+    {
+        public CimeliaClass? CimeliaClass;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Intentiveness(CimeliaClass CimeliaClass) => new Intentiveness { CimeliaClass = CimeliaClass };
+        public static implicit operator Intentiveness(double Double) => new Intentiveness { Double = Double };
+        public static implicit operator Intentiveness(string String) => new Intentiveness { String = String };
+    }
+
+    public partial struct Jacutinga
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Jacutinga(long[] IntegerArray) => new Jacutinga { IntegerArray = IntegerArray };
+        public static implicit operator Jacutinga(Dictionary<string, long?> UnionMap) => new Jacutinga { UnionMap = UnionMap };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CerographElementConverter.Singleton,
+                ChemotherapeuticElementConverter.Singleton,
+                CimeliaElementConverter.Singleton,
+                ClinodomeConverter.Singleton,
+                CoadjustElementConverter.Singleton,
+                ConsilienceConverter.Singleton,
+                ConstructorConverter.Singleton,
+                ContinuativeConverter.Singleton,
+                CredulityElementConverter.Singleton,
+                CrevicedConverter.Singleton,
+                DeruralizeElementConverter.Singleton,
+                DiaereseElementConverter.Singleton,
+                DownstrokeConverter.Singleton,
+                EleutheromaniaConverter.Singleton,
+                EntomoidConverter.Singleton,
+                EpipaleolithicConverter.Singleton,
+                ExpropriableConverter.Singleton,
+                FagginglyElementConverter.Singleton,
+                FenkElementConverter.Singleton,
+                FlagmakingElementConverter.Singleton,
+                FluorometerConverter.Singleton,
+                FuzzyConverter.Singleton,
+                GardenwardConverter.Singleton,
+                GeneralissimoConverter.Singleton,
+                HemicrystallineConverter.Singleton,
+                HemocoeleElementConverter.Singleton,
+                HoisterConverter.Singleton,
+                HyperpiesiConverter.Singleton,
+                HyppishConverter.Singleton,
+                IdealizerConverter.Singleton,
+                IncrustatorConverter.Singleton,
+                IntentivenessConverter.Singleton,
+                JacutingaConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CerographElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CerographElement) || t == typeof(CerographElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CerographElement { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CerographElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CerographClass>(reader);
+                    return new CerographElement { CerographClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CerographElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CerographElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CerographClass != null)
+            {
+                serializer.Serialize(writer, value.CerographClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CerographElement");
+        }
+
+        public static readonly CerographElementConverter Singleton = new CerographElementConverter();
+    }
+
+    internal class ChemotherapeuticElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChemotherapeuticElement) || t == typeof(ChemotherapeuticElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new ChemotherapeuticElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChemotherapeuticClass>(reader);
+                    return new ChemotherapeuticElement { ChemotherapeuticClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChemotherapeuticElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChemotherapeuticElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.ChemotherapeuticClass != null)
+            {
+                serializer.Serialize(writer, value.ChemotherapeuticClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChemotherapeuticElement");
+        }
+
+        public static readonly ChemotherapeuticElementConverter Singleton = new ChemotherapeuticElementConverter();
+    }
+
+    internal class CimeliaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CimeliaElement) || t == typeof(CimeliaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CimeliaElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new CimeliaElement { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new CimeliaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type CimeliaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CimeliaElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CimeliaElement");
+        }
+
+        public static readonly CimeliaElementConverter Singleton = new CimeliaElementConverter();
+    }
+
+    internal class ClinodomeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Clinodome) || t == typeof(Clinodome?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Clinodome { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Clinodome { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Clinodome");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Clinodome)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Clinodome");
+        }
+
+        public static readonly ClinodomeConverter Singleton = new ClinodomeConverter();
+    }
+
+    internal class CoadjustElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CoadjustElement) || t == typeof(CoadjustElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new CoadjustElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CoadjustClass>(reader);
+                    return new CoadjustElement { CoadjustClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CoadjustElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CoadjustElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.CoadjustClass != null)
+            {
+                serializer.Serialize(writer, value.CoadjustClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CoadjustElement");
+        }
+
+        public static readonly CoadjustElementConverter Singleton = new CoadjustElementConverter();
+    }
+
+    internal class ConsilienceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Consilience) || t == typeof(Consilience?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Consilience { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Consilience { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Consilience");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Consilience)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Consilience");
+        }
+
+        public static readonly ConsilienceConverter Singleton = new ConsilienceConverter();
+    }
+
+    internal class ConstructorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Constructor) || t == typeof(Constructor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Constructor { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Constructor { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Constructor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Constructor)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Constructor");
+        }
+
+        public static readonly ConstructorConverter Singleton = new ConstructorConverter();
+    }
+
+    internal class ContinuativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Continuative) || t == typeof(Continuative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Continuative { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Continuative { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Continuative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Continuative)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Continuative");
+        }
+
+        public static readonly ContinuativeConverter Singleton = new ContinuativeConverter();
+    }
+
+    internal class CredulityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CredulityElement) || t == typeof(CredulityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new CredulityElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CredulityElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CredulityClass>(reader);
+                    return new CredulityElement { CredulityClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CredulityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CredulityElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CredulityClass != null)
+            {
+                serializer.Serialize(writer, value.CredulityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CredulityElement");
+        }
+
+        public static readonly CredulityElementConverter Singleton = new CredulityElementConverter();
+    }
+
+    internal class CrevicedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Creviced) || t == typeof(Creviced?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Creviced { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Creviced { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Creviced { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Creviced");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Creviced)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Creviced");
+        }
+
+        public static readonly CrevicedConverter Singleton = new CrevicedConverter();
+    }
+
+    internal class DeruralizeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DeruralizeElement) || t == typeof(DeruralizeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DeruralizeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DeruralizeClass>(reader);
+                    return new DeruralizeElement { DeruralizeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new DeruralizeElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DeruralizeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DeruralizeElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.DeruralizeClass != null)
+            {
+                serializer.Serialize(writer, value.DeruralizeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DeruralizeElement");
+        }
+
+        public static readonly DeruralizeElementConverter Singleton = new DeruralizeElementConverter();
+    }
+
+    internal class DiaereseElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiaereseElement) || t == typeof(DiaereseElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DiaereseElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiaereseClass>(reader);
+                    return new DiaereseElement { DiaereseClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiaereseElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiaereseElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiaereseElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiaereseClass != null)
+            {
+                serializer.Serialize(writer, value.DiaereseClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiaereseElement");
+        }
+
+        public static readonly DiaereseElementConverter Singleton = new DiaereseElementConverter();
+    }
+
+    internal class DownstrokeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Downstroke) || t == typeof(Downstroke?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Downstroke { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Downstroke { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Downstroke { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Downstroke");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Downstroke)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Downstroke");
+        }
+
+        public static readonly DownstrokeConverter Singleton = new DownstrokeConverter();
+    }
+
+    internal class EleutheromaniaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eleutheromania) || t == typeof(Eleutheromania?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Eleutheromania { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Eleutheromania { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eleutheromania { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Eleutheromania");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eleutheromania)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eleutheromania");
+        }
+
+        public static readonly EleutheromaniaConverter Singleton = new EleutheromaniaConverter();
+    }
+
+    internal class EntomoidConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Entomoid) || t == typeof(Entomoid?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Entomoid { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Entomoid { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Entomoid");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Entomoid)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Entomoid");
+        }
+
+        public static readonly EntomoidConverter Singleton = new EntomoidConverter();
+    }
+
+    internal class EpipaleolithicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epipaleolithic) || t == typeof(Epipaleolithic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Epipaleolithic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Epipaleolithic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Epipaleolithic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epipaleolithic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epipaleolithic");
+        }
+
+        public static readonly EpipaleolithicConverter Singleton = new EpipaleolithicConverter();
+    }
+
+    internal class ExpropriableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Expropriable) || t == typeof(Expropriable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Expropriable { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Expropriable { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Expropriable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Expropriable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Expropriable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Expropriable");
+        }
+
+        public static readonly ExpropriableConverter Singleton = new ExpropriableConverter();
+    }
+
+    internal class FagginglyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FagginglyElement) || t == typeof(FagginglyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FagginglyElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FagginglyClass>(reader);
+                    return new FagginglyElement { FagginglyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FagginglyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FagginglyElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.FagginglyClass != null)
+            {
+                serializer.Serialize(writer, value.FagginglyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FagginglyElement");
+        }
+
+        public static readonly FagginglyElementConverter Singleton = new FagginglyElementConverter();
+    }
+
+    internal class FenkElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FenkElement) || t == typeof(FenkElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new FenkElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FenkClass>(reader);
+                    return new FenkElement { FenkClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FenkElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FenkElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.FenkClass != null)
+            {
+                serializer.Serialize(writer, value.FenkClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FenkElement");
+        }
+
+        public static readonly FenkElementConverter Singleton = new FenkElementConverter();
+    }
+
+    internal class FlagmakingElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FlagmakingElement) || t == typeof(FlagmakingElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FlagmakingElement { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new FlagmakingElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FlagmakingClass>(reader);
+                    return new FlagmakingElement { FlagmakingClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FlagmakingElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FlagmakingElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.FlagmakingClass != null)
+            {
+                serializer.Serialize(writer, value.FlagmakingClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FlagmakingElement");
+        }
+
+        public static readonly FlagmakingElementConverter Singleton = new FlagmakingElementConverter();
+    }
+
+    internal class FluorometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fluorometer) || t == typeof(Fluorometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Fluorometer { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fluorometer { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Fluorometer { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Fluorometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fluorometer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fluorometer");
+        }
+
+        public static readonly FluorometerConverter Singleton = new FluorometerConverter();
+    }
+
+    internal class FuzzyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fuzzy) || t == typeof(Fuzzy?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fuzzy { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Fuzzy { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Fuzzy");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fuzzy)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fuzzy");
+        }
+
+        public static readonly FuzzyConverter Singleton = new FuzzyConverter();
+    }
+
+    internal class GardenwardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gardenward) || t == typeof(Gardenward?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Gardenward { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Gardenward { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Gardenward { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Gardenward");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Gardenward)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Gardenward");
+        }
+
+        public static readonly GardenwardConverter Singleton = new GardenwardConverter();
+    }
+
+    internal class GeneralissimoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Generalissimo) || t == typeof(Generalissimo?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Generalissimo { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Generalissimo { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Generalissimo { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Generalissimo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Generalissimo)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Generalissimo");
+        }
+
+        public static readonly GeneralissimoConverter Singleton = new GeneralissimoConverter();
+    }
+
+    internal class HemicrystallineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hemicrystalline) || t == typeof(Hemicrystalline?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hemicrystalline { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hemicrystalline { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hemicrystalline");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hemicrystalline)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hemicrystalline");
+        }
+
+        public static readonly HemicrystallineConverter Singleton = new HemicrystallineConverter();
+    }
+
+    internal class HemocoeleElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(HemocoeleElement) || t == typeof(HemocoeleElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<HemocoeleClass>(reader);
+                    return new HemocoeleElement { HemocoeleClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new HemocoeleElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type HemocoeleElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (HemocoeleElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.HemocoeleClass != null)
+            {
+                serializer.Serialize(writer, value.HemocoeleClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type HemocoeleElement");
+        }
+
+        public static readonly HemocoeleElementConverter Singleton = new HemocoeleElementConverter();
+    }
+
+    internal class HoisterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hoister) || t == typeof(Hoister?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hoister { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hoister { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hoister { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hoister");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hoister)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hoister");
+        }
+
+        public static readonly HoisterConverter Singleton = new HoisterConverter();
+    }
+
+    internal class HyperpiesiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyperpiesi) || t == typeof(Hyperpiesi?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyperpiesi { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hyperpiesi { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Hyperpiesi { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyperpiesi");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyperpiesi)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyperpiesi");
+        }
+
+        public static readonly HyperpiesiConverter Singleton = new HyperpiesiConverter();
+    }
+
+    internal class HyppishConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyppish) || t == typeof(Hyppish?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyppish { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Hyppish { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hyppish { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyppish");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyppish)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyppish");
+        }
+
+        public static readonly HyppishConverter Singleton = new HyppishConverter();
+    }
+
+    internal class IdealizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Idealizer) || t == typeof(Idealizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Idealizer { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Idealizer { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Idealizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Idealizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Idealizer)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Idealizer");
+        }
+
+        public static readonly IdealizerConverter Singleton = new IdealizerConverter();
+    }
+
+    internal class IncrustatorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Incrustator) || t == typeof(Incrustator?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Incrustator { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Incrustator { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Incrustator { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Incrustator");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Incrustator)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Incrustator");
+        }
+
+        public static readonly IncrustatorConverter Singleton = new IncrustatorConverter();
+    }
+
+    internal class IntentivenessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Intentiveness) || t == typeof(Intentiveness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Intentiveness { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Intentiveness { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Intentiveness { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Intentiveness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Intentiveness)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Intentiveness");
+        }
+
+        public static readonly IntentivenessConverter Singleton = new IntentivenessConverter();
+    }
+
+    internal class JacutingaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Jacutinga) || t == typeof(Jacutinga?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Jacutinga { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Jacutinga { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Jacutinga");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Jacutinga)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Jacutinga");
+        }
+
+        public static readonly JacutingaConverter Singleton = new JacutingaConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations1.json/number-type-decimal--20a123601b5a/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations1.json/number-type-decimal--20a123601b5a/QuickType.cs
new file mode 100644
index 0000000..23eb11c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations1.json/number-type-decimal--20a123601b5a/QuickType.cs
@@ -0,0 +1,2712 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("centrodesmose", Required = Required.Always)]
+        public string Centrodesmose { get; set; }
+
+        [JsonProperty("cerograph", Required = Required.Always)]
+        public CerographElement[] Cerograph { get; set; }
+
+        [JsonProperty("chemotherapeutics", Required = Required.Always)]
+        public ChemotherapeuticElement[] Chemotherapeutics { get; set; }
+
+        [JsonProperty("cimelia", Required = Required.Always)]
+        public CimeliaElement[] Cimelia { get; set; }
+
+        [JsonProperty("citrated", Required = Required.Always)]
+        public long Citrated { get; set; }
+
+        [JsonProperty("clinodome", Required = Required.Always)]
+        public Clinodome[] Clinodome { get; set; }
+
+        [JsonProperty("coadjust", Required = Required.Always)]
+        public CoadjustElement[] Coadjust { get; set; }
+
+        [JsonProperty("consilience", Required = Required.Always)]
+        public Consilience[] Consilience { get; set; }
+
+        [JsonProperty("constructor", Required = Required.Always)]
+        public Constructor[] Constructor { get; set; }
+
+        [JsonProperty("continuative", Required = Required.Always)]
+        public Continuative[] Continuative { get; set; }
+
+        [JsonProperty("credulity", Required = Required.Always)]
+        public CredulityElement[] Credulity { get; set; }
+
+        [JsonProperty("creviced", Required = Required.Always)]
+        public Creviced[] Creviced { get; set; }
+
+        [JsonProperty("cubiculum", Required = Required.Always)]
+        public long?[][] Cubiculum { get; set; }
+
+        [JsonProperty("deruralize", Required = Required.Always)]
+        public DeruralizeElement[] Deruralize { get; set; }
+
+        [JsonProperty("diaereses", Required = Required.Always)]
+        public DiaereseElement[] Diaereses { get; set; }
+
+        [JsonProperty("dissolution", Required = Required.Always)]
+        public object[]?[] Dissolution { get; set; }
+
+        [JsonProperty("downstroke", Required = Required.Always)]
+        public Downstroke[] Downstroke { get; set; }
+
+        [JsonProperty("electrotautomerism", Required = Required.Always)]
+        public decimal?[] Electrotautomerism { get; set; }
+
+        [JsonProperty("eleutheromania", Required = Required.Always)]
+        public Eleutheromania[] Eleutheromania { get; set; }
+
+        [JsonProperty("encrust", Required = Required.Always)]
+        public Encrust Encrust { get; set; }
+
+        [JsonProperty("entomoid", Required = Required.Always)]
+        public Entomoid[] Entomoid { get; set; }
+
+        [JsonProperty("epipaleolithic", Required = Required.Always)]
+        public Epipaleolithic[] Epipaleolithic { get; set; }
+
+        [JsonProperty("expropriable", Required = Required.Always)]
+        public Expropriable[] Expropriable { get; set; }
+
+        [JsonProperty("faggingly", Required = Required.Always)]
+        public FagginglyElement[] Faggingly { get; set; }
+
+        [JsonProperty("fenks", Required = Required.Always)]
+        public FenkElement[] Fenks { get; set; }
+
+        [JsonProperty("flagmaking", Required = Required.Always)]
+        public FlagmakingElement[] Flagmaking { get; set; }
+
+        [JsonProperty("fluorometer", Required = Required.Always)]
+        public Fluorometer[] Fluorometer { get; set; }
+
+        [JsonProperty("fulsome", Required = Required.Always)]
+        public long?[] Fulsome { get; set; }
+
+        [JsonProperty("fuzzy", Required = Required.Always)]
+        public Fuzzy[] Fuzzy { get; set; }
+
+        [JsonProperty("gardenwards", Required = Required.Always)]
+        public Gardenward[] Gardenwards { get; set; }
+
+        [JsonProperty("generalissimo", Required = Required.Always)]
+        public Generalissimo[] Generalissimo { get; set; }
+
+        [JsonProperty("habeas", Required = Required.Always)]
+        public Dictionary<string, long>?[] Habeas { get; set; }
+
+        [JsonProperty("hemicrystalline", Required = Required.Always)]
+        public Hemicrystalline[] Hemicrystalline { get; set; }
+
+        [JsonProperty("hemocoele", Required = Required.Always)]
+        public HemocoeleElement[] Hemocoele { get; set; }
+
+        [JsonProperty("hoister", Required = Required.Always)]
+        public Hoister[] Hoister { get; set; }
+
+        [JsonProperty("hyperpiesis", Required = Required.Always)]
+        public Hyperpiesi[] Hyperpiesis { get; set; }
+
+        [JsonProperty("hyppish", Required = Required.Always)]
+        public Hyppish[] Hyppish { get; set; }
+
+        [JsonProperty("idealizer", Required = Required.Always)]
+        public Idealizer[] Idealizer { get; set; }
+
+        [JsonProperty("incrustator", Required = Required.Always)]
+        public Incrustator[] Incrustator { get; set; }
+
+        [JsonProperty("intentiveness", Required = Required.Always)]
+        public Intentiveness[] Intentiveness { get; set; }
+
+        [JsonProperty("interacinar", Required = Required.Always)]
+        public Interacinar Interacinar { get; set; }
+
+        [JsonProperty("intercorrelation", Required = Required.Always)]
+        public long[]?[] Intercorrelation { get; set; }
+
+        [JsonProperty("jacutinga", Required = Required.Always)]
+        public Jacutinga[] Jacutinga { get; set; }
+    }
+
+    public partial record CerographClass
+    {
+        [JsonProperty("apotropaion", Required = Required.AllowNull)]
+        public object Apotropaion { get; set; }
+
+        [JsonProperty("casuary", Required = Required.AllowNull)]
+        public object Casuary { get; set; }
+
+        [JsonProperty("creaker", Required = Required.AllowNull)]
+        public object Creaker { get; set; }
+
+        [JsonProperty("disqualification", Required = Required.AllowNull)]
+        public object Disqualification { get; set; }
+
+        [JsonProperty("imperatorious", Required = Required.AllowNull)]
+        public object Imperatorious { get; set; }
+
+        [JsonProperty("impermeabilize", Required = Required.AllowNull)]
+        public object Impermeabilize { get; set; }
+
+        [JsonProperty("metastoma", Required = Required.AllowNull)]
+        public object Metastoma { get; set; }
+
+        [JsonProperty("noctidiurnal", Required = Required.AllowNull)]
+        public object Noctidiurnal { get; set; }
+
+        [JsonProperty("nonreserve", Required = Required.AllowNull)]
+        public object Nonreserve { get; set; }
+
+        [JsonProperty("ophthalmotonometry", Required = Required.AllowNull)]
+        public object Ophthalmotonometry { get; set; }
+
+        [JsonProperty("pailful", Required = Required.AllowNull)]
+        public object Pailful { get; set; }
+
+        [JsonProperty("pigfish", Required = Required.AllowNull)]
+        public object Pigfish { get; set; }
+
+        [JsonProperty("pongee", Required = Required.AllowNull)]
+        public object Pongee { get; set; }
+
+        [JsonProperty("prosodical", Required = Required.AllowNull)]
+        public object Prosodical { get; set; }
+
+        [JsonProperty("scrofuloderm", Required = Required.AllowNull)]
+        public object Scrofuloderm { get; set; }
+
+        [JsonProperty("storekeeping", Required = Required.AllowNull)]
+        public object Storekeeping { get; set; }
+
+        [JsonProperty("therologist", Required = Required.AllowNull)]
+        public object Therologist { get; set; }
+
+        [JsonProperty("Tolowa", Required = Required.AllowNull)]
+        public object Tolowa { get; set; }
+
+        [JsonProperty("tradeful", Required = Required.AllowNull)]
+        public object Tradeful { get; set; }
+
+        [JsonProperty("unriveting", Required = Required.AllowNull)]
+        public object Unriveting { get; set; }
+    }
+
+    public partial record ChemotherapeuticClass
+    {
+        [JsonProperty("angioneurotic")]
+        public object? Angioneurotic { get; set; }
+
+        [JsonProperty("availment")]
+        public object? Availment { get; set; }
+
+        [JsonProperty("bladelet")]
+        public object? Bladelet { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("caulis")]
+        public object? Caulis { get; set; }
+
+        [JsonProperty("chalcus")]
+        public object? Chalcus { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enteradenological")]
+        public object? Enteradenological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("imporosity")]
+        public object? Imporosity { get; set; }
+
+        [JsonProperty("insistently")]
+        public object? Insistently { get; set; }
+
+        [JsonProperty("intraparietal")]
+        public object? Intraparietal { get; set; }
+
+        [JsonProperty("ivied")]
+        public object? Ivied { get; set; }
+
+        [JsonProperty("Maureen")]
+        public object? Maureen { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("nostochine")]
+        public object? Nostochine { get; set; }
+
+        [JsonProperty("nutcracker")]
+        public object? Nutcracker { get; set; }
+
+        [JsonProperty("ofttimes")]
+        public object? Ofttimes { get; set; }
+
+        [JsonProperty("phenocryst")]
+        public object? Phenocryst { get; set; }
+
+        [JsonProperty("precoincident")]
+        public object? Precoincident { get; set; }
+
+        [JsonProperty("ramiferous")]
+        public object? Ramiferous { get; set; }
+
+        [JsonProperty("stagmometer")]
+        public object? Stagmometer { get; set; }
+
+        [JsonProperty("tetherball")]
+        public object? Tetherball { get; set; }
+
+        [JsonProperty("unshy")]
+        public object? Unshy { get; set; }
+    }
+
+    public partial record CimeliaClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public decimal Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record CoadjustClass
+    {
+        [JsonProperty("amidosulphonal")]
+        public object? Amidosulphonal { get; set; }
+
+        [JsonProperty("Benny")]
+        public object? Benny { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ensnare")]
+        public object? Ensnare { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hybridizer")]
+        public object? Hybridizer { get; set; }
+
+        [JsonProperty("leastwise")]
+        public object? Leastwise { get; set; }
+
+        [JsonProperty("lof")]
+        public object? Lof { get; set; }
+
+        [JsonProperty("monkhood")]
+        public object? Monkhood { get; set; }
+
+        [JsonProperty("Netherlandish")]
+        public object? Netherlandish { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("peonism")]
+        public object? Peonism { get; set; }
+
+        [JsonProperty("Phonelescope")]
+        public object? Phonelescope { get; set; }
+
+        [JsonProperty("porphyrogeniture")]
+        public object? Porphyrogeniture { get; set; }
+
+        [JsonProperty("preindemnify")]
+        public object? Preindemnify { get; set; }
+
+        [JsonProperty("rosal")]
+        public object? Rosal { get; set; }
+
+        [JsonProperty("scalenous")]
+        public object? Scalenous { get; set; }
+
+        [JsonProperty("scopine")]
+        public object? Scopine { get; set; }
+
+        [JsonProperty("Sedaceae")]
+        public object? Sedaceae { get; set; }
+
+        [JsonProperty("suberinize")]
+        public object? Suberinize { get; set; }
+
+        [JsonProperty("symbiot")]
+        public object? Symbiot { get; set; }
+
+        [JsonProperty("tablefellow")]
+        public object? Tablefellow { get; set; }
+
+        [JsonProperty("unchargeable")]
+        public object? Unchargeable { get; set; }
+    }
+
+    public partial record CredulityClass
+    {
+        [JsonProperty("ammonolytic", Required = Required.AllowNull)]
+        public object Ammonolytic { get; set; }
+
+        [JsonProperty("bushmaster", Required = Required.AllowNull)]
+        public object Bushmaster { get; set; }
+
+        [JsonProperty("considering", Required = Required.AllowNull)]
+        public object Considering { get; set; }
+
+        [JsonProperty("consuetudinary", Required = Required.AllowNull)]
+        public object Consuetudinary { get; set; }
+
+        [JsonProperty("embarras", Required = Required.AllowNull)]
+        public object Embarras { get; set; }
+
+        [JsonProperty("fineness", Required = Required.AllowNull)]
+        public object Fineness { get; set; }
+
+        [JsonProperty("flaithship", Required = Required.AllowNull)]
+        public object Flaithship { get; set; }
+
+        [JsonProperty("Flavia", Required = Required.AllowNull)]
+        public object Flavia { get; set; }
+
+        [JsonProperty("gruffly", Required = Required.AllowNull)]
+        public object Gruffly { get; set; }
+
+        [JsonProperty("Hedychium", Required = Required.AllowNull)]
+        public object Hedychium { get; set; }
+
+        [JsonProperty("leadwort", Required = Required.AllowNull)]
+        public object Leadwort { get; set; }
+
+        [JsonProperty("overseriously", Required = Required.AllowNull)]
+        public object Overseriously { get; set; }
+
+        [JsonProperty("parabola", Required = Required.AllowNull)]
+        public object Parabola { get; set; }
+
+        [JsonProperty("pectinatodenticulate", Required = Required.AllowNull)]
+        public object Pectinatodenticulate { get; set; }
+
+        [JsonProperty("Popean", Required = Required.AllowNull)]
+        public object Popean { get; set; }
+
+        [JsonProperty("pornocrat", Required = Required.AllowNull)]
+        public object Pornocrat { get; set; }
+
+        [JsonProperty("quadrisect", Required = Required.AllowNull)]
+        public object Quadrisect { get; set; }
+
+        [JsonProperty("seriality", Required = Required.AllowNull)]
+        public object Seriality { get; set; }
+
+        [JsonProperty("vamphorn", Required = Required.AllowNull)]
+        public object Vamphorn { get; set; }
+
+        [JsonProperty("wharp", Required = Required.AllowNull)]
+        public object Wharp { get; set; }
+    }
+
+    public partial record DeruralizeClass
+    {
+        [JsonProperty("bockerel", Required = Required.AllowNull)]
+        public object Bockerel { get; set; }
+
+        [JsonProperty("boulder", Required = Required.AllowNull)]
+        public object Boulder { get; set; }
+
+        [JsonProperty("churrus", Required = Required.AllowNull)]
+        public object Churrus { get; set; }
+
+        [JsonProperty("counterdigged", Required = Required.AllowNull)]
+        public object Counterdigged { get; set; }
+
+        [JsonProperty("dialogite", Required = Required.AllowNull)]
+        public object Dialogite { get; set; }
+
+        [JsonProperty("digenic", Required = Required.AllowNull)]
+        public object Digenic { get; set; }
+
+        [JsonProperty("dunbird", Required = Required.AllowNull)]
+        public object Dunbird { get; set; }
+
+        [JsonProperty("ergatogyne", Required = Required.AllowNull)]
+        public object Ergatogyne { get; set; }
+
+        [JsonProperty("fiendful", Required = Required.AllowNull)]
+        public object Fiendful { get; set; }
+
+        [JsonProperty("jackrod", Required = Required.AllowNull)]
+        public object Jackrod { get; set; }
+
+        [JsonProperty("Jehovistic", Required = Required.AllowNull)]
+        public object Jehovistic { get; set; }
+
+        [JsonProperty("Paninean", Required = Required.AllowNull)]
+        public object Paninean { get; set; }
+
+        [JsonProperty("panther", Required = Required.AllowNull)]
+        public object Panther { get; set; }
+
+        [JsonProperty("placentigerous", Required = Required.AllowNull)]
+        public object Placentigerous { get; set; }
+
+        [JsonProperty("Romney", Required = Required.AllowNull)]
+        public object Romney { get; set; }
+
+        [JsonProperty("sparm", Required = Required.AllowNull)]
+        public object Sparm { get; set; }
+
+        [JsonProperty("tocsin", Required = Required.AllowNull)]
+        public object Tocsin { get; set; }
+
+        [JsonProperty("unnicked", Required = Required.AllowNull)]
+        public object Unnicked { get; set; }
+
+        [JsonProperty("unstavable", Required = Required.AllowNull)]
+        public object Unstavable { get; set; }
+
+        [JsonProperty("windfirm", Required = Required.AllowNull)]
+        public object Windfirm { get; set; }
+    }
+
+    public partial record DiaereseClass
+    {
+        [JsonProperty("Amoreuxia", Required = Required.AllowNull)]
+        public object Amoreuxia { get; set; }
+
+        [JsonProperty("ani", Required = Required.AllowNull)]
+        public object Ani { get; set; }
+
+        [JsonProperty("bernicle", Required = Required.AllowNull)]
+        public object Bernicle { get; set; }
+
+        [JsonProperty("blackwasher", Required = Required.AllowNull)]
+        public object Blackwasher { get; set; }
+
+        [JsonProperty("blowhard", Required = Required.AllowNull)]
+        public object Blowhard { get; set; }
+
+        [JsonProperty("broma", Required = Required.AllowNull)]
+        public object Broma { get; set; }
+
+        [JsonProperty("closecross", Required = Required.AllowNull)]
+        public object Closecross { get; set; }
+
+        [JsonProperty("congregationalism", Required = Required.AllowNull)]
+        public object Congregationalism { get; set; }
+
+        [JsonProperty("grayly", Required = Required.AllowNull)]
+        public object Grayly { get; set; }
+
+        [JsonProperty("historically", Required = Required.AllowNull)]
+        public object Historically { get; set; }
+
+        [JsonProperty("hoast", Required = Required.AllowNull)]
+        public object Hoast { get; set; }
+
+        [JsonProperty("irretentive", Required = Required.AllowNull)]
+        public object Irretentive { get; set; }
+
+        [JsonProperty("parcener", Required = Required.AllowNull)]
+        public object Parcener { get; set; }
+
+        [JsonProperty("pedder", Required = Required.AllowNull)]
+        public object Pedder { get; set; }
+
+        [JsonProperty("pseudoanatomic", Required = Required.AllowNull)]
+        public object Pseudoanatomic { get; set; }
+
+        [JsonProperty("rhizocarpian", Required = Required.AllowNull)]
+        public object Rhizocarpian { get; set; }
+
+        [JsonProperty("samel", Required = Required.AllowNull)]
+        public object Samel { get; set; }
+
+        [JsonProperty("silker", Required = Required.AllowNull)]
+        public object Silker { get; set; }
+
+        [JsonProperty("subdentated", Required = Required.AllowNull)]
+        public object Subdentated { get; set; }
+
+        [JsonProperty("subobscure", Required = Required.AllowNull)]
+        public object Subobscure { get; set; }
+    }
+
+    public partial record Encrust
+    {
+        [JsonProperty("comradely", Required = Required.AllowNull)]
+        public object Comradely { get; set; }
+
+        [JsonProperty("diacanthous", Required = Required.AllowNull)]
+        public object Diacanthous { get; set; }
+
+        [JsonProperty("feminineness", Required = Required.AllowNull)]
+        public object Feminineness { get; set; }
+
+        [JsonProperty("gossamered", Required = Required.AllowNull)]
+        public object Gossamered { get; set; }
+
+        [JsonProperty("Hibernia", Required = Required.AllowNull)]
+        public object Hibernia { get; set; }
+
+        [JsonProperty("Hibiscus", Required = Required.AllowNull)]
+        public object Hibiscus { get; set; }
+
+        [JsonProperty("Lepidosauria", Required = Required.AllowNull)]
+        public object Lepidosauria { get; set; }
+
+        [JsonProperty("lollingly", Required = Required.AllowNull)]
+        public object Lollingly { get; set; }
+
+        [JsonProperty("manager", Required = Required.AllowNull)]
+        public object Manager { get; set; }
+
+        [JsonProperty("mechanic", Required = Required.AllowNull)]
+        public object Mechanic { get; set; }
+
+        [JsonProperty("overminuteness", Required = Required.AllowNull)]
+        public object Overminuteness { get; set; }
+
+        [JsonProperty("papelonne", Required = Required.AllowNull)]
+        public object Papelonne { get; set; }
+
+        [JsonProperty("plebification", Required = Required.AllowNull)]
+        public object Plebification { get; set; }
+
+        [JsonProperty("pugmiller", Required = Required.AllowNull)]
+        public object Pugmiller { get; set; }
+
+        [JsonProperty("recoveror", Required = Required.AllowNull)]
+        public object Recoveror { get; set; }
+
+        [JsonProperty("spermatoblastic", Required = Required.AllowNull)]
+        public object Spermatoblastic { get; set; }
+
+        [JsonProperty("Syllidae", Required = Required.AllowNull)]
+        public object Syllidae { get; set; }
+
+        [JsonProperty("ungyved", Required = Required.AllowNull)]
+        public object Ungyved { get; set; }
+
+        [JsonProperty("whirlabout", Required = Required.AllowNull)]
+        public object Whirlabout { get; set; }
+
+        [JsonProperty("woodenware", Required = Required.AllowNull)]
+        public object Woodenware { get; set; }
+    }
+
+    public partial record FagginglyClass
+    {
+        [JsonProperty("abranchian", Required = Required.AllowNull)]
+        public object Abranchian { get; set; }
+
+        [JsonProperty("aculeiform", Required = Required.AllowNull)]
+        public object Aculeiform { get; set; }
+
+        [JsonProperty("adiaphoristic", Required = Required.AllowNull)]
+        public object Adiaphoristic { get; set; }
+
+        [JsonProperty("adoptionism", Required = Required.AllowNull)]
+        public object Adoptionism { get; set; }
+
+        [JsonProperty("Anglic", Required = Required.AllowNull)]
+        public object Anglic { get; set; }
+
+        [JsonProperty("antrotomy", Required = Required.AllowNull)]
+        public object Antrotomy { get; set; }
+
+        [JsonProperty("coerciveness", Required = Required.AllowNull)]
+        public object Coerciveness { get; set; }
+
+        [JsonProperty("decorist", Required = Required.AllowNull)]
+        public object Decorist { get; set; }
+
+        [JsonProperty("duckhood", Required = Required.AllowNull)]
+        public object Duckhood { get; set; }
+
+        [JsonProperty("Heteromeri", Required = Required.AllowNull)]
+        public object Heteromeri { get; set; }
+
+        [JsonProperty("hypochnose", Required = Required.AllowNull)]
+        public object Hypochnose { get; set; }
+
+        [JsonProperty("lochage", Required = Required.AllowNull)]
+        public object Lochage { get; set; }
+
+        [JsonProperty("melee", Required = Required.AllowNull)]
+        public object Melee { get; set; }
+
+        [JsonProperty("nonconformitant", Required = Required.AllowNull)]
+        public object Nonconformitant { get; set; }
+
+        [JsonProperty("Poinsettia", Required = Required.AllowNull)]
+        public object Poinsettia { get; set; }
+
+        [JsonProperty("putatively", Required = Required.AllowNull)]
+        public object Putatively { get; set; }
+
+        [JsonProperty("semivolatile", Required = Required.AllowNull)]
+        public object Semivolatile { get; set; }
+
+        [JsonProperty("soleas", Required = Required.AllowNull)]
+        public object Soleas { get; set; }
+
+        [JsonProperty("unfastenable", Required = Required.AllowNull)]
+        public object Unfastenable { get; set; }
+
+        [JsonProperty("unmillinered", Required = Required.AllowNull)]
+        public object Unmillinered { get; set; }
+    }
+
+    public partial record FenkClass
+    {
+        [JsonProperty("apoise", Required = Required.AllowNull)]
+        public object Apoise { get; set; }
+
+        [JsonProperty("astronomize", Required = Required.AllowNull)]
+        public object Astronomize { get; set; }
+
+        [JsonProperty("cockhorse", Required = Required.AllowNull)]
+        public object Cockhorse { get; set; }
+
+        [JsonProperty("copular", Required = Required.AllowNull)]
+        public object Copular { get; set; }
+
+        [JsonProperty("Dagomba", Required = Required.AllowNull)]
+        public object Dagomba { get; set; }
+
+        [JsonProperty("draffy", Required = Required.AllowNull)]
+        public object Draffy { get; set; }
+
+        [JsonProperty("foreigner", Required = Required.AllowNull)]
+        public object Foreigner { get; set; }
+
+        [JsonProperty("Guyandot", Required = Required.AllowNull)]
+        public object Guyandot { get; set; }
+
+        [JsonProperty("neurogliosis", Required = Required.AllowNull)]
+        public object Neurogliosis { get; set; }
+
+        [JsonProperty("osmious", Required = Required.AllowNull)]
+        public object Osmious { get; set; }
+
+        [JsonProperty("palpitate", Required = Required.AllowNull)]
+        public object Palpitate { get; set; }
+
+        [JsonProperty("rebukeable", Required = Required.AllowNull)]
+        public object Rebukeable { get; set; }
+
+        [JsonProperty("Reinwardtia", Required = Required.AllowNull)]
+        public object Reinwardtia { get; set; }
+
+        [JsonProperty("reservatory", Required = Required.AllowNull)]
+        public object Reservatory { get; set; }
+
+        [JsonProperty("scalt", Required = Required.AllowNull)]
+        public object Scalt { get; set; }
+
+        [JsonProperty("scripturalize", Required = Required.AllowNull)]
+        public object Scripturalize { get; set; }
+
+        [JsonProperty("tintometer", Required = Required.AllowNull)]
+        public object Tintometer { get; set; }
+
+        [JsonProperty("Tritoness", Required = Required.AllowNull)]
+        public object Tritoness { get; set; }
+
+        [JsonProperty("undergrade", Required = Required.AllowNull)]
+        public object Undergrade { get; set; }
+
+        [JsonProperty("undermountain", Required = Required.AllowNull)]
+        public object Undermountain { get; set; }
+    }
+
+    public partial record FlagmakingClass
+    {
+        [JsonProperty("albarco", Required = Required.AllowNull)]
+        public object Albarco { get; set; }
+
+        [JsonProperty("Bunodonta", Required = Required.AllowNull)]
+        public object Bunodonta { get; set; }
+
+        [JsonProperty("hornify", Required = Required.AllowNull)]
+        public object Hornify { get; set; }
+
+        [JsonProperty("Hydrocorisae", Required = Required.AllowNull)]
+        public object Hydrocorisae { get; set; }
+
+        [JsonProperty("hypoglossus", Required = Required.AllowNull)]
+        public object Hypoglossus { get; set; }
+
+        [JsonProperty("inexpiably", Required = Required.AllowNull)]
+        public object Inexpiably { get; set; }
+
+        [JsonProperty("ingratitude", Required = Required.AllowNull)]
+        public object Ingratitude { get; set; }
+
+        [JsonProperty("ladyfly", Required = Required.AllowNull)]
+        public object Ladyfly { get; set; }
+
+        [JsonProperty("medicament", Required = Required.AllowNull)]
+        public object Medicament { get; set; }
+
+        [JsonProperty("monogrammatic", Required = Required.AllowNull)]
+        public object Monogrammatic { get; set; }
+
+        [JsonProperty("nobbut", Required = Required.AllowNull)]
+        public object Nobbut { get; set; }
+
+        [JsonProperty("Notacanthidae", Required = Required.AllowNull)]
+        public object Notacanthidae { get; set; }
+
+        [JsonProperty("polyplacophore", Required = Required.AllowNull)]
+        public object Polyplacophore { get; set; }
+
+        [JsonProperty("proexercise", Required = Required.AllowNull)]
+        public object Proexercise { get; set; }
+
+        [JsonProperty("protoplast", Required = Required.AllowNull)]
+        public object Protoplast { get; set; }
+
+        [JsonProperty("puzzling", Required = Required.AllowNull)]
+        public object Puzzling { get; set; }
+
+        [JsonProperty("splanchnoskeleton", Required = Required.AllowNull)]
+        public object Splanchnoskeleton { get; set; }
+
+        [JsonProperty("unloveliness", Required = Required.AllowNull)]
+        public object Unloveliness { get; set; }
+
+        [JsonProperty("unquarantined", Required = Required.AllowNull)]
+        public object Unquarantined { get; set; }
+
+        [JsonProperty("unrenounceable", Required = Required.AllowNull)]
+        public object Unrenounceable { get; set; }
+    }
+
+    public partial record HemocoeleClass
+    {
+        [JsonProperty("acrogamy")]
+        public object? Acrogamy { get; set; }
+
+        [JsonProperty("amelification")]
+        public object? Amelification { get; set; }
+
+        [JsonProperty("autobiographic")]
+        public object? Autobiographic { get; set; }
+
+        [JsonProperty("berat")]
+        public object? Berat { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("disproportionably")]
+        public object? Disproportionably { get; set; }
+
+        [JsonProperty("erythrite")]
+        public object? Erythrite { get; set; }
+
+        [JsonProperty("graphic")]
+        public object? Graphic { get; set; }
+
+        [JsonProperty("hepatological")]
+        public object? Hepatological { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("incommensurably")]
+        public object? Incommensurably { get; set; }
+
+        [JsonProperty("misaffirm")]
+        public object? Misaffirm { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("pocketbook")]
+        public object? Pocketbook { get; set; }
+
+        [JsonProperty("sclerometric")]
+        public object? Sclerometric { get; set; }
+
+        [JsonProperty("stambouline")]
+        public object? Stambouline { get; set; }
+
+        [JsonProperty("stickpin")]
+        public object? Stickpin { get; set; }
+
+        [JsonProperty("tubulure")]
+        public object? Tubulure { get; set; }
+
+        [JsonProperty("undelated")]
+        public object? Undelated { get; set; }
+
+        [JsonProperty("unsalt")]
+        public object? Unsalt { get; set; }
+
+        [JsonProperty("untutelar")]
+        public object? Untutelar { get; set; }
+
+        [JsonProperty("vagrant")]
+        public object? Vagrant { get; set; }
+
+        [JsonProperty("Walt")]
+        public object? Walt { get; set; }
+    }
+
+    public partial record Interacinar
+    {
+        [JsonProperty("assapan", Required = Required.Always)]
+        public decimal Assapan { get; set; }
+
+        [JsonProperty("benefactorship", Required = Required.Always)]
+        public bool Benefactorship { get; set; }
+
+        [JsonProperty("triseriatim", Required = Required.Always)]
+        public string Triseriatim { get; set; }
+
+        [JsonProperty("tubbing", Required = Required.Always)]
+        public long Tubbing { get; set; }
+
+        [JsonProperty("untrimmed", Required = Required.AllowNull)]
+        public object Untrimmed { get; set; }
+    }
+
+    public partial struct CerographElement
+    {
+        public CerographClass? CerographClass;
+        public string? String;
+
+        public static implicit operator CerographElement(CerographClass CerographClass) => new CerographElement { CerographClass = CerographClass };
+        public static implicit operator CerographElement(string String) => new CerographElement { String = String };
+        public bool IsNull => CerographClass == null && String == null;
+    }
+
+    public partial struct ChemotherapeuticElement
+    {
+        public ChemotherapeuticClass? ChemotherapeuticClass;
+        public long? Integer;
+
+        public static implicit operator ChemotherapeuticElement(ChemotherapeuticClass ChemotherapeuticClass) => new ChemotherapeuticElement { ChemotherapeuticClass = ChemotherapeuticClass };
+        public static implicit operator ChemotherapeuticElement(long Integer) => new ChemotherapeuticElement { Integer = Integer };
+    }
+
+    public partial struct CimeliaElement
+    {
+        public CimeliaClass? CimeliaClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator CimeliaElement(CimeliaClass CimeliaClass) => new CimeliaElement { CimeliaClass = CimeliaClass };
+        public static implicit operator CimeliaElement(long[] IntegerArray) => new CimeliaElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Clinodome
+    {
+        public decimal? Double;
+        public string? String;
+
+        public static implicit operator Clinodome(decimal Double) => new Clinodome { Double = Double };
+        public static implicit operator Clinodome(string String) => new Clinodome { String = String };
+    }
+
+    public partial struct CoadjustElement
+    {
+        public CoadjustClass? CoadjustClass;
+        public decimal? Double;
+
+        public static implicit operator CoadjustElement(CoadjustClass CoadjustClass) => new CoadjustElement { CoadjustClass = CoadjustClass };
+        public static implicit operator CoadjustElement(decimal Double) => new CoadjustElement { Double = Double };
+    }
+
+    public partial struct Consilience
+    {
+        public decimal? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Consilience(decimal Double) => new Consilience { Double = Double };
+        public static implicit operator Consilience(Dictionary<string, long> IntegerMap) => new Consilience { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Constructor
+    {
+        public bool? Bool;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Constructor(bool Bool) => new Constructor { Bool = Bool };
+        public static implicit operator Constructor(Dictionary<string, long?> UnionMap) => new Constructor { UnionMap = UnionMap };
+    }
+
+    public partial struct Continuative
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Continuative(Dictionary<string, long> IntegerMap) => new Continuative { IntegerMap = IntegerMap };
+        public static implicit operator Continuative(string String) => new Continuative { String = String };
+    }
+
+    public partial struct CredulityElement
+    {
+        public CredulityClass? CredulityClass;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator CredulityElement(CredulityClass CredulityClass) => new CredulityElement { CredulityClass = CredulityClass };
+        public static implicit operator CredulityElement(long Integer) => new CredulityElement { Integer = Integer };
+        public static implicit operator CredulityElement(string String) => new CredulityElement { String = String };
+    }
+
+    public partial struct Creviced
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Creviced(bool Bool) => new Creviced { Bool = Bool };
+        public static implicit operator Creviced(Dictionary<string, long> IntegerMap) => new Creviced { IntegerMap = IntegerMap };
+        public static implicit operator Creviced(string String) => new Creviced { String = String };
+    }
+
+    public partial struct DeruralizeElement
+    {
+        public bool? Bool;
+        public DeruralizeClass? DeruralizeClass;
+        public object[]? NullArray;
+
+        public static implicit operator DeruralizeElement(bool Bool) => new DeruralizeElement { Bool = Bool };
+        public static implicit operator DeruralizeElement(DeruralizeClass DeruralizeClass) => new DeruralizeElement { DeruralizeClass = DeruralizeClass };
+        public static implicit operator DeruralizeElement(object[] NullArray) => new DeruralizeElement { NullArray = NullArray };
+    }
+
+    public partial struct DiaereseElement
+    {
+        public bool? Bool;
+        public DiaereseClass? DiaereseClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator DiaereseElement(bool Bool) => new DiaereseElement { Bool = Bool };
+        public static implicit operator DiaereseElement(DiaereseClass DiaereseClass) => new DiaereseElement { DiaereseClass = DiaereseClass };
+        public static implicit operator DiaereseElement(long[] IntegerArray) => new DiaereseElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Downstroke
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Downstroke(bool Bool) => new Downstroke { Bool = Bool };
+        public static implicit operator Downstroke(object[] NullArray) => new Downstroke { NullArray = NullArray };
+        public static implicit operator Downstroke(string String) => new Downstroke { String = String };
+    }
+
+    public partial struct Eleutheromania
+    {
+        public decimal? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Eleutheromania(decimal Double) => new Eleutheromania { Double = Double };
+        public static implicit operator Eleutheromania(Dictionary<string, long> IntegerMap) => new Eleutheromania { IntegerMap = IntegerMap };
+        public static implicit operator Eleutheromania(string String) => new Eleutheromania { String = String };
+    }
+
+    public partial struct Entomoid
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+
+        public static implicit operator Entomoid(CimeliaClass CimeliaClass) => new Entomoid { CimeliaClass = CimeliaClass };
+        public static implicit operator Entomoid(long Integer) => new Entomoid { Integer = Integer };
+    }
+
+    public partial struct Epipaleolithic
+    {
+        public decimal? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Epipaleolithic(decimal Double) => new Epipaleolithic { Double = Double };
+        public static implicit operator Epipaleolithic(long[] IntegerArray) => new Epipaleolithic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Expropriable
+    {
+        public CimeliaClass? CimeliaClass;
+        public decimal? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Expropriable(CimeliaClass CimeliaClass) => new Expropriable { CimeliaClass = CimeliaClass };
+        public static implicit operator Expropriable(decimal Double) => new Expropriable { Double = Double };
+        public static implicit operator Expropriable(object[] NullArray) => new Expropriable { NullArray = NullArray };
+    }
+
+    public partial struct FagginglyElement
+    {
+        public decimal? Double;
+        public FagginglyClass? FagginglyClass;
+
+        public static implicit operator FagginglyElement(decimal Double) => new FagginglyElement { Double = Double };
+        public static implicit operator FagginglyElement(FagginglyClass FagginglyClass) => new FagginglyElement { FagginglyClass = FagginglyClass };
+    }
+
+    public partial struct FenkElement
+    {
+        public FenkClass? FenkClass;
+        public string? String;
+
+        public static implicit operator FenkElement(FenkClass FenkClass) => new FenkElement { FenkClass = FenkClass };
+        public static implicit operator FenkElement(string String) => new FenkElement { String = String };
+    }
+
+    public partial struct FlagmakingElement
+    {
+        public bool? Bool;
+        public decimal? Double;
+        public FlagmakingClass? FlagmakingClass;
+
+        public static implicit operator FlagmakingElement(bool Bool) => new FlagmakingElement { Bool = Bool };
+        public static implicit operator FlagmakingElement(decimal Double) => new FlagmakingElement { Double = Double };
+        public static implicit operator FlagmakingElement(FlagmakingClass FlagmakingClass) => new FlagmakingElement { FlagmakingClass = FlagmakingClass };
+    }
+
+    public partial struct Fluorometer
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Fluorometer(long Integer) => new Fluorometer { Integer = Integer };
+        public static implicit operator Fluorometer(string String) => new Fluorometer { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial struct Fuzzy
+    {
+        public long? Integer;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Fuzzy(long Integer) => new Fuzzy { Integer = Integer };
+        public static implicit operator Fuzzy(Dictionary<string, long?> UnionMap) => new Fuzzy { UnionMap = UnionMap };
+    }
+
+    public partial struct Gardenward
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Gardenward(bool Bool) => new Gardenward { Bool = Bool };
+        public static implicit operator Gardenward(long[] IntegerArray) => new Gardenward { IntegerArray = IntegerArray };
+        public static implicit operator Gardenward(string String) => new Gardenward { String = String };
+    }
+
+    public partial struct Generalissimo
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Generalissimo(bool Bool) => new Generalissimo { Bool = Bool };
+        public static implicit operator Generalissimo(Dictionary<string, long> IntegerMap) => new Generalissimo { IntegerMap = IntegerMap };
+        public bool IsNull => Bool == null && IntegerMap == null;
+    }
+
+    public partial struct Hemicrystalline
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hemicrystalline(CimeliaClass CimeliaClass) => new Hemicrystalline { CimeliaClass = CimeliaClass };
+        public static implicit operator Hemicrystalline(string String) => new Hemicrystalline { String = String };
+    }
+
+    public partial struct HemocoeleElement
+    {
+        public HemocoeleClass? HemocoeleClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator HemocoeleElement(HemocoeleClass HemocoeleClass) => new HemocoeleElement { HemocoeleClass = HemocoeleClass };
+        public static implicit operator HemocoeleElement(long[] IntegerArray) => new HemocoeleElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Hoister
+    {
+        public CimeliaClass? CimeliaClass;
+        public string? String;
+
+        public static implicit operator Hoister(CimeliaClass CimeliaClass) => new Hoister { CimeliaClass = CimeliaClass };
+        public static implicit operator Hoister(string String) => new Hoister { String = String };
+        public bool IsNull => CimeliaClass == null && String == null;
+    }
+
+    public partial struct Hyperpiesi
+    {
+        public CimeliaClass? CimeliaClass;
+        public object[]? NullArray;
+
+        public static implicit operator Hyperpiesi(CimeliaClass CimeliaClass) => new Hyperpiesi { CimeliaClass = CimeliaClass };
+        public static implicit operator Hyperpiesi(object[] NullArray) => new Hyperpiesi { NullArray = NullArray };
+        public bool IsNull => NullArray == null && CimeliaClass == null;
+    }
+
+    public partial struct Hyppish
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Hyppish(bool Bool) => new Hyppish { Bool = Bool };
+        public static implicit operator Hyppish(string String) => new Hyppish { String = String };
+        public bool IsNull => Bool == null && String == null;
+    }
+
+    public partial struct Idealizer
+    {
+        public CimeliaClass? CimeliaClass;
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Idealizer(CimeliaClass CimeliaClass) => new Idealizer { CimeliaClass = CimeliaClass };
+        public static implicit operator Idealizer(long Integer) => new Idealizer { Integer = Integer };
+        public static implicit operator Idealizer(object[] NullArray) => new Idealizer { NullArray = NullArray };
+    }
+
+    public partial struct Incrustator
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Incrustator(long Integer) => new Incrustator { Integer = Integer };
+        public static implicit operator Incrustator(long[] IntegerArray) => new Incrustator { IntegerArray = IntegerArray };
+        public static implicit operator Incrustator(string String) => new Incrustator { String = String };
+    }
+
+    public partial struct Intentiveness
+    {
+        public CimeliaClass? CimeliaClass;
+        public decimal? Double;
+        public string? String;
+
+        public static implicit operator Intentiveness(CimeliaClass CimeliaClass) => new Intentiveness { CimeliaClass = CimeliaClass };
+        public static implicit operator Intentiveness(decimal Double) => new Intentiveness { Double = Double };
+        public static implicit operator Intentiveness(string String) => new Intentiveness { String = String };
+    }
+
+    public partial struct Jacutinga
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Jacutinga(long[] IntegerArray) => new Jacutinga { IntegerArray = IntegerArray };
+        public static implicit operator Jacutinga(Dictionary<string, long?> UnionMap) => new Jacutinga { UnionMap = UnionMap };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CerographElementConverter.Singleton,
+                ChemotherapeuticElementConverter.Singleton,
+                CimeliaElementConverter.Singleton,
+                ClinodomeConverter.Singleton,
+                CoadjustElementConverter.Singleton,
+                ConsilienceConverter.Singleton,
+                ConstructorConverter.Singleton,
+                ContinuativeConverter.Singleton,
+                CredulityElementConverter.Singleton,
+                CrevicedConverter.Singleton,
+                DeruralizeElementConverter.Singleton,
+                DiaereseElementConverter.Singleton,
+                DownstrokeConverter.Singleton,
+                EleutheromaniaConverter.Singleton,
+                EntomoidConverter.Singleton,
+                EpipaleolithicConverter.Singleton,
+                ExpropriableConverter.Singleton,
+                FagginglyElementConverter.Singleton,
+                FenkElementConverter.Singleton,
+                FlagmakingElementConverter.Singleton,
+                FluorometerConverter.Singleton,
+                FuzzyConverter.Singleton,
+                GardenwardConverter.Singleton,
+                GeneralissimoConverter.Singleton,
+                HemicrystallineConverter.Singleton,
+                HemocoeleElementConverter.Singleton,
+                HoisterConverter.Singleton,
+                HyperpiesiConverter.Singleton,
+                HyppishConverter.Singleton,
+                IdealizerConverter.Singleton,
+                IncrustatorConverter.Singleton,
+                IntentivenessConverter.Singleton,
+                JacutingaConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CerographElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CerographElement) || t == typeof(CerographElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CerographElement { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CerographElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CerographClass>(reader);
+                    return new CerographElement { CerographClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CerographElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CerographElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CerographClass != null)
+            {
+                serializer.Serialize(writer, value.CerographClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CerographElement");
+        }
+
+        public static readonly CerographElementConverter Singleton = new CerographElementConverter();
+    }
+
+    internal class ChemotherapeuticElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChemotherapeuticElement) || t == typeof(ChemotherapeuticElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new ChemotherapeuticElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChemotherapeuticClass>(reader);
+                    return new ChemotherapeuticElement { ChemotherapeuticClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChemotherapeuticElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChemotherapeuticElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.ChemotherapeuticClass != null)
+            {
+                serializer.Serialize(writer, value.ChemotherapeuticClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChemotherapeuticElement");
+        }
+
+        public static readonly ChemotherapeuticElementConverter Singleton = new ChemotherapeuticElementConverter();
+    }
+
+    internal class CimeliaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CimeliaElement) || t == typeof(CimeliaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new CimeliaElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new CimeliaElement { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new CimeliaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type CimeliaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CimeliaElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CimeliaElement");
+        }
+
+        public static readonly CimeliaElementConverter Singleton = new CimeliaElementConverter();
+    }
+
+    internal class ClinodomeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Clinodome) || t == typeof(Clinodome?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Clinodome { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Clinodome { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Clinodome");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Clinodome)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Clinodome");
+        }
+
+        public static readonly ClinodomeConverter Singleton = new ClinodomeConverter();
+    }
+
+    internal class CoadjustElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CoadjustElement) || t == typeof(CoadjustElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new CoadjustElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CoadjustClass>(reader);
+                    return new CoadjustElement { CoadjustClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CoadjustElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CoadjustElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.CoadjustClass != null)
+            {
+                serializer.Serialize(writer, value.CoadjustClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CoadjustElement");
+        }
+
+        public static readonly CoadjustElementConverter Singleton = new CoadjustElementConverter();
+    }
+
+    internal class ConsilienceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Consilience) || t == typeof(Consilience?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Consilience { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Consilience { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Consilience");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Consilience)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Consilience");
+        }
+
+        public static readonly ConsilienceConverter Singleton = new ConsilienceConverter();
+    }
+
+    internal class ConstructorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Constructor) || t == typeof(Constructor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Constructor { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Constructor { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Constructor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Constructor)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Constructor");
+        }
+
+        public static readonly ConstructorConverter Singleton = new ConstructorConverter();
+    }
+
+    internal class ContinuativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Continuative) || t == typeof(Continuative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Continuative { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Continuative { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Continuative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Continuative)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Continuative");
+        }
+
+        public static readonly ContinuativeConverter Singleton = new ContinuativeConverter();
+    }
+
+    internal class CredulityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(CredulityElement) || t == typeof(CredulityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new CredulityElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new CredulityElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CredulityClass>(reader);
+                    return new CredulityElement { CredulityClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type CredulityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (CredulityElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CredulityClass != null)
+            {
+                serializer.Serialize(writer, value.CredulityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type CredulityElement");
+        }
+
+        public static readonly CredulityElementConverter Singleton = new CredulityElementConverter();
+    }
+
+    internal class CrevicedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Creviced) || t == typeof(Creviced?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Creviced { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Creviced { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Creviced { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Creviced");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Creviced)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Creviced");
+        }
+
+        public static readonly CrevicedConverter Singleton = new CrevicedConverter();
+    }
+
+    internal class DeruralizeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DeruralizeElement) || t == typeof(DeruralizeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DeruralizeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DeruralizeClass>(reader);
+                    return new DeruralizeElement { DeruralizeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new DeruralizeElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DeruralizeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DeruralizeElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.DeruralizeClass != null)
+            {
+                serializer.Serialize(writer, value.DeruralizeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DeruralizeElement");
+        }
+
+        public static readonly DeruralizeElementConverter Singleton = new DeruralizeElementConverter();
+    }
+
+    internal class DiaereseElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiaereseElement) || t == typeof(DiaereseElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new DiaereseElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiaereseClass>(reader);
+                    return new DiaereseElement { DiaereseClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiaereseElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiaereseElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiaereseElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiaereseClass != null)
+            {
+                serializer.Serialize(writer, value.DiaereseClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiaereseElement");
+        }
+
+        public static readonly DiaereseElementConverter Singleton = new DiaereseElementConverter();
+    }
+
+    internal class DownstrokeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Downstroke) || t == typeof(Downstroke?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Downstroke { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Downstroke { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Downstroke { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Downstroke");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Downstroke)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Downstroke");
+        }
+
+        public static readonly DownstrokeConverter Singleton = new DownstrokeConverter();
+    }
+
+    internal class EleutheromaniaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eleutheromania) || t == typeof(Eleutheromania?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Eleutheromania { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Eleutheromania { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eleutheromania { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Eleutheromania");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eleutheromania)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eleutheromania");
+        }
+
+        public static readonly EleutheromaniaConverter Singleton = new EleutheromaniaConverter();
+    }
+
+    internal class EntomoidConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Entomoid) || t == typeof(Entomoid?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Entomoid { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Entomoid { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Entomoid");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Entomoid)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Entomoid");
+        }
+
+        public static readonly EntomoidConverter Singleton = new EntomoidConverter();
+    }
+
+    internal class EpipaleolithicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epipaleolithic) || t == typeof(Epipaleolithic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Epipaleolithic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Epipaleolithic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Epipaleolithic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epipaleolithic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epipaleolithic");
+        }
+
+        public static readonly EpipaleolithicConverter Singleton = new EpipaleolithicConverter();
+    }
+
+    internal class ExpropriableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Expropriable) || t == typeof(Expropriable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Expropriable { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Expropriable { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Expropriable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Expropriable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Expropriable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Expropriable");
+        }
+
+        public static readonly ExpropriableConverter Singleton = new ExpropriableConverter();
+    }
+
+    internal class FagginglyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FagginglyElement) || t == typeof(FagginglyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new FagginglyElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FagginglyClass>(reader);
+                    return new FagginglyElement { FagginglyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FagginglyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FagginglyElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.FagginglyClass != null)
+            {
+                serializer.Serialize(writer, value.FagginglyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FagginglyElement");
+        }
+
+        public static readonly FagginglyElementConverter Singleton = new FagginglyElementConverter();
+    }
+
+    internal class FenkElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FenkElement) || t == typeof(FenkElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new FenkElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FenkClass>(reader);
+                    return new FenkElement { FenkClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FenkElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FenkElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.FenkClass != null)
+            {
+                serializer.Serialize(writer, value.FenkClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FenkElement");
+        }
+
+        public static readonly FenkElementConverter Singleton = new FenkElementConverter();
+    }
+
+    internal class FlagmakingElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FlagmakingElement) || t == typeof(FlagmakingElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new FlagmakingElement { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new FlagmakingElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FlagmakingClass>(reader);
+                    return new FlagmakingElement { FlagmakingClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type FlagmakingElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FlagmakingElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.FlagmakingClass != null)
+            {
+                serializer.Serialize(writer, value.FlagmakingClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FlagmakingElement");
+        }
+
+        public static readonly FlagmakingElementConverter Singleton = new FlagmakingElementConverter();
+    }
+
+    internal class FluorometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fluorometer) || t == typeof(Fluorometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Fluorometer { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fluorometer { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Fluorometer { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Fluorometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fluorometer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fluorometer");
+        }
+
+        public static readonly FluorometerConverter Singleton = new FluorometerConverter();
+    }
+
+    internal class FuzzyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Fuzzy) || t == typeof(Fuzzy?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Fuzzy { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Fuzzy { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Fuzzy");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Fuzzy)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Fuzzy");
+        }
+
+        public static readonly FuzzyConverter Singleton = new FuzzyConverter();
+    }
+
+    internal class GardenwardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gardenward) || t == typeof(Gardenward?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Gardenward { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Gardenward { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Gardenward { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Gardenward");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Gardenward)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Gardenward");
+        }
+
+        public static readonly GardenwardConverter Singleton = new GardenwardConverter();
+    }
+
+    internal class GeneralissimoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Generalissimo) || t == typeof(Generalissimo?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Generalissimo { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Generalissimo { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Generalissimo { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Generalissimo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Generalissimo)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Generalissimo");
+        }
+
+        public static readonly GeneralissimoConverter Singleton = new GeneralissimoConverter();
+    }
+
+    internal class HemicrystallineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hemicrystalline) || t == typeof(Hemicrystalline?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hemicrystalline { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hemicrystalline { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hemicrystalline");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hemicrystalline)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hemicrystalline");
+        }
+
+        public static readonly HemicrystallineConverter Singleton = new HemicrystallineConverter();
+    }
+
+    internal class HemocoeleElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(HemocoeleElement) || t == typeof(HemocoeleElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<HemocoeleClass>(reader);
+                    return new HemocoeleElement { HemocoeleClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new HemocoeleElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type HemocoeleElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (HemocoeleElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.HemocoeleClass != null)
+            {
+                serializer.Serialize(writer, value.HemocoeleClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type HemocoeleElement");
+        }
+
+        public static readonly HemocoeleElementConverter Singleton = new HemocoeleElementConverter();
+    }
+
+    internal class HoisterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hoister) || t == typeof(Hoister?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hoister { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hoister { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hoister { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Hoister");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hoister)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hoister");
+        }
+
+        public static readonly HoisterConverter Singleton = new HoisterConverter();
+    }
+
+    internal class HyperpiesiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyperpiesi) || t == typeof(Hyperpiesi?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyperpiesi { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Hyperpiesi { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Hyperpiesi { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyperpiesi");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyperpiesi)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyperpiesi");
+        }
+
+        public static readonly HyperpiesiConverter Singleton = new HyperpiesiConverter();
+    }
+
+    internal class HyppishConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Hyppish) || t == typeof(Hyppish?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Hyppish { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Hyppish { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Hyppish { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Hyppish");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Hyppish)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Hyppish");
+        }
+
+        public static readonly HyppishConverter Singleton = new HyppishConverter();
+    }
+
+    internal class IdealizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Idealizer) || t == typeof(Idealizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Idealizer { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Idealizer { CimeliaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Idealizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Idealizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Idealizer)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Idealizer");
+        }
+
+        public static readonly IdealizerConverter Singleton = new IdealizerConverter();
+    }
+
+    internal class IncrustatorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Incrustator) || t == typeof(Incrustator?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Incrustator { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Incrustator { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Incrustator { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Incrustator");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Incrustator)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Incrustator");
+        }
+
+        public static readonly IncrustatorConverter Singleton = new IncrustatorConverter();
+    }
+
+    internal class IntentivenessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Intentiveness) || t == typeof(Intentiveness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Intentiveness { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Intentiveness { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CimeliaClass>(reader);
+                    return new Intentiveness { CimeliaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Intentiveness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Intentiveness)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.CimeliaClass != null)
+            {
+                serializer.Serialize(writer, value.CimeliaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Intentiveness");
+        }
+
+        public static readonly IntentivenessConverter Singleton = new IntentivenessConverter();
+    }
+
+    internal class JacutingaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Jacutinga) || t == typeof(Jacutinga?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Jacutinga { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Jacutinga { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Jacutinga");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Jacutinga)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Jacutinga");
+        }
+
+        public static readonly JacutingaConverter Singleton = new JacutingaConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations2.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations2.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs
new file mode 100644
index 0000000..5964520
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations2.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs
@@ -0,0 +1,2668 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("Abranchiata", Required = Required.Always)]
+        public Abranchiata[] Abranchiata { get; set; }
+
+        [JsonProperty("academe", Required = Required.Always)]
+        public Academe[] Academe { get; set; }
+
+        [JsonProperty("acquirable", Required = Required.Always)]
+        public Acquirable[] Acquirable { get; set; }
+
+        [JsonProperty("aerometry", Required = Required.Always)]
+        public Aerometry[] Aerometry { get; set; }
+
+        [JsonProperty("alexin", Required = Required.Always)]
+        public Alexin[] Alexin { get; set; }
+
+        [JsonProperty("alleviate", Required = Required.Always)]
+        public AlleviateElement[] Alleviate { get; set; }
+
+        [JsonProperty("amaas", Required = Required.Always)]
+        public Amaa[] Amaas { get; set; }
+
+        [JsonProperty("ambassage", Required = Required.Always)]
+        public Ambassage[] Ambassage { get; set; }
+
+        [JsonProperty("amphithyron", Required = Required.Always)]
+        public Amphithyron?[] Amphithyron { get; set; }
+
+        [JsonProperty("Andriana", Required = Required.Always)]
+        public string?[] Andriana { get; set; }
+
+        [JsonProperty("ankee", Required = Required.Always)]
+        public AnkeeElement[] Ankee { get; set; }
+
+        [JsonProperty("annihilator", Required = Required.Always)]
+        public Dictionary<string, long?>?[] Annihilator { get; set; }
+
+        [JsonProperty("annulose", Required = Required.AllowNull)]
+        public dynamic Annulose { get; set; }
+
+        [JsonProperty("Ansarie", Required = Required.Always)]
+        public AnsarieElement[] Ansarie { get; set; }
+
+        [JsonProperty("aphasia", Required = Required.Always)]
+        public Aphasia[] Aphasia { get; set; }
+
+        [JsonProperty("asprawl", Required = Required.Always)]
+        public Asprawl[] Asprawl { get; set; }
+
+        [JsonProperty("attractive", Required = Required.Always)]
+        public bool?[] Attractive { get; set; }
+
+        [JsonProperty("barksome", Required = Required.Always)]
+        public Dictionary<string, long> Barksome { get; set; }
+
+        [JsonProperty("bedesman", Required = Required.Always)]
+        public Bedesman[] Bedesman { get; set; }
+
+        [JsonProperty("belard", Required = Required.Always)]
+        public Belard[] Belard { get; set; }
+
+        [JsonProperty("bocking", Required = Required.Always)]
+        public Bocking[] Bocking { get; set; }
+
+        [JsonProperty("brawlingly", Required = Required.Always)]
+        public Brawlingly[] Brawlingly { get; set; }
+
+        [JsonProperty("brookie", Required = Required.Always)]
+        public Brookie[] Brookie { get; set; }
+
+        [JsonProperty("bumboatman", Required = Required.Always)]
+        public Bumboatman[] Bumboatman { get; set; }
+
+        [JsonProperty("bystreet", Required = Required.Always)]
+        public dynamic[] Bystreet { get; set; }
+
+        [JsonProperty("calaverite", Required = Required.Always)]
+        public Calaverite[] Calaverite { get; set; }
+
+        [JsonProperty("catallactic", Required = Required.Always)]
+        public Catallactic[] Catallactic { get; set; }
+
+        [JsonProperty("cemental", Required = Required.Always)]
+        public Cemental[] Cemental { get; set; }
+
+        [JsonProperty("Chytridiaceae", Required = Required.Always)]
+        public ChytridiaceaeElement[] Chytridiaceae { get; set; }
+
+        [JsonProperty("Discordia", Required = Required.Always)]
+        public DiscordiaElement[] Discordia { get; set; }
+
+        [JsonProperty("Endomyces", Required = Required.Always)]
+        public Endomyce[] Endomyces { get; set; }
+
+        [JsonProperty("Epinephelidae", Required = Required.Always)]
+        public Epinephelidae[] Epinephelidae { get; set; }
+
+        [JsonProperty("Eupatorium", Required = Required.Always)]
+        public Eupatorium[] Eupatorium { get; set; }
+
+        [JsonProperty("Gryphosaurus", Required = Required.Always)]
+        public GryphosaurusElement[] Gryphosaurus { get; set; }
+
+        [JsonProperty("Koryak", Required = Required.Always)]
+        public Koryak[] Koryak { get; set; }
+
+        [JsonProperty("Lavinia", Required = Required.Always)]
+        public LaviniaElement[] Lavinia { get; set; }
+
+        [JsonProperty("Oskar", Required = Required.Always)]
+        public OskarElement[] Oskar { get; set; }
+
+        [JsonProperty("Rebecca", Required = Required.Always)]
+        public RebeccaElement[] Rebecca { get; set; }
+
+        [JsonProperty("Rhomboganoidei", Required = Required.Always)]
+        public Rhomboganoidei[] Rhomboganoidei { get; set; }
+
+        [JsonProperty("Rigsmal", Required = Required.Always)]
+        public bool Rigsmal { get; set; }
+
+        [JsonProperty("Ruellia", Required = Required.Always)]
+        public Ruellia[] Ruellia { get; set; }
+
+        [JsonProperty("School", Required = Required.Always)]
+        public School[] School { get; set; }
+
+        [JsonProperty("Shakespearolater", Required = Required.Always)]
+        public Shakespearolater[] Shakespearolater { get; set; }
+
+        [JsonProperty("Svan", Required = Required.Always)]
+        public double[] Svan { get; set; }
+
+        [JsonProperty("Wayao", Required = Required.Always)]
+        public Dictionary<string, double> Wayao { get; set; }
+    }
+
+    public partial record AlleviateClass
+    {
+        [JsonProperty("apriori", Required = Required.AllowNull)]
+        public dynamic Apriori { get; set; }
+
+        [JsonProperty("beggarer", Required = Required.AllowNull)]
+        public dynamic Beggarer { get; set; }
+
+        [JsonProperty("brokenheartedly", Required = Required.AllowNull)]
+        public dynamic Brokenheartedly { get; set; }
+
+        [JsonProperty("debilitation", Required = Required.AllowNull)]
+        public dynamic Debilitation { get; set; }
+
+        [JsonProperty("frike", Required = Required.AllowNull)]
+        public dynamic Frike { get; set; }
+
+        [JsonProperty("gastrolith", Required = Required.AllowNull)]
+        public dynamic Gastrolith { get; set; }
+
+        [JsonProperty("Hulsean", Required = Required.AllowNull)]
+        public dynamic Hulsean { get; set; }
+
+        [JsonProperty("orthocentric", Required = Required.AllowNull)]
+        public dynamic Orthocentric { get; set; }
+
+        [JsonProperty("petaly", Required = Required.AllowNull)]
+        public dynamic Petaly { get; set; }
+
+        [JsonProperty("probudgeting", Required = Required.AllowNull)]
+        public dynamic Probudgeting { get; set; }
+
+        [JsonProperty("reacquire", Required = Required.AllowNull)]
+        public dynamic Reacquire { get; set; }
+
+        [JsonProperty("scow", Required = Required.AllowNull)]
+        public dynamic Scow { get; set; }
+
+        [JsonProperty("shutoff", Required = Required.AllowNull)]
+        public dynamic Shutoff { get; set; }
+
+        [JsonProperty("subcontiguous", Required = Required.AllowNull)]
+        public dynamic Subcontiguous { get; set; }
+
+        [JsonProperty("suffumigate", Required = Required.AllowNull)]
+        public dynamic Suffumigate { get; set; }
+
+        [JsonProperty("transformable", Required = Required.AllowNull)]
+        public dynamic Transformable { get; set; }
+
+        [JsonProperty("uncoroneted", Required = Required.AllowNull)]
+        public dynamic Uncoroneted { get; set; }
+
+        [JsonProperty("unparking", Required = Required.AllowNull)]
+        public dynamic Unparking { get; set; }
+
+        [JsonProperty("unvarnishedness", Required = Required.AllowNull)]
+        public dynamic Unvarnishedness { get; set; }
+
+        [JsonProperty("wherewithal", Required = Required.AllowNull)]
+        public dynamic Wherewithal { get; set; }
+    }
+
+    public partial record Rebecca
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public dynamic Nonbookish { get; set; }
+    }
+
+    public partial record Amphithyron
+    {
+        [JsonProperty("akroasis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Akroasis { get; set; }
+
+        [JsonProperty("antiphonical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Antiphonical { get; set; }
+
+        [JsonProperty("basebred", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Basebred { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("conductometric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conductometric { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ensilation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ensilation { get; set; }
+
+        [JsonProperty("eyebolt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Eyebolt { get; set; }
+
+        [JsonProperty("fistulated", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fistulated { get; set; }
+
+        [JsonProperty("heteropod", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Heteropod { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Juniperus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Juniperus { get; set; }
+
+        [JsonProperty("labyrinthically", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Labyrinthically { get; set; }
+
+        [JsonProperty("martyrization", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Martyrization { get; set; }
+
+        [JsonProperty("mispolicy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mispolicy { get; set; }
+
+        [JsonProperty("multipara", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Multipara { get; set; }
+
+        [JsonProperty("Nazirite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nazirite { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("possessorial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Possessorial { get; set; }
+
+        [JsonProperty("shamed", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shamed { get; set; }
+
+        [JsonProperty("shelfworn", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shelfworn { get; set; }
+
+        [JsonProperty("stagnum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stagnum { get; set; }
+
+        [JsonProperty("Those", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Those { get; set; }
+
+        [JsonProperty("undecimal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undecimal { get; set; }
+    }
+
+    public partial record AnkeeClass
+    {
+        [JsonProperty("Anomoean", Required = Required.AllowNull)]
+        public dynamic Anomoean { get; set; }
+
+        [JsonProperty("barleyhood", Required = Required.AllowNull)]
+        public dynamic Barleyhood { get; set; }
+
+        [JsonProperty("befriender", Required = Required.AllowNull)]
+        public dynamic Befriender { get; set; }
+
+        [JsonProperty("brutishness", Required = Required.AllowNull)]
+        public dynamic Brutishness { get; set; }
+
+        [JsonProperty("cephalalgy", Required = Required.AllowNull)]
+        public dynamic Cephalalgy { get; set; }
+
+        [JsonProperty("cirurgian", Required = Required.AllowNull)]
+        public dynamic Cirurgian { get; set; }
+
+        [JsonProperty("conventionally", Required = Required.AllowNull)]
+        public dynamic Conventionally { get; set; }
+
+        [JsonProperty("jackshay", Required = Required.AllowNull)]
+        public dynamic Jackshay { get; set; }
+
+        [JsonProperty("milammeter", Required = Required.AllowNull)]
+        public dynamic Milammeter { get; set; }
+
+        [JsonProperty("Naja", Required = Required.AllowNull)]
+        public dynamic Naja { get; set; }
+
+        [JsonProperty("ombrological", Required = Required.AllowNull)]
+        public dynamic Ombrological { get; set; }
+
+        [JsonProperty("phonasthenia", Required = Required.AllowNull)]
+        public dynamic Phonasthenia { get; set; }
+
+        [JsonProperty("retrievableness", Required = Required.AllowNull)]
+        public dynamic Retrievableness { get; set; }
+
+        [JsonProperty("snakily", Required = Required.AllowNull)]
+        public dynamic Snakily { get; set; }
+
+        [JsonProperty("swot", Required = Required.AllowNull)]
+        public dynamic Swot { get; set; }
+
+        [JsonProperty("tartlet", Required = Required.AllowNull)]
+        public dynamic Tartlet { get; set; }
+
+        [JsonProperty("thiofuran", Required = Required.AllowNull)]
+        public dynamic Thiofuran { get; set; }
+
+        [JsonProperty("tracheophone", Required = Required.AllowNull)]
+        public dynamic Tracheophone { get; set; }
+
+        [JsonProperty("tuglike", Required = Required.AllowNull)]
+        public dynamic Tuglike { get; set; }
+
+        [JsonProperty("unscratchingly", Required = Required.AllowNull)]
+        public dynamic Unscratchingly { get; set; }
+    }
+
+    public partial record AnsarieClass
+    {
+        [JsonProperty("accension", Required = Required.AllowNull)]
+        public dynamic Accension { get; set; }
+
+        [JsonProperty("Alida", Required = Required.AllowNull)]
+        public dynamic Alida { get; set; }
+
+        [JsonProperty("asteria", Required = Required.AllowNull)]
+        public dynamic Asteria { get; set; }
+
+        [JsonProperty("beriberic", Required = Required.AllowNull)]
+        public dynamic Beriberic { get; set; }
+
+        [JsonProperty("edgebone", Required = Required.AllowNull)]
+        public dynamic Edgebone { get; set; }
+
+        [JsonProperty("gastrodialysis", Required = Required.AllowNull)]
+        public dynamic Gastrodialysis { get; set; }
+
+        [JsonProperty("geographic", Required = Required.AllowNull)]
+        public dynamic Geographic { get; set; }
+
+        [JsonProperty("Ictonyx", Required = Required.AllowNull)]
+        public dynamic Ictonyx { get; set; }
+
+        [JsonProperty("metrocele", Required = Required.AllowNull)]
+        public dynamic Metrocele { get; set; }
+
+        [JsonProperty("misgraft", Required = Required.AllowNull)]
+        public dynamic Misgraft { get; set; }
+
+        [JsonProperty("monteith", Required = Required.AllowNull)]
+        public dynamic Monteith { get; set; }
+
+        [JsonProperty("notcher", Required = Required.AllowNull)]
+        public dynamic Notcher { get; set; }
+
+        [JsonProperty("prorestriction", Required = Required.AllowNull)]
+        public dynamic Prorestriction { get; set; }
+
+        [JsonProperty("Ramist", Required = Required.AllowNull)]
+        public dynamic Ramist { get; set; }
+
+        [JsonProperty("throatlet", Required = Required.AllowNull)]
+        public dynamic Throatlet { get; set; }
+
+        [JsonProperty("unfair", Required = Required.AllowNull)]
+        public dynamic Unfair { get; set; }
+
+        [JsonProperty("unsynonymous", Required = Required.AllowNull)]
+        public dynamic Unsynonymous { get; set; }
+
+        [JsonProperty("water", Required = Required.AllowNull)]
+        public dynamic Water { get; set; }
+
+        [JsonProperty("zestfully", Required = Required.AllowNull)]
+        public dynamic Zestfully { get; set; }
+
+        [JsonProperty("zincic", Required = Required.AllowNull)]
+        public dynamic Zincic { get; set; }
+    }
+
+    public partial record ChytridiaceaeClass
+    {
+        [JsonProperty("Batidaceae", Required = Required.AllowNull)]
+        public dynamic Batidaceae { get; set; }
+
+        [JsonProperty("Brechites", Required = Required.AllowNull)]
+        public dynamic Brechites { get; set; }
+
+        [JsonProperty("codespairer", Required = Required.AllowNull)]
+        public dynamic Codespairer { get; set; }
+
+        [JsonProperty("Emery", Required = Required.AllowNull)]
+        public dynamic Emery { get; set; }
+
+        [JsonProperty("enervative", Required = Required.AllowNull)]
+        public dynamic Enervative { get; set; }
+
+        [JsonProperty("excriminate", Required = Required.AllowNull)]
+        public dynamic Excriminate { get; set; }
+
+        [JsonProperty("goshenite", Required = Required.AllowNull)]
+        public dynamic Goshenite { get; set; }
+
+        [JsonProperty("grime", Required = Required.AllowNull)]
+        public dynamic Grime { get; set; }
+
+        [JsonProperty("gritten", Required = Required.AllowNull)]
+        public dynamic Gritten { get; set; }
+
+        [JsonProperty("hectorly", Required = Required.AllowNull)]
+        public dynamic Hectorly { get; set; }
+
+        [JsonProperty("intermediation", Required = Required.AllowNull)]
+        public dynamic Intermediation { get; set; }
+
+        [JsonProperty("meeterly", Required = Required.AllowNull)]
+        public dynamic Meeterly { get; set; }
+
+        [JsonProperty("Narraganset", Required = Required.AllowNull)]
+        public dynamic Narraganset { get; set; }
+
+        [JsonProperty("onymatic", Required = Required.AllowNull)]
+        public dynamic Onymatic { get; set; }
+
+        [JsonProperty("paddlecock", Required = Required.AllowNull)]
+        public dynamic Paddlecock { get; set; }
+
+        [JsonProperty("thana", Required = Required.AllowNull)]
+        public dynamic Thana { get; set; }
+
+        [JsonProperty("thornily", Required = Required.AllowNull)]
+        public dynamic Thornily { get; set; }
+
+        [JsonProperty("uckia", Required = Required.AllowNull)]
+        public dynamic Uckia { get; set; }
+
+        [JsonProperty("unmettle", Required = Required.AllowNull)]
+        public dynamic Unmettle { get; set; }
+
+        [JsonProperty("vorticellid", Required = Required.AllowNull)]
+        public dynamic Vorticellid { get; set; }
+    }
+
+    public partial record DiscordiaClass
+    {
+        [JsonProperty("Altaic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Altaic { get; set; }
+
+        [JsonProperty("amoristic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amoristic { get; set; }
+
+        [JsonProperty("blennophthalmia", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Blennophthalmia { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disciplinability", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Disciplinability { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("goofer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goofer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("laryngograph", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Laryngograph { get; set; }
+
+        [JsonProperty("leucitis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Leucitis { get; set; }
+
+        [JsonProperty("lymphocyst", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lymphocyst { get; set; }
+
+        [JsonProperty("microcosmology", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Microcosmology { get; set; }
+
+        [JsonProperty("nauseation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nauseation { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("Patarin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Patarin { get; set; }
+
+        [JsonProperty("preliberal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preliberal { get; set; }
+
+        [JsonProperty("prettifier", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Prettifier { get; set; }
+
+        [JsonProperty("rangework", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rangework { get; set; }
+
+        [JsonProperty("redient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Redient { get; set; }
+
+        [JsonProperty("subfusiform", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subfusiform { get; set; }
+
+        [JsonProperty("suicidical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Suicidical { get; set; }
+
+        [JsonProperty("swow", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Swow { get; set; }
+
+        [JsonProperty("wastrel", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wastrel { get; set; }
+
+        [JsonProperty("wingle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wingle { get; set; }
+    }
+
+    public partial record GryphosaurusClass
+    {
+        [JsonProperty("amissibility", Required = Required.AllowNull)]
+        public dynamic Amissibility { get; set; }
+
+        [JsonProperty("Burushaski", Required = Required.AllowNull)]
+        public dynamic Burushaski { get; set; }
+
+        [JsonProperty("citronin", Required = Required.AllowNull)]
+        public dynamic Citronin { get; set; }
+
+        [JsonProperty("coplaintiff", Required = Required.AllowNull)]
+        public dynamic Coplaintiff { get; set; }
+
+        [JsonProperty("disquisitionary", Required = Required.AllowNull)]
+        public dynamic Disquisitionary { get; set; }
+
+        [JsonProperty("enoplan", Required = Required.AllowNull)]
+        public dynamic Enoplan { get; set; }
+
+        [JsonProperty("faintness", Required = Required.AllowNull)]
+        public dynamic Faintness { get; set; }
+
+        [JsonProperty("hebetomy", Required = Required.AllowNull)]
+        public dynamic Hebetomy { get; set; }
+
+        [JsonProperty("islandry", Required = Required.AllowNull)]
+        public dynamic Islandry { get; set; }
+
+        [JsonProperty("lameduck", Required = Required.AllowNull)]
+        public dynamic Lameduck { get; set; }
+
+        [JsonProperty("overbattle", Required = Required.AllowNull)]
+        public dynamic Overbattle { get; set; }
+
+        [JsonProperty("overinterested", Required = Required.AllowNull)]
+        public dynamic Overinterested { get; set; }
+
+        [JsonProperty("phrenologic", Required = Required.AllowNull)]
+        public dynamic Phrenologic { get; set; }
+
+        [JsonProperty("rainband", Required = Required.AllowNull)]
+        public dynamic Rainband { get; set; }
+
+        [JsonProperty("shiningly", Required = Required.AllowNull)]
+        public dynamic Shiningly { get; set; }
+
+        [JsonProperty("stamineous", Required = Required.AllowNull)]
+        public dynamic Stamineous { get; set; }
+
+        [JsonProperty("subscapularis", Required = Required.AllowNull)]
+        public dynamic Subscapularis { get; set; }
+
+        [JsonProperty("Tahami", Required = Required.AllowNull)]
+        public dynamic Tahami { get; set; }
+
+        [JsonProperty("undaubed", Required = Required.AllowNull)]
+        public dynamic Undaubed { get; set; }
+
+        [JsonProperty("underntime", Required = Required.AllowNull)]
+        public dynamic Underntime { get; set; }
+    }
+
+    public partial record LaviniaClass
+    {
+        [JsonProperty("agitable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Agitable { get; set; }
+
+        [JsonProperty("asininity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Asininity { get; set; }
+
+        [JsonProperty("benefiter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Benefiter { get; set; }
+
+        [JsonProperty("bronzelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bronzelike { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cholesteatomatous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cholesteatomatous { get; set; }
+
+        [JsonProperty("deprivement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Deprivement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("flippantness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Flippantness { get; set; }
+
+        [JsonProperty("fogproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fogproof { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("merrymeeting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Merrymeeting { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("overcareful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overcareful { get; set; }
+
+        [JsonProperty("panaris", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Panaris { get; set; }
+
+        [JsonProperty("preacceptance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preacceptance { get; set; }
+
+        [JsonProperty("quinoxaline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quinoxaline { get; set; }
+
+        [JsonProperty("sig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sig { get; set; }
+
+        [JsonProperty("superconfusion", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Superconfusion { get; set; }
+
+        [JsonProperty("Tacana", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tacana { get; set; }
+
+        [JsonProperty("tillotter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tillotter { get; set; }
+
+        [JsonProperty("tranquillize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tranquillize { get; set; }
+
+        [JsonProperty("unquestionable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unquestionable { get; set; }
+
+        [JsonProperty("uproute", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Uproute { get; set; }
+    }
+
+    public partial record OskarClass
+    {
+        [JsonProperty("Acrobates", Required = Required.AllowNull)]
+        public dynamic Acrobates { get; set; }
+
+        [JsonProperty("beanshooter", Required = Required.AllowNull)]
+        public dynamic Beanshooter { get; set; }
+
+        [JsonProperty("bearhound", Required = Required.AllowNull)]
+        public dynamic Bearhound { get; set; }
+
+        [JsonProperty("Cayuga", Required = Required.AllowNull)]
+        public dynamic Cayuga { get; set; }
+
+        [JsonProperty("guarneri", Required = Required.AllowNull)]
+        public dynamic Guarneri { get; set; }
+
+        [JsonProperty("hypochondriacism", Required = Required.AllowNull)]
+        public dynamic Hypochondriacism { get; set; }
+
+        [JsonProperty("indication", Required = Required.AllowNull)]
+        public dynamic Indication { get; set; }
+
+        [JsonProperty("jaculative", Required = Required.AllowNull)]
+        public dynamic Jaculative { get; set; }
+
+        [JsonProperty("nagana", Required = Required.AllowNull)]
+        public dynamic Nagana { get; set; }
+
+        [JsonProperty("Netherlandish", Required = Required.AllowNull)]
+        public dynamic Netherlandish { get; set; }
+
+        [JsonProperty("noctivagous", Required = Required.AllowNull)]
+        public dynamic Noctivagous { get; set; }
+
+        [JsonProperty("nonphysiological", Required = Required.AllowNull)]
+        public dynamic Nonphysiological { get; set; }
+
+        [JsonProperty("praxis", Required = Required.AllowNull)]
+        public dynamic Praxis { get; set; }
+
+        [JsonProperty("provision", Required = Required.AllowNull)]
+        public dynamic Provision { get; set; }
+
+        [JsonProperty("subterhuman", Required = Required.AllowNull)]
+        public dynamic Subterhuman { get; set; }
+
+        [JsonProperty("sunlit", Required = Required.AllowNull)]
+        public dynamic Sunlit { get; set; }
+
+        [JsonProperty("syncraniate", Required = Required.AllowNull)]
+        public dynamic Syncraniate { get; set; }
+
+        [JsonProperty("teachment", Required = Required.AllowNull)]
+        public dynamic Teachment { get; set; }
+
+        [JsonProperty("unmutinous", Required = Required.AllowNull)]
+        public dynamic Unmutinous { get; set; }
+
+        [JsonProperty("unstoppable", Required = Required.AllowNull)]
+        public dynamic Unstoppable { get; set; }
+    }
+
+    public partial struct Abranchiata
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Abranchiata(long Integer) => new Abranchiata { Integer = Integer };
+        public static implicit operator Abranchiata(long[] IntegerArray) => new Abranchiata { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Integer == null;
+    }
+
+    public partial struct Academe
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Academe(long Integer) => new Academe { Integer = Integer };
+        public static implicit operator Academe(long[] IntegerArray) => new Academe { IntegerArray = IntegerArray };
+        public static implicit operator Academe(Dictionary<string, long> IntegerMap) => new Academe { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Acquirable
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public long?[]? UnionArray;
+
+        public static implicit operator Acquirable(Dictionary<string, long> IntegerMap) => new Acquirable { IntegerMap = IntegerMap };
+        public static implicit operator Acquirable(long?[] UnionArray) => new Acquirable { UnionArray = UnionArray };
+    }
+
+    public partial struct Aerometry
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Aerometry(bool Bool) => new Aerometry { Bool = Bool };
+        public static implicit operator Aerometry(double Double) => new Aerometry { Double = Double };
+    }
+
+    public partial struct Alexin
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+
+        public static implicit operator Alexin(bool Bool) => new Alexin { Bool = Bool };
+        public static implicit operator Alexin(long[] IntegerArray) => new Alexin { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AlleviateElement
+    {
+        public AlleviateClass? AlleviateClass;
+        public long?[]? UnionArray;
+
+        public static implicit operator AlleviateElement(AlleviateClass AlleviateClass) => new AlleviateElement { AlleviateClass = AlleviateClass };
+        public static implicit operator AlleviateElement(long?[] UnionArray) => new AlleviateElement { UnionArray = UnionArray };
+    }
+
+    public partial struct Amaa
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Amaa(bool Bool) => new Amaa { Bool = Bool };
+        public static implicit operator Amaa(long Integer) => new Amaa { Integer = Integer };
+        public static implicit operator Amaa(Rebecca Rebecca) => new Amaa { Rebecca = Rebecca };
+    }
+
+    public partial struct Ambassage
+    {
+        public dynamic[]? NullArray;
+        public string? String;
+
+        public static implicit operator Ambassage(dynamic[] NullArray) => new Ambassage { NullArray = NullArray };
+        public static implicit operator Ambassage(string String) => new Ambassage { String = String };
+    }
+
+    public partial struct AnkeeElement
+    {
+        public AnkeeClass? AnkeeClass;
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator AnkeeElement(AnkeeClass AnkeeClass) => new AnkeeElement { AnkeeClass = AnkeeClass };
+        public static implicit operator AnkeeElement(long Integer) => new AnkeeElement { Integer = Integer };
+        public static implicit operator AnkeeElement(long[] IntegerArray) => new AnkeeElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AnsarieElement
+    {
+        public AnsarieClass? AnsarieClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator AnsarieElement(AnsarieClass AnsarieClass) => new AnsarieElement { AnsarieClass = AnsarieClass };
+        public static implicit operator AnsarieElement(long[] IntegerArray) => new AnsarieElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && AnsarieClass == null;
+    }
+
+    public partial struct Aphasia
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Aphasia(long Integer) => new Aphasia { Integer = Integer };
+        public static implicit operator Aphasia(long[] IntegerArray) => new Aphasia { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Asprawl
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Asprawl(double Double) => new Asprawl { Double = Double };
+        public static implicit operator Asprawl(string String) => new Asprawl { String = String };
+    }
+
+    public partial struct Bedesman
+    {
+        public bool? Bool;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Bedesman(bool Bool) => new Bedesman { Bool = Bool };
+        public static implicit operator Bedesman(double Double) => new Bedesman { Double = Double };
+        public static implicit operator Bedesman(string String) => new Bedesman { String = String };
+    }
+
+    public partial struct Belard
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Belard(double Double) => new Belard { Double = Double };
+        public static implicit operator Belard(long[] IntegerArray) => new Belard { IntegerArray = IntegerArray };
+        public static implicit operator Belard(Rebecca Rebecca) => new Belard { Rebecca = Rebecca };
+    }
+
+    public partial struct Bocking
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Bocking(bool Bool) => new Bocking { Bool = Bool };
+        public static implicit operator Bocking(long[] IntegerArray) => new Bocking { IntegerArray = IntegerArray };
+        public static implicit operator Bocking(Dictionary<string, long> IntegerMap) => new Bocking { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Brawlingly
+    {
+        public dynamic[]? NullArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Brawlingly(dynamic[] NullArray) => new Brawlingly { NullArray = NullArray };
+        public static implicit operator Brawlingly(Dictionary<string, long?> UnionMap) => new Brawlingly { UnionMap = UnionMap };
+    }
+
+    public partial struct Brookie
+    {
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Brookie(long[] IntegerArray) => new Brookie { IntegerArray = IntegerArray };
+        public static implicit operator Brookie(Rebecca Rebecca) => new Brookie { Rebecca = Rebecca };
+    }
+
+    public partial struct Bumboatman
+    {
+        public dynamic[]? NullArray;
+        public string? String;
+
+        public static implicit operator Bumboatman(dynamic[] NullArray) => new Bumboatman { NullArray = NullArray };
+        public static implicit operator Bumboatman(string String) => new Bumboatman { String = String };
+        public bool IsNull => NullArray == null && String == null;
+    }
+
+    public partial struct Calaverite
+    {
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Calaverite(long[] IntegerArray) => new Calaverite { IntegerArray = IntegerArray };
+        public static implicit operator Calaverite(string String) => new Calaverite { String = String };
+    }
+
+    public partial struct Catallactic
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Catallactic(bool Bool) => new Catallactic { Bool = Bool };
+        public static implicit operator Catallactic(Dictionary<string, long> IntegerMap) => new Catallactic { IntegerMap = IntegerMap };
+        public static implicit operator Catallactic(dynamic[] NullArray) => new Catallactic { NullArray = NullArray };
+    }
+
+    public partial struct Cemental
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Cemental(double Double) => new Cemental { Double = Double };
+        public static implicit operator Cemental(long[] IntegerArray) => new Cemental { IntegerArray = IntegerArray };
+        public static implicit operator Cemental(Dictionary<string, long> IntegerMap) => new Cemental { IntegerMap = IntegerMap };
+    }
+
+    public partial struct ChytridiaceaeElement
+    {
+        public bool? Bool;
+        public ChytridiaceaeClass? ChytridiaceaeClass;
+
+        public static implicit operator ChytridiaceaeElement(bool Bool) => new ChytridiaceaeElement { Bool = Bool };
+        public static implicit operator ChytridiaceaeElement(ChytridiaceaeClass ChytridiaceaeClass) => new ChytridiaceaeElement { ChytridiaceaeClass = ChytridiaceaeClass };
+        public bool IsNull => Bool == null && ChytridiaceaeClass == null;
+    }
+
+    public partial struct DiscordiaElement
+    {
+        public DiscordiaClass? DiscordiaClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator DiscordiaElement(DiscordiaClass DiscordiaClass) => new DiscordiaElement { DiscordiaClass = DiscordiaClass };
+        public static implicit operator DiscordiaElement(long[] IntegerArray) => new DiscordiaElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Endomyce
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Endomyce(long Integer) => new Endomyce { Integer = Integer };
+        public static implicit operator Endomyce(string String) => new Endomyce { String = String };
+    }
+
+    public partial struct Epinephelidae
+    {
+        public bool? Bool;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Epinephelidae(bool Bool) => new Epinephelidae { Bool = Bool };
+        public static implicit operator Epinephelidae(long Integer) => new Epinephelidae { Integer = Integer };
+        public static implicit operator Epinephelidae(string String) => new Epinephelidae { String = String };
+    }
+
+    public partial struct Eupatorium
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Eupatorium(Dictionary<string, long> IntegerMap) => new Eupatorium { IntegerMap = IntegerMap };
+        public static implicit operator Eupatorium(dynamic[] NullArray) => new Eupatorium { NullArray = NullArray };
+    }
+
+    public partial struct GryphosaurusElement
+    {
+        public GryphosaurusClass? GryphosaurusClass;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator GryphosaurusElement(GryphosaurusClass GryphosaurusClass) => new GryphosaurusElement { GryphosaurusClass = GryphosaurusClass };
+        public static implicit operator GryphosaurusElement(long[] IntegerArray) => new GryphosaurusElement { IntegerArray = IntegerArray };
+        public static implicit operator GryphosaurusElement(string String) => new GryphosaurusElement { String = String };
+    }
+
+    public partial struct Koryak
+    {
+        public string? String;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Koryak(string String) => new Koryak { String = String };
+        public static implicit operator Koryak(Dictionary<string, long?> UnionMap) => new Koryak { UnionMap = UnionMap };
+    }
+
+    public partial struct LaviniaElement
+    {
+        public LaviniaClass? LaviniaClass;
+        public string? String;
+
+        public static implicit operator LaviniaElement(LaviniaClass LaviniaClass) => new LaviniaElement { LaviniaClass = LaviniaClass };
+        public static implicit operator LaviniaElement(string String) => new LaviniaElement { String = String };
+    }
+
+    public partial struct OskarElement
+    {
+        public long[]? IntegerArray;
+        public OskarClass? OskarClass;
+
+        public static implicit operator OskarElement(long[] IntegerArray) => new OskarElement { IntegerArray = IntegerArray };
+        public static implicit operator OskarElement(OskarClass OskarClass) => new OskarElement { OskarClass = OskarClass };
+    }
+
+    public partial struct RebeccaElement
+    {
+        public long? Integer;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator RebeccaElement(long Integer) => new RebeccaElement { Integer = Integer };
+        public static implicit operator RebeccaElement(Rebecca Rebecca) => new RebeccaElement { Rebecca = Rebecca };
+        public static implicit operator RebeccaElement(string String) => new RebeccaElement { String = String };
+    }
+
+    public partial struct Rhomboganoidei
+    {
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Rhomboganoidei(long[] IntegerArray) => new Rhomboganoidei { IntegerArray = IntegerArray };
+        public static implicit operator Rhomboganoidei(Rebecca Rebecca) => new Rhomboganoidei { Rebecca = Rebecca };
+        public static implicit operator Rhomboganoidei(string String) => new Rhomboganoidei { String = String };
+    }
+
+    public partial struct Ruellia
+    {
+        public bool? Bool;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Ruellia(bool Bool) => new Ruellia { Bool = Bool };
+        public static implicit operator Ruellia(Rebecca Rebecca) => new Ruellia { Rebecca = Rebecca };
+        public static implicit operator Ruellia(string String) => new Ruellia { String = String };
+    }
+
+    public partial struct School
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator School(long Integer) => new School { Integer = Integer };
+        public static implicit operator School(Dictionary<string, long> IntegerMap) => new School { IntegerMap = IntegerMap };
+        public bool IsNull => Integer == null && IntegerMap == null;
+    }
+
+    public partial struct Shakespearolater
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Shakespearolater(double Double) => new Shakespearolater { Double = Double };
+        public static implicit operator Shakespearolater(long[] IntegerArray) => new Shakespearolater { IntegerArray = IntegerArray };
+        public static implicit operator Shakespearolater(string String) => new Shakespearolater { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                AbranchiataConverter.Singleton,
+                AnsarieElementConverter.Singleton,
+                ChytridiaceaeElementConverter.Singleton,
+                DiscordiaElementConverter.Singleton,
+                EndomyceConverter.Singleton,
+                EpinephelidaeConverter.Singleton,
+                EupatoriumConverter.Singleton,
+                GryphosaurusElementConverter.Singleton,
+                KoryakConverter.Singleton,
+                LaviniaElementConverter.Singleton,
+                OskarElementConverter.Singleton,
+                RebeccaElementConverter.Singleton,
+                RhomboganoideiConverter.Singleton,
+                RuelliaConverter.Singleton,
+                SchoolConverter.Singleton,
+                ShakespearolaterConverter.Singleton,
+                AcademeConverter.Singleton,
+                AcquirableConverter.Singleton,
+                AerometryConverter.Singleton,
+                AlexinConverter.Singleton,
+                AlleviateElementConverter.Singleton,
+                AmaaConverter.Singleton,
+                AmbassageConverter.Singleton,
+                AnkeeElementConverter.Singleton,
+                AphasiaConverter.Singleton,
+                AsprawlConverter.Singleton,
+                BedesmanConverter.Singleton,
+                BelardConverter.Singleton,
+                BockingConverter.Singleton,
+                BrawlinglyConverter.Singleton,
+                BrookieConverter.Singleton,
+                BumboatmanConverter.Singleton,
+                CalaveriteConverter.Singleton,
+                CatallacticConverter.Singleton,
+                CementalConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class AbranchiataConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Abranchiata) || t == typeof(Abranchiata?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Abranchiata { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Abranchiata { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Abranchiata { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Abranchiata");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Abranchiata)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Abranchiata");
+        }
+
+        public static readonly AbranchiataConverter Singleton = new AbranchiataConverter();
+    }
+
+    internal class AnsarieElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnsarieElement) || t == typeof(AnsarieElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new AnsarieElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnsarieClass>(reader);
+                    return new AnsarieElement { AnsarieClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnsarieElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnsarieElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnsarieElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnsarieClass != null)
+            {
+                serializer.Serialize(writer, value.AnsarieClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnsarieElement");
+        }
+
+        public static readonly AnsarieElementConverter Singleton = new AnsarieElementConverter();
+    }
+
+    internal class ChytridiaceaeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChytridiaceaeElement) || t == typeof(ChytridiaceaeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new ChytridiaceaeElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new ChytridiaceaeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChytridiaceaeClass>(reader);
+                    return new ChytridiaceaeElement { ChytridiaceaeClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChytridiaceaeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChytridiaceaeElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.ChytridiaceaeClass != null)
+            {
+                serializer.Serialize(writer, value.ChytridiaceaeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChytridiaceaeElement");
+        }
+
+        public static readonly ChytridiaceaeElementConverter Singleton = new ChytridiaceaeElementConverter();
+    }
+
+    internal class DiscordiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiscordiaElement) || t == typeof(DiscordiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiscordiaClass>(reader);
+                    return new DiscordiaElement { DiscordiaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiscordiaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiscordiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiscordiaElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiscordiaClass != null)
+            {
+                serializer.Serialize(writer, value.DiscordiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiscordiaElement");
+        }
+
+        public static readonly DiscordiaElementConverter Singleton = new DiscordiaElementConverter();
+    }
+
+    internal class EndomyceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Endomyce) || t == typeof(Endomyce?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Endomyce { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Endomyce { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Endomyce");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Endomyce)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Endomyce");
+        }
+
+        public static readonly EndomyceConverter Singleton = new EndomyceConverter();
+    }
+
+    internal class EpinephelidaeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epinephelidae) || t == typeof(Epinephelidae?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Epinephelidae { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Epinephelidae { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Epinephelidae { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Epinephelidae");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epinephelidae)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epinephelidae");
+        }
+
+        public static readonly EpinephelidaeConverter Singleton = new EpinephelidaeConverter();
+    }
+
+    internal class EupatoriumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eupatorium) || t == typeof(Eupatorium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eupatorium { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Eupatorium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Eupatorium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eupatorium)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eupatorium");
+        }
+
+        public static readonly EupatoriumConverter Singleton = new EupatoriumConverter();
+    }
+
+    internal class GryphosaurusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GryphosaurusElement) || t == typeof(GryphosaurusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new GryphosaurusElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<GryphosaurusClass>(reader);
+                    return new GryphosaurusElement { GryphosaurusClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new GryphosaurusElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type GryphosaurusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (GryphosaurusElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.GryphosaurusClass != null)
+            {
+                serializer.Serialize(writer, value.GryphosaurusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type GryphosaurusElement");
+        }
+
+        public static readonly GryphosaurusElementConverter Singleton = new GryphosaurusElementConverter();
+    }
+
+    internal class KoryakConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Koryak) || t == typeof(Koryak?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Koryak { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Koryak { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Koryak");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Koryak)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Koryak");
+        }
+
+        public static readonly KoryakConverter Singleton = new KoryakConverter();
+    }
+
+    internal class LaviniaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LaviniaElement) || t == typeof(LaviniaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LaviniaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LaviniaClass>(reader);
+                    return new LaviniaElement { LaviniaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LaviniaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LaviniaElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LaviniaClass != null)
+            {
+                serializer.Serialize(writer, value.LaviniaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LaviniaElement");
+        }
+
+        public static readonly LaviniaElementConverter Singleton = new LaviniaElementConverter();
+    }
+
+    internal class OskarElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OskarElement) || t == typeof(OskarElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OskarClass>(reader);
+                    return new OskarElement { OskarClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new OskarElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OskarElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OskarElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.OskarClass != null)
+            {
+                serializer.Serialize(writer, value.OskarClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OskarElement");
+        }
+
+        public static readonly OskarElementConverter Singleton = new OskarElementConverter();
+    }
+
+    internal class RebeccaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RebeccaElement) || t == typeof(RebeccaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new RebeccaElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new RebeccaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new RebeccaElement { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type RebeccaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RebeccaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type RebeccaElement");
+        }
+
+        public static readonly RebeccaElementConverter Singleton = new RebeccaElementConverter();
+    }
+
+    internal class RhomboganoideiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rhomboganoidei) || t == typeof(Rhomboganoidei?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Rhomboganoidei { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Rhomboganoidei { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rhomboganoidei { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rhomboganoidei");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rhomboganoidei)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rhomboganoidei");
+        }
+
+        public static readonly RhomboganoideiConverter Singleton = new RhomboganoideiConverter();
+    }
+
+    internal class RuelliaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ruellia) || t == typeof(Ruellia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Ruellia { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ruellia { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Ruellia { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Ruellia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ruellia)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ruellia");
+        }
+
+        public static readonly RuelliaConverter Singleton = new RuelliaConverter();
+    }
+
+    internal class SchoolConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(School) || t == typeof(School?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new School { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new School { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new School { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type School");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (School)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type School");
+        }
+
+        public static readonly SchoolConverter Singleton = new SchoolConverter();
+    }
+
+    internal class ShakespearolaterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shakespearolater) || t == typeof(Shakespearolater?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Shakespearolater { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Shakespearolater { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Shakespearolater { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shakespearolater");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shakespearolater)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shakespearolater");
+        }
+
+        public static readonly ShakespearolaterConverter Singleton = new ShakespearolaterConverter();
+    }
+
+    internal class AcademeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Academe) || t == typeof(Academe?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Academe { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Academe { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Academe { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Academe");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Academe)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Academe");
+        }
+
+        public static readonly AcademeConverter Singleton = new AcademeConverter();
+    }
+
+    internal class AcquirableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Acquirable) || t == typeof(Acquirable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Acquirable { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Acquirable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Acquirable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Acquirable)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Acquirable");
+        }
+
+        public static readonly AcquirableConverter Singleton = new AcquirableConverter();
+    }
+
+    internal class AerometryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aerometry) || t == typeof(Aerometry?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Aerometry { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Aerometry { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Aerometry");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aerometry)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aerometry");
+        }
+
+        public static readonly AerometryConverter Singleton = new AerometryConverter();
+    }
+
+    internal class AlexinConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Alexin) || t == typeof(Alexin?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Alexin { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Alexin { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Alexin");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Alexin)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Alexin");
+        }
+
+        public static readonly AlexinConverter Singleton = new AlexinConverter();
+    }
+
+    internal class AlleviateElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AlleviateElement) || t == typeof(AlleviateElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AlleviateClass>(reader);
+                    return new AlleviateElement { AlleviateClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new AlleviateElement { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AlleviateElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AlleviateElement)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.AlleviateClass != null)
+            {
+                serializer.Serialize(writer, value.AlleviateClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AlleviateElement");
+        }
+
+        public static readonly AlleviateElementConverter Singleton = new AlleviateElementConverter();
+    }
+
+    internal class AmaaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Amaa) || t == typeof(Amaa?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Amaa { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Amaa { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Amaa { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Amaa");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Amaa)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Amaa");
+        }
+
+        public static readonly AmaaConverter Singleton = new AmaaConverter();
+    }
+
+    internal class AmbassageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ambassage) || t == typeof(Ambassage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ambassage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Ambassage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Ambassage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ambassage)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ambassage");
+        }
+
+        public static readonly AmbassageConverter Singleton = new AmbassageConverter();
+    }
+
+    internal class AnkeeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnkeeElement) || t == typeof(AnkeeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new AnkeeElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnkeeClass>(reader);
+                    return new AnkeeElement { AnkeeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnkeeElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnkeeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnkeeElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnkeeClass != null)
+            {
+                serializer.Serialize(writer, value.AnkeeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnkeeElement");
+        }
+
+        public static readonly AnkeeElementConverter Singleton = new AnkeeElementConverter();
+    }
+
+    internal class AphasiaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aphasia) || t == typeof(Aphasia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Aphasia { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Aphasia { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Aphasia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aphasia)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aphasia");
+        }
+
+        public static readonly AphasiaConverter Singleton = new AphasiaConverter();
+    }
+
+    internal class AsprawlConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Asprawl) || t == typeof(Asprawl?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Asprawl { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Asprawl { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Asprawl");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Asprawl)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Asprawl");
+        }
+
+        public static readonly AsprawlConverter Singleton = new AsprawlConverter();
+    }
+
+    internal class BedesmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bedesman) || t == typeof(Bedesman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Bedesman { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bedesman { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bedesman { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Bedesman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bedesman)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bedesman");
+        }
+
+        public static readonly BedesmanConverter Singleton = new BedesmanConverter();
+    }
+
+    internal class BelardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Belard) || t == typeof(Belard?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Belard { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Belard { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Belard { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Belard");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Belard)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Belard");
+        }
+
+        public static readonly BelardConverter Singleton = new BelardConverter();
+    }
+
+    internal class BockingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bocking) || t == typeof(Bocking?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bocking { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Bocking { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Bocking { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bocking");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bocking)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bocking");
+        }
+
+        public static readonly BockingConverter Singleton = new BockingConverter();
+    }
+
+    internal class BrawlinglyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brawlingly) || t == typeof(Brawlingly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Brawlingly { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Brawlingly { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brawlingly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brawlingly)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brawlingly");
+        }
+
+        public static readonly BrawlinglyConverter Singleton = new BrawlinglyConverter();
+    }
+
+    internal class BrookieConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brookie) || t == typeof(Brookie?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Brookie { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Brookie { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brookie");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brookie)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brookie");
+        }
+
+        public static readonly BrookieConverter Singleton = new BrookieConverter();
+    }
+
+    internal class BumboatmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bumboatman) || t == typeof(Bumboatman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Bumboatman { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bumboatman { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Bumboatman { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bumboatman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bumboatman)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bumboatman");
+        }
+
+        public static readonly BumboatmanConverter Singleton = new BumboatmanConverter();
+    }
+
+    internal class CalaveriteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Calaverite) || t == typeof(Calaverite?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Calaverite { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Calaverite { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Calaverite");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Calaverite)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Calaverite");
+        }
+
+        public static readonly CalaveriteConverter Singleton = new CalaveriteConverter();
+    }
+
+    internal class CatallacticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Catallactic) || t == typeof(Catallactic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Catallactic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Catallactic { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Catallactic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Catallactic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Catallactic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Catallactic");
+        }
+
+        public static readonly CatallacticConverter Singleton = new CatallacticConverter();
+    }
+
+    internal class CementalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Cemental) || t == typeof(Cemental?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Cemental { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Cemental { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Cemental { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Cemental");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Cemental)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Cemental");
+        }
+
+        public static readonly CementalConverter Singleton = new CementalConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations2.json/array-type-list--e30a0413f432/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations2.json/array-type-list--e30a0413f432/QuickType.cs
new file mode 100644
index 0000000..8ff522a
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations2.json/array-type-list--e30a0413f432/QuickType.cs
@@ -0,0 +1,2668 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("Abranchiata", Required = Required.Always)]
+        public List<Abranchiata> Abranchiata { get; set; }
+
+        [JsonProperty("academe", Required = Required.Always)]
+        public List<Academe> Academe { get; set; }
+
+        [JsonProperty("acquirable", Required = Required.Always)]
+        public List<Acquirable> Acquirable { get; set; }
+
+        [JsonProperty("aerometry", Required = Required.Always)]
+        public List<Aerometry> Aerometry { get; set; }
+
+        [JsonProperty("alexin", Required = Required.Always)]
+        public List<Alexin> Alexin { get; set; }
+
+        [JsonProperty("alleviate", Required = Required.Always)]
+        public List<AlleviateElement> Alleviate { get; set; }
+
+        [JsonProperty("amaas", Required = Required.Always)]
+        public List<Amaa> Amaas { get; set; }
+
+        [JsonProperty("ambassage", Required = Required.Always)]
+        public List<Ambassage> Ambassage { get; set; }
+
+        [JsonProperty("amphithyron", Required = Required.Always)]
+        public List<Amphithyron?> Amphithyron { get; set; }
+
+        [JsonProperty("Andriana", Required = Required.Always)]
+        public List<string?> Andriana { get; set; }
+
+        [JsonProperty("ankee", Required = Required.Always)]
+        public List<AnkeeElement> Ankee { get; set; }
+
+        [JsonProperty("annihilator", Required = Required.Always)]
+        public List<Dictionary<string, long?>?> Annihilator { get; set; }
+
+        [JsonProperty("annulose", Required = Required.AllowNull)]
+        public object Annulose { get; set; }
+
+        [JsonProperty("Ansarie", Required = Required.Always)]
+        public List<AnsarieElement> Ansarie { get; set; }
+
+        [JsonProperty("aphasia", Required = Required.Always)]
+        public List<Aphasia> Aphasia { get; set; }
+
+        [JsonProperty("asprawl", Required = Required.Always)]
+        public List<Asprawl> Asprawl { get; set; }
+
+        [JsonProperty("attractive", Required = Required.Always)]
+        public List<bool?> Attractive { get; set; }
+
+        [JsonProperty("barksome", Required = Required.Always)]
+        public Dictionary<string, long> Barksome { get; set; }
+
+        [JsonProperty("bedesman", Required = Required.Always)]
+        public List<Bedesman> Bedesman { get; set; }
+
+        [JsonProperty("belard", Required = Required.Always)]
+        public List<Belard> Belard { get; set; }
+
+        [JsonProperty("bocking", Required = Required.Always)]
+        public List<Bocking> Bocking { get; set; }
+
+        [JsonProperty("brawlingly", Required = Required.Always)]
+        public List<Brawlingly> Brawlingly { get; set; }
+
+        [JsonProperty("brookie", Required = Required.Always)]
+        public List<Brookie> Brookie { get; set; }
+
+        [JsonProperty("bumboatman", Required = Required.Always)]
+        public List<Bumboatman> Bumboatman { get; set; }
+
+        [JsonProperty("bystreet", Required = Required.Always)]
+        public List<object> Bystreet { get; set; }
+
+        [JsonProperty("calaverite", Required = Required.Always)]
+        public List<Calaverite> Calaverite { get; set; }
+
+        [JsonProperty("catallactic", Required = Required.Always)]
+        public List<Catallactic> Catallactic { get; set; }
+
+        [JsonProperty("cemental", Required = Required.Always)]
+        public List<Cemental> Cemental { get; set; }
+
+        [JsonProperty("Chytridiaceae", Required = Required.Always)]
+        public List<ChytridiaceaeElement> Chytridiaceae { get; set; }
+
+        [JsonProperty("Discordia", Required = Required.Always)]
+        public List<DiscordiaElement> Discordia { get; set; }
+
+        [JsonProperty("Endomyces", Required = Required.Always)]
+        public List<Endomyce> Endomyces { get; set; }
+
+        [JsonProperty("Epinephelidae", Required = Required.Always)]
+        public List<Epinephelidae> Epinephelidae { get; set; }
+
+        [JsonProperty("Eupatorium", Required = Required.Always)]
+        public List<Eupatorium> Eupatorium { get; set; }
+
+        [JsonProperty("Gryphosaurus", Required = Required.Always)]
+        public List<GryphosaurusElement> Gryphosaurus { get; set; }
+
+        [JsonProperty("Koryak", Required = Required.Always)]
+        public List<Koryak> Koryak { get; set; }
+
+        [JsonProperty("Lavinia", Required = Required.Always)]
+        public List<LaviniaElement> Lavinia { get; set; }
+
+        [JsonProperty("Oskar", Required = Required.Always)]
+        public List<OskarElement> Oskar { get; set; }
+
+        [JsonProperty("Rebecca", Required = Required.Always)]
+        public List<RebeccaElement> Rebecca { get; set; }
+
+        [JsonProperty("Rhomboganoidei", Required = Required.Always)]
+        public List<Rhomboganoidei> Rhomboganoidei { get; set; }
+
+        [JsonProperty("Rigsmal", Required = Required.Always)]
+        public bool Rigsmal { get; set; }
+
+        [JsonProperty("Ruellia", Required = Required.Always)]
+        public List<Ruellia> Ruellia { get; set; }
+
+        [JsonProperty("School", Required = Required.Always)]
+        public List<School> School { get; set; }
+
+        [JsonProperty("Shakespearolater", Required = Required.Always)]
+        public List<Shakespearolater> Shakespearolater { get; set; }
+
+        [JsonProperty("Svan", Required = Required.Always)]
+        public List<double> Svan { get; set; }
+
+        [JsonProperty("Wayao", Required = Required.Always)]
+        public Dictionary<string, double> Wayao { get; set; }
+    }
+
+    public partial record AlleviateClass
+    {
+        [JsonProperty("apriori", Required = Required.AllowNull)]
+        public object Apriori { get; set; }
+
+        [JsonProperty("beggarer", Required = Required.AllowNull)]
+        public object Beggarer { get; set; }
+
+        [JsonProperty("brokenheartedly", Required = Required.AllowNull)]
+        public object Brokenheartedly { get; set; }
+
+        [JsonProperty("debilitation", Required = Required.AllowNull)]
+        public object Debilitation { get; set; }
+
+        [JsonProperty("frike", Required = Required.AllowNull)]
+        public object Frike { get; set; }
+
+        [JsonProperty("gastrolith", Required = Required.AllowNull)]
+        public object Gastrolith { get; set; }
+
+        [JsonProperty("Hulsean", Required = Required.AllowNull)]
+        public object Hulsean { get; set; }
+
+        [JsonProperty("orthocentric", Required = Required.AllowNull)]
+        public object Orthocentric { get; set; }
+
+        [JsonProperty("petaly", Required = Required.AllowNull)]
+        public object Petaly { get; set; }
+
+        [JsonProperty("probudgeting", Required = Required.AllowNull)]
+        public object Probudgeting { get; set; }
+
+        [JsonProperty("reacquire", Required = Required.AllowNull)]
+        public object Reacquire { get; set; }
+
+        [JsonProperty("scow", Required = Required.AllowNull)]
+        public object Scow { get; set; }
+
+        [JsonProperty("shutoff", Required = Required.AllowNull)]
+        public object Shutoff { get; set; }
+
+        [JsonProperty("subcontiguous", Required = Required.AllowNull)]
+        public object Subcontiguous { get; set; }
+
+        [JsonProperty("suffumigate", Required = Required.AllowNull)]
+        public object Suffumigate { get; set; }
+
+        [JsonProperty("transformable", Required = Required.AllowNull)]
+        public object Transformable { get; set; }
+
+        [JsonProperty("uncoroneted", Required = Required.AllowNull)]
+        public object Uncoroneted { get; set; }
+
+        [JsonProperty("unparking", Required = Required.AllowNull)]
+        public object Unparking { get; set; }
+
+        [JsonProperty("unvarnishedness", Required = Required.AllowNull)]
+        public object Unvarnishedness { get; set; }
+
+        [JsonProperty("wherewithal", Required = Required.AllowNull)]
+        public object Wherewithal { get; set; }
+    }
+
+    public partial record Rebecca
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Amphithyron
+    {
+        [JsonProperty("akroasis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Akroasis { get; set; }
+
+        [JsonProperty("antiphonical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Antiphonical { get; set; }
+
+        [JsonProperty("basebred", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Basebred { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("conductometric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conductometric { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ensilation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ensilation { get; set; }
+
+        [JsonProperty("eyebolt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Eyebolt { get; set; }
+
+        [JsonProperty("fistulated", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fistulated { get; set; }
+
+        [JsonProperty("heteropod", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Heteropod { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Juniperus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Juniperus { get; set; }
+
+        [JsonProperty("labyrinthically", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Labyrinthically { get; set; }
+
+        [JsonProperty("martyrization", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Martyrization { get; set; }
+
+        [JsonProperty("mispolicy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mispolicy { get; set; }
+
+        [JsonProperty("multipara", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Multipara { get; set; }
+
+        [JsonProperty("Nazirite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nazirite { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("possessorial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Possessorial { get; set; }
+
+        [JsonProperty("shamed", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shamed { get; set; }
+
+        [JsonProperty("shelfworn", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shelfworn { get; set; }
+
+        [JsonProperty("stagnum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stagnum { get; set; }
+
+        [JsonProperty("Those", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Those { get; set; }
+
+        [JsonProperty("undecimal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undecimal { get; set; }
+    }
+
+    public partial record AnkeeClass
+    {
+        [JsonProperty("Anomoean", Required = Required.AllowNull)]
+        public object Anomoean { get; set; }
+
+        [JsonProperty("barleyhood", Required = Required.AllowNull)]
+        public object Barleyhood { get; set; }
+
+        [JsonProperty("befriender", Required = Required.AllowNull)]
+        public object Befriender { get; set; }
+
+        [JsonProperty("brutishness", Required = Required.AllowNull)]
+        public object Brutishness { get; set; }
+
+        [JsonProperty("cephalalgy", Required = Required.AllowNull)]
+        public object Cephalalgy { get; set; }
+
+        [JsonProperty("cirurgian", Required = Required.AllowNull)]
+        public object Cirurgian { get; set; }
+
+        [JsonProperty("conventionally", Required = Required.AllowNull)]
+        public object Conventionally { get; set; }
+
+        [JsonProperty("jackshay", Required = Required.AllowNull)]
+        public object Jackshay { get; set; }
+
+        [JsonProperty("milammeter", Required = Required.AllowNull)]
+        public object Milammeter { get; set; }
+
+        [JsonProperty("Naja", Required = Required.AllowNull)]
+        public object Naja { get; set; }
+
+        [JsonProperty("ombrological", Required = Required.AllowNull)]
+        public object Ombrological { get; set; }
+
+        [JsonProperty("phonasthenia", Required = Required.AllowNull)]
+        public object Phonasthenia { get; set; }
+
+        [JsonProperty("retrievableness", Required = Required.AllowNull)]
+        public object Retrievableness { get; set; }
+
+        [JsonProperty("snakily", Required = Required.AllowNull)]
+        public object Snakily { get; set; }
+
+        [JsonProperty("swot", Required = Required.AllowNull)]
+        public object Swot { get; set; }
+
+        [JsonProperty("tartlet", Required = Required.AllowNull)]
+        public object Tartlet { get; set; }
+
+        [JsonProperty("thiofuran", Required = Required.AllowNull)]
+        public object Thiofuran { get; set; }
+
+        [JsonProperty("tracheophone", Required = Required.AllowNull)]
+        public object Tracheophone { get; set; }
+
+        [JsonProperty("tuglike", Required = Required.AllowNull)]
+        public object Tuglike { get; set; }
+
+        [JsonProperty("unscratchingly", Required = Required.AllowNull)]
+        public object Unscratchingly { get; set; }
+    }
+
+    public partial record AnsarieClass
+    {
+        [JsonProperty("accension", Required = Required.AllowNull)]
+        public object Accension { get; set; }
+
+        [JsonProperty("Alida", Required = Required.AllowNull)]
+        public object Alida { get; set; }
+
+        [JsonProperty("asteria", Required = Required.AllowNull)]
+        public object Asteria { get; set; }
+
+        [JsonProperty("beriberic", Required = Required.AllowNull)]
+        public object Beriberic { get; set; }
+
+        [JsonProperty("edgebone", Required = Required.AllowNull)]
+        public object Edgebone { get; set; }
+
+        [JsonProperty("gastrodialysis", Required = Required.AllowNull)]
+        public object Gastrodialysis { get; set; }
+
+        [JsonProperty("geographic", Required = Required.AllowNull)]
+        public object Geographic { get; set; }
+
+        [JsonProperty("Ictonyx", Required = Required.AllowNull)]
+        public object Ictonyx { get; set; }
+
+        [JsonProperty("metrocele", Required = Required.AllowNull)]
+        public object Metrocele { get; set; }
+
+        [JsonProperty("misgraft", Required = Required.AllowNull)]
+        public object Misgraft { get; set; }
+
+        [JsonProperty("monteith", Required = Required.AllowNull)]
+        public object Monteith { get; set; }
+
+        [JsonProperty("notcher", Required = Required.AllowNull)]
+        public object Notcher { get; set; }
+
+        [JsonProperty("prorestriction", Required = Required.AllowNull)]
+        public object Prorestriction { get; set; }
+
+        [JsonProperty("Ramist", Required = Required.AllowNull)]
+        public object Ramist { get; set; }
+
+        [JsonProperty("throatlet", Required = Required.AllowNull)]
+        public object Throatlet { get; set; }
+
+        [JsonProperty("unfair", Required = Required.AllowNull)]
+        public object Unfair { get; set; }
+
+        [JsonProperty("unsynonymous", Required = Required.AllowNull)]
+        public object Unsynonymous { get; set; }
+
+        [JsonProperty("water", Required = Required.AllowNull)]
+        public object Water { get; set; }
+
+        [JsonProperty("zestfully", Required = Required.AllowNull)]
+        public object Zestfully { get; set; }
+
+        [JsonProperty("zincic", Required = Required.AllowNull)]
+        public object Zincic { get; set; }
+    }
+
+    public partial record ChytridiaceaeClass
+    {
+        [JsonProperty("Batidaceae", Required = Required.AllowNull)]
+        public object Batidaceae { get; set; }
+
+        [JsonProperty("Brechites", Required = Required.AllowNull)]
+        public object Brechites { get; set; }
+
+        [JsonProperty("codespairer", Required = Required.AllowNull)]
+        public object Codespairer { get; set; }
+
+        [JsonProperty("Emery", Required = Required.AllowNull)]
+        public object Emery { get; set; }
+
+        [JsonProperty("enervative", Required = Required.AllowNull)]
+        public object Enervative { get; set; }
+
+        [JsonProperty("excriminate", Required = Required.AllowNull)]
+        public object Excriminate { get; set; }
+
+        [JsonProperty("goshenite", Required = Required.AllowNull)]
+        public object Goshenite { get; set; }
+
+        [JsonProperty("grime", Required = Required.AllowNull)]
+        public object Grime { get; set; }
+
+        [JsonProperty("gritten", Required = Required.AllowNull)]
+        public object Gritten { get; set; }
+
+        [JsonProperty("hectorly", Required = Required.AllowNull)]
+        public object Hectorly { get; set; }
+
+        [JsonProperty("intermediation", Required = Required.AllowNull)]
+        public object Intermediation { get; set; }
+
+        [JsonProperty("meeterly", Required = Required.AllowNull)]
+        public object Meeterly { get; set; }
+
+        [JsonProperty("Narraganset", Required = Required.AllowNull)]
+        public object Narraganset { get; set; }
+
+        [JsonProperty("onymatic", Required = Required.AllowNull)]
+        public object Onymatic { get; set; }
+
+        [JsonProperty("paddlecock", Required = Required.AllowNull)]
+        public object Paddlecock { get; set; }
+
+        [JsonProperty("thana", Required = Required.AllowNull)]
+        public object Thana { get; set; }
+
+        [JsonProperty("thornily", Required = Required.AllowNull)]
+        public object Thornily { get; set; }
+
+        [JsonProperty("uckia", Required = Required.AllowNull)]
+        public object Uckia { get; set; }
+
+        [JsonProperty("unmettle", Required = Required.AllowNull)]
+        public object Unmettle { get; set; }
+
+        [JsonProperty("vorticellid", Required = Required.AllowNull)]
+        public object Vorticellid { get; set; }
+    }
+
+    public partial record DiscordiaClass
+    {
+        [JsonProperty("Altaic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Altaic { get; set; }
+
+        [JsonProperty("amoristic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amoristic { get; set; }
+
+        [JsonProperty("blennophthalmia", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Blennophthalmia { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disciplinability", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Disciplinability { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("goofer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goofer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("laryngograph", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Laryngograph { get; set; }
+
+        [JsonProperty("leucitis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Leucitis { get; set; }
+
+        [JsonProperty("lymphocyst", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lymphocyst { get; set; }
+
+        [JsonProperty("microcosmology", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Microcosmology { get; set; }
+
+        [JsonProperty("nauseation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nauseation { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("Patarin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Patarin { get; set; }
+
+        [JsonProperty("preliberal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preliberal { get; set; }
+
+        [JsonProperty("prettifier", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Prettifier { get; set; }
+
+        [JsonProperty("rangework", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rangework { get; set; }
+
+        [JsonProperty("redient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Redient { get; set; }
+
+        [JsonProperty("subfusiform", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subfusiform { get; set; }
+
+        [JsonProperty("suicidical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Suicidical { get; set; }
+
+        [JsonProperty("swow", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Swow { get; set; }
+
+        [JsonProperty("wastrel", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wastrel { get; set; }
+
+        [JsonProperty("wingle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wingle { get; set; }
+    }
+
+    public partial record GryphosaurusClass
+    {
+        [JsonProperty("amissibility", Required = Required.AllowNull)]
+        public object Amissibility { get; set; }
+
+        [JsonProperty("Burushaski", Required = Required.AllowNull)]
+        public object Burushaski { get; set; }
+
+        [JsonProperty("citronin", Required = Required.AllowNull)]
+        public object Citronin { get; set; }
+
+        [JsonProperty("coplaintiff", Required = Required.AllowNull)]
+        public object Coplaintiff { get; set; }
+
+        [JsonProperty("disquisitionary", Required = Required.AllowNull)]
+        public object Disquisitionary { get; set; }
+
+        [JsonProperty("enoplan", Required = Required.AllowNull)]
+        public object Enoplan { get; set; }
+
+        [JsonProperty("faintness", Required = Required.AllowNull)]
+        public object Faintness { get; set; }
+
+        [JsonProperty("hebetomy", Required = Required.AllowNull)]
+        public object Hebetomy { get; set; }
+
+        [JsonProperty("islandry", Required = Required.AllowNull)]
+        public object Islandry { get; set; }
+
+        [JsonProperty("lameduck", Required = Required.AllowNull)]
+        public object Lameduck { get; set; }
+
+        [JsonProperty("overbattle", Required = Required.AllowNull)]
+        public object Overbattle { get; set; }
+
+        [JsonProperty("overinterested", Required = Required.AllowNull)]
+        public object Overinterested { get; set; }
+
+        [JsonProperty("phrenologic", Required = Required.AllowNull)]
+        public object Phrenologic { get; set; }
+
+        [JsonProperty("rainband", Required = Required.AllowNull)]
+        public object Rainband { get; set; }
+
+        [JsonProperty("shiningly", Required = Required.AllowNull)]
+        public object Shiningly { get; set; }
+
+        [JsonProperty("stamineous", Required = Required.AllowNull)]
+        public object Stamineous { get; set; }
+
+        [JsonProperty("subscapularis", Required = Required.AllowNull)]
+        public object Subscapularis { get; set; }
+
+        [JsonProperty("Tahami", Required = Required.AllowNull)]
+        public object Tahami { get; set; }
+
+        [JsonProperty("undaubed", Required = Required.AllowNull)]
+        public object Undaubed { get; set; }
+
+        [JsonProperty("underntime", Required = Required.AllowNull)]
+        public object Underntime { get; set; }
+    }
+
+    public partial record LaviniaClass
+    {
+        [JsonProperty("agitable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Agitable { get; set; }
+
+        [JsonProperty("asininity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Asininity { get; set; }
+
+        [JsonProperty("benefiter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Benefiter { get; set; }
+
+        [JsonProperty("bronzelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bronzelike { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cholesteatomatous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cholesteatomatous { get; set; }
+
+        [JsonProperty("deprivement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Deprivement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("flippantness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Flippantness { get; set; }
+
+        [JsonProperty("fogproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fogproof { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("merrymeeting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Merrymeeting { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("overcareful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overcareful { get; set; }
+
+        [JsonProperty("panaris", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Panaris { get; set; }
+
+        [JsonProperty("preacceptance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preacceptance { get; set; }
+
+        [JsonProperty("quinoxaline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quinoxaline { get; set; }
+
+        [JsonProperty("sig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sig { get; set; }
+
+        [JsonProperty("superconfusion", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Superconfusion { get; set; }
+
+        [JsonProperty("Tacana", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tacana { get; set; }
+
+        [JsonProperty("tillotter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tillotter { get; set; }
+
+        [JsonProperty("tranquillize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tranquillize { get; set; }
+
+        [JsonProperty("unquestionable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unquestionable { get; set; }
+
+        [JsonProperty("uproute", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Uproute { get; set; }
+    }
+
+    public partial record OskarClass
+    {
+        [JsonProperty("Acrobates", Required = Required.AllowNull)]
+        public object Acrobates { get; set; }
+
+        [JsonProperty("beanshooter", Required = Required.AllowNull)]
+        public object Beanshooter { get; set; }
+
+        [JsonProperty("bearhound", Required = Required.AllowNull)]
+        public object Bearhound { get; set; }
+
+        [JsonProperty("Cayuga", Required = Required.AllowNull)]
+        public object Cayuga { get; set; }
+
+        [JsonProperty("guarneri", Required = Required.AllowNull)]
+        public object Guarneri { get; set; }
+
+        [JsonProperty("hypochondriacism", Required = Required.AllowNull)]
+        public object Hypochondriacism { get; set; }
+
+        [JsonProperty("indication", Required = Required.AllowNull)]
+        public object Indication { get; set; }
+
+        [JsonProperty("jaculative", Required = Required.AllowNull)]
+        public object Jaculative { get; set; }
+
+        [JsonProperty("nagana", Required = Required.AllowNull)]
+        public object Nagana { get; set; }
+
+        [JsonProperty("Netherlandish", Required = Required.AllowNull)]
+        public object Netherlandish { get; set; }
+
+        [JsonProperty("noctivagous", Required = Required.AllowNull)]
+        public object Noctivagous { get; set; }
+
+        [JsonProperty("nonphysiological", Required = Required.AllowNull)]
+        public object Nonphysiological { get; set; }
+
+        [JsonProperty("praxis", Required = Required.AllowNull)]
+        public object Praxis { get; set; }
+
+        [JsonProperty("provision", Required = Required.AllowNull)]
+        public object Provision { get; set; }
+
+        [JsonProperty("subterhuman", Required = Required.AllowNull)]
+        public object Subterhuman { get; set; }
+
+        [JsonProperty("sunlit", Required = Required.AllowNull)]
+        public object Sunlit { get; set; }
+
+        [JsonProperty("syncraniate", Required = Required.AllowNull)]
+        public object Syncraniate { get; set; }
+
+        [JsonProperty("teachment", Required = Required.AllowNull)]
+        public object Teachment { get; set; }
+
+        [JsonProperty("unmutinous", Required = Required.AllowNull)]
+        public object Unmutinous { get; set; }
+
+        [JsonProperty("unstoppable", Required = Required.AllowNull)]
+        public object Unstoppable { get; set; }
+    }
+
+    public partial struct Abranchiata
+    {
+        public long? Integer;
+        public List<long>? IntegerArray;
+
+        public static implicit operator Abranchiata(long Integer) => new Abranchiata { Integer = Integer };
+        public static implicit operator Abranchiata(List<long> IntegerArray) => new Abranchiata { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Integer == null;
+    }
+
+    public partial struct Academe
+    {
+        public long? Integer;
+        public List<long>? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Academe(long Integer) => new Academe { Integer = Integer };
+        public static implicit operator Academe(List<long> IntegerArray) => new Academe { IntegerArray = IntegerArray };
+        public static implicit operator Academe(Dictionary<string, long> IntegerMap) => new Academe { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Acquirable
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public List<long?>? UnionArray;
+
+        public static implicit operator Acquirable(Dictionary<string, long> IntegerMap) => new Acquirable { IntegerMap = IntegerMap };
+        public static implicit operator Acquirable(List<long?> UnionArray) => new Acquirable { UnionArray = UnionArray };
+    }
+
+    public partial struct Aerometry
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Aerometry(bool Bool) => new Aerometry { Bool = Bool };
+        public static implicit operator Aerometry(double Double) => new Aerometry { Double = Double };
+    }
+
+    public partial struct Alexin
+    {
+        public bool? Bool;
+        public List<long>? IntegerArray;
+
+        public static implicit operator Alexin(bool Bool) => new Alexin { Bool = Bool };
+        public static implicit operator Alexin(List<long> IntegerArray) => new Alexin { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AlleviateElement
+    {
+        public AlleviateClass? AlleviateClass;
+        public List<long?>? UnionArray;
+
+        public static implicit operator AlleviateElement(AlleviateClass AlleviateClass) => new AlleviateElement { AlleviateClass = AlleviateClass };
+        public static implicit operator AlleviateElement(List<long?> UnionArray) => new AlleviateElement { UnionArray = UnionArray };
+    }
+
+    public partial struct Amaa
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Amaa(bool Bool) => new Amaa { Bool = Bool };
+        public static implicit operator Amaa(long Integer) => new Amaa { Integer = Integer };
+        public static implicit operator Amaa(Rebecca Rebecca) => new Amaa { Rebecca = Rebecca };
+    }
+
+    public partial struct Ambassage
+    {
+        public List<object>? NullArray;
+        public string? String;
+
+        public static implicit operator Ambassage(List<object> NullArray) => new Ambassage { NullArray = NullArray };
+        public static implicit operator Ambassage(string String) => new Ambassage { String = String };
+    }
+
+    public partial struct AnkeeElement
+    {
+        public AnkeeClass? AnkeeClass;
+        public long? Integer;
+        public List<long>? IntegerArray;
+
+        public static implicit operator AnkeeElement(AnkeeClass AnkeeClass) => new AnkeeElement { AnkeeClass = AnkeeClass };
+        public static implicit operator AnkeeElement(long Integer) => new AnkeeElement { Integer = Integer };
+        public static implicit operator AnkeeElement(List<long> IntegerArray) => new AnkeeElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AnsarieElement
+    {
+        public AnsarieClass? AnsarieClass;
+        public List<long>? IntegerArray;
+
+        public static implicit operator AnsarieElement(AnsarieClass AnsarieClass) => new AnsarieElement { AnsarieClass = AnsarieClass };
+        public static implicit operator AnsarieElement(List<long> IntegerArray) => new AnsarieElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && AnsarieClass == null;
+    }
+
+    public partial struct Aphasia
+    {
+        public long? Integer;
+        public List<long>? IntegerArray;
+
+        public static implicit operator Aphasia(long Integer) => new Aphasia { Integer = Integer };
+        public static implicit operator Aphasia(List<long> IntegerArray) => new Aphasia { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Asprawl
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Asprawl(double Double) => new Asprawl { Double = Double };
+        public static implicit operator Asprawl(string String) => new Asprawl { String = String };
+    }
+
+    public partial struct Bedesman
+    {
+        public bool? Bool;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Bedesman(bool Bool) => new Bedesman { Bool = Bool };
+        public static implicit operator Bedesman(double Double) => new Bedesman { Double = Double };
+        public static implicit operator Bedesman(string String) => new Bedesman { String = String };
+    }
+
+    public partial struct Belard
+    {
+        public double? Double;
+        public List<long>? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Belard(double Double) => new Belard { Double = Double };
+        public static implicit operator Belard(List<long> IntegerArray) => new Belard { IntegerArray = IntegerArray };
+        public static implicit operator Belard(Rebecca Rebecca) => new Belard { Rebecca = Rebecca };
+    }
+
+    public partial struct Bocking
+    {
+        public bool? Bool;
+        public List<long>? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Bocking(bool Bool) => new Bocking { Bool = Bool };
+        public static implicit operator Bocking(List<long> IntegerArray) => new Bocking { IntegerArray = IntegerArray };
+        public static implicit operator Bocking(Dictionary<string, long> IntegerMap) => new Bocking { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Brawlingly
+    {
+        public List<object>? NullArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Brawlingly(List<object> NullArray) => new Brawlingly { NullArray = NullArray };
+        public static implicit operator Brawlingly(Dictionary<string, long?> UnionMap) => new Brawlingly { UnionMap = UnionMap };
+    }
+
+    public partial struct Brookie
+    {
+        public List<long>? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Brookie(List<long> IntegerArray) => new Brookie { IntegerArray = IntegerArray };
+        public static implicit operator Brookie(Rebecca Rebecca) => new Brookie { Rebecca = Rebecca };
+    }
+
+    public partial struct Bumboatman
+    {
+        public List<object>? NullArray;
+        public string? String;
+
+        public static implicit operator Bumboatman(List<object> NullArray) => new Bumboatman { NullArray = NullArray };
+        public static implicit operator Bumboatman(string String) => new Bumboatman { String = String };
+        public bool IsNull => NullArray == null && String == null;
+    }
+
+    public partial struct Calaverite
+    {
+        public List<long>? IntegerArray;
+        public string? String;
+
+        public static implicit operator Calaverite(List<long> IntegerArray) => new Calaverite { IntegerArray = IntegerArray };
+        public static implicit operator Calaverite(string String) => new Calaverite { String = String };
+    }
+
+    public partial struct Catallactic
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public List<object>? NullArray;
+
+        public static implicit operator Catallactic(bool Bool) => new Catallactic { Bool = Bool };
+        public static implicit operator Catallactic(Dictionary<string, long> IntegerMap) => new Catallactic { IntegerMap = IntegerMap };
+        public static implicit operator Catallactic(List<object> NullArray) => new Catallactic { NullArray = NullArray };
+    }
+
+    public partial struct Cemental
+    {
+        public double? Double;
+        public List<long>? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Cemental(double Double) => new Cemental { Double = Double };
+        public static implicit operator Cemental(List<long> IntegerArray) => new Cemental { IntegerArray = IntegerArray };
+        public static implicit operator Cemental(Dictionary<string, long> IntegerMap) => new Cemental { IntegerMap = IntegerMap };
+    }
+
+    public partial struct ChytridiaceaeElement
+    {
+        public bool? Bool;
+        public ChytridiaceaeClass? ChytridiaceaeClass;
+
+        public static implicit operator ChytridiaceaeElement(bool Bool) => new ChytridiaceaeElement { Bool = Bool };
+        public static implicit operator ChytridiaceaeElement(ChytridiaceaeClass ChytridiaceaeClass) => new ChytridiaceaeElement { ChytridiaceaeClass = ChytridiaceaeClass };
+        public bool IsNull => Bool == null && ChytridiaceaeClass == null;
+    }
+
+    public partial struct DiscordiaElement
+    {
+        public DiscordiaClass? DiscordiaClass;
+        public List<long>? IntegerArray;
+
+        public static implicit operator DiscordiaElement(DiscordiaClass DiscordiaClass) => new DiscordiaElement { DiscordiaClass = DiscordiaClass };
+        public static implicit operator DiscordiaElement(List<long> IntegerArray) => new DiscordiaElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Endomyce
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Endomyce(long Integer) => new Endomyce { Integer = Integer };
+        public static implicit operator Endomyce(string String) => new Endomyce { String = String };
+    }
+
+    public partial struct Epinephelidae
+    {
+        public bool? Bool;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Epinephelidae(bool Bool) => new Epinephelidae { Bool = Bool };
+        public static implicit operator Epinephelidae(long Integer) => new Epinephelidae { Integer = Integer };
+        public static implicit operator Epinephelidae(string String) => new Epinephelidae { String = String };
+    }
+
+    public partial struct Eupatorium
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public List<object>? NullArray;
+
+        public static implicit operator Eupatorium(Dictionary<string, long> IntegerMap) => new Eupatorium { IntegerMap = IntegerMap };
+        public static implicit operator Eupatorium(List<object> NullArray) => new Eupatorium { NullArray = NullArray };
+    }
+
+    public partial struct GryphosaurusElement
+    {
+        public GryphosaurusClass? GryphosaurusClass;
+        public List<long>? IntegerArray;
+        public string? String;
+
+        public static implicit operator GryphosaurusElement(GryphosaurusClass GryphosaurusClass) => new GryphosaurusElement { GryphosaurusClass = GryphosaurusClass };
+        public static implicit operator GryphosaurusElement(List<long> IntegerArray) => new GryphosaurusElement { IntegerArray = IntegerArray };
+        public static implicit operator GryphosaurusElement(string String) => new GryphosaurusElement { String = String };
+    }
+
+    public partial struct Koryak
+    {
+        public string? String;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Koryak(string String) => new Koryak { String = String };
+        public static implicit operator Koryak(Dictionary<string, long?> UnionMap) => new Koryak { UnionMap = UnionMap };
+    }
+
+    public partial struct LaviniaElement
+    {
+        public LaviniaClass? LaviniaClass;
+        public string? String;
+
+        public static implicit operator LaviniaElement(LaviniaClass LaviniaClass) => new LaviniaElement { LaviniaClass = LaviniaClass };
+        public static implicit operator LaviniaElement(string String) => new LaviniaElement { String = String };
+    }
+
+    public partial struct OskarElement
+    {
+        public List<long>? IntegerArray;
+        public OskarClass? OskarClass;
+
+        public static implicit operator OskarElement(List<long> IntegerArray) => new OskarElement { IntegerArray = IntegerArray };
+        public static implicit operator OskarElement(OskarClass OskarClass) => new OskarElement { OskarClass = OskarClass };
+    }
+
+    public partial struct RebeccaElement
+    {
+        public long? Integer;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator RebeccaElement(long Integer) => new RebeccaElement { Integer = Integer };
+        public static implicit operator RebeccaElement(Rebecca Rebecca) => new RebeccaElement { Rebecca = Rebecca };
+        public static implicit operator RebeccaElement(string String) => new RebeccaElement { String = String };
+    }
+
+    public partial struct Rhomboganoidei
+    {
+        public List<long>? IntegerArray;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Rhomboganoidei(List<long> IntegerArray) => new Rhomboganoidei { IntegerArray = IntegerArray };
+        public static implicit operator Rhomboganoidei(Rebecca Rebecca) => new Rhomboganoidei { Rebecca = Rebecca };
+        public static implicit operator Rhomboganoidei(string String) => new Rhomboganoidei { String = String };
+    }
+
+    public partial struct Ruellia
+    {
+        public bool? Bool;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Ruellia(bool Bool) => new Ruellia { Bool = Bool };
+        public static implicit operator Ruellia(Rebecca Rebecca) => new Ruellia { Rebecca = Rebecca };
+        public static implicit operator Ruellia(string String) => new Ruellia { String = String };
+    }
+
+    public partial struct School
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator School(long Integer) => new School { Integer = Integer };
+        public static implicit operator School(Dictionary<string, long> IntegerMap) => new School { IntegerMap = IntegerMap };
+        public bool IsNull => Integer == null && IntegerMap == null;
+    }
+
+    public partial struct Shakespearolater
+    {
+        public double? Double;
+        public List<long>? IntegerArray;
+        public string? String;
+
+        public static implicit operator Shakespearolater(double Double) => new Shakespearolater { Double = Double };
+        public static implicit operator Shakespearolater(List<long> IntegerArray) => new Shakespearolater { IntegerArray = IntegerArray };
+        public static implicit operator Shakespearolater(string String) => new Shakespearolater { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                AbranchiataConverter.Singleton,
+                AnsarieElementConverter.Singleton,
+                ChytridiaceaeElementConverter.Singleton,
+                DiscordiaElementConverter.Singleton,
+                EndomyceConverter.Singleton,
+                EpinephelidaeConverter.Singleton,
+                EupatoriumConverter.Singleton,
+                GryphosaurusElementConverter.Singleton,
+                KoryakConverter.Singleton,
+                LaviniaElementConverter.Singleton,
+                OskarElementConverter.Singleton,
+                RebeccaElementConverter.Singleton,
+                RhomboganoideiConverter.Singleton,
+                RuelliaConverter.Singleton,
+                SchoolConverter.Singleton,
+                ShakespearolaterConverter.Singleton,
+                AcademeConverter.Singleton,
+                AcquirableConverter.Singleton,
+                AerometryConverter.Singleton,
+                AlexinConverter.Singleton,
+                AlleviateElementConverter.Singleton,
+                AmaaConverter.Singleton,
+                AmbassageConverter.Singleton,
+                AnkeeElementConverter.Singleton,
+                AphasiaConverter.Singleton,
+                AsprawlConverter.Singleton,
+                BedesmanConverter.Singleton,
+                BelardConverter.Singleton,
+                BockingConverter.Singleton,
+                BrawlinglyConverter.Singleton,
+                BrookieConverter.Singleton,
+                BumboatmanConverter.Singleton,
+                CalaveriteConverter.Singleton,
+                CatallacticConverter.Singleton,
+                CementalConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class AbranchiataConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Abranchiata) || t == typeof(Abranchiata?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Abranchiata { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Abranchiata { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Abranchiata { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Abranchiata");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Abranchiata)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Abranchiata");
+        }
+
+        public static readonly AbranchiataConverter Singleton = new AbranchiataConverter();
+    }
+
+    internal class AnsarieElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnsarieElement) || t == typeof(AnsarieElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new AnsarieElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnsarieClass>(reader);
+                    return new AnsarieElement { AnsarieClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new AnsarieElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnsarieElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnsarieElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnsarieClass != null)
+            {
+                serializer.Serialize(writer, value.AnsarieClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnsarieElement");
+        }
+
+        public static readonly AnsarieElementConverter Singleton = new AnsarieElementConverter();
+    }
+
+    internal class ChytridiaceaeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChytridiaceaeElement) || t == typeof(ChytridiaceaeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new ChytridiaceaeElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new ChytridiaceaeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChytridiaceaeClass>(reader);
+                    return new ChytridiaceaeElement { ChytridiaceaeClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChytridiaceaeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChytridiaceaeElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.ChytridiaceaeClass != null)
+            {
+                serializer.Serialize(writer, value.ChytridiaceaeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChytridiaceaeElement");
+        }
+
+        public static readonly ChytridiaceaeElementConverter Singleton = new ChytridiaceaeElementConverter();
+    }
+
+    internal class DiscordiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiscordiaElement) || t == typeof(DiscordiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiscordiaClass>(reader);
+                    return new DiscordiaElement { DiscordiaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new DiscordiaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiscordiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiscordiaElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiscordiaClass != null)
+            {
+                serializer.Serialize(writer, value.DiscordiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiscordiaElement");
+        }
+
+        public static readonly DiscordiaElementConverter Singleton = new DiscordiaElementConverter();
+    }
+
+    internal class EndomyceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Endomyce) || t == typeof(Endomyce?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Endomyce { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Endomyce { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Endomyce");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Endomyce)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Endomyce");
+        }
+
+        public static readonly EndomyceConverter Singleton = new EndomyceConverter();
+    }
+
+    internal class EpinephelidaeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epinephelidae) || t == typeof(Epinephelidae?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Epinephelidae { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Epinephelidae { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Epinephelidae { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Epinephelidae");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epinephelidae)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epinephelidae");
+        }
+
+        public static readonly EpinephelidaeConverter Singleton = new EpinephelidaeConverter();
+    }
+
+    internal class EupatoriumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eupatorium) || t == typeof(Eupatorium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eupatorium { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Eupatorium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Eupatorium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eupatorium)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eupatorium");
+        }
+
+        public static readonly EupatoriumConverter Singleton = new EupatoriumConverter();
+    }
+
+    internal class GryphosaurusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GryphosaurusElement) || t == typeof(GryphosaurusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new GryphosaurusElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<GryphosaurusClass>(reader);
+                    return new GryphosaurusElement { GryphosaurusClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new GryphosaurusElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type GryphosaurusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (GryphosaurusElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.GryphosaurusClass != null)
+            {
+                serializer.Serialize(writer, value.GryphosaurusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type GryphosaurusElement");
+        }
+
+        public static readonly GryphosaurusElementConverter Singleton = new GryphosaurusElementConverter();
+    }
+
+    internal class KoryakConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Koryak) || t == typeof(Koryak?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Koryak { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Koryak { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Koryak");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Koryak)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Koryak");
+        }
+
+        public static readonly KoryakConverter Singleton = new KoryakConverter();
+    }
+
+    internal class LaviniaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LaviniaElement) || t == typeof(LaviniaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LaviniaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LaviniaClass>(reader);
+                    return new LaviniaElement { LaviniaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LaviniaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LaviniaElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LaviniaClass != null)
+            {
+                serializer.Serialize(writer, value.LaviniaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LaviniaElement");
+        }
+
+        public static readonly LaviniaElementConverter Singleton = new LaviniaElementConverter();
+    }
+
+    internal class OskarElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OskarElement) || t == typeof(OskarElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OskarClass>(reader);
+                    return new OskarElement { OskarClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new OskarElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OskarElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OskarElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.OskarClass != null)
+            {
+                serializer.Serialize(writer, value.OskarClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OskarElement");
+        }
+
+        public static readonly OskarElementConverter Singleton = new OskarElementConverter();
+    }
+
+    internal class RebeccaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RebeccaElement) || t == typeof(RebeccaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new RebeccaElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new RebeccaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new RebeccaElement { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type RebeccaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RebeccaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type RebeccaElement");
+        }
+
+        public static readonly RebeccaElementConverter Singleton = new RebeccaElementConverter();
+    }
+
+    internal class RhomboganoideiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rhomboganoidei) || t == typeof(Rhomboganoidei?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Rhomboganoidei { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Rhomboganoidei { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Rhomboganoidei { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rhomboganoidei");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rhomboganoidei)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rhomboganoidei");
+        }
+
+        public static readonly RhomboganoideiConverter Singleton = new RhomboganoideiConverter();
+    }
+
+    internal class RuelliaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ruellia) || t == typeof(Ruellia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Ruellia { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ruellia { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Ruellia { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Ruellia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ruellia)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ruellia");
+        }
+
+        public static readonly RuelliaConverter Singleton = new RuelliaConverter();
+    }
+
+    internal class SchoolConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(School) || t == typeof(School?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new School { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new School { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new School { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type School");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (School)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type School");
+        }
+
+        public static readonly SchoolConverter Singleton = new SchoolConverter();
+    }
+
+    internal class ShakespearolaterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shakespearolater) || t == typeof(Shakespearolater?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Shakespearolater { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Shakespearolater { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Shakespearolater { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shakespearolater");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shakespearolater)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shakespearolater");
+        }
+
+        public static readonly ShakespearolaterConverter Singleton = new ShakespearolaterConverter();
+    }
+
+    internal class AcademeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Academe) || t == typeof(Academe?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Academe { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Academe { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Academe { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Academe");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Academe)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Academe");
+        }
+
+        public static readonly AcademeConverter Singleton = new AcademeConverter();
+    }
+
+    internal class AcquirableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Acquirable) || t == typeof(Acquirable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Acquirable { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long?>>(reader);
+                    return new Acquirable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Acquirable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Acquirable)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Acquirable");
+        }
+
+        public static readonly AcquirableConverter Singleton = new AcquirableConverter();
+    }
+
+    internal class AerometryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aerometry) || t == typeof(Aerometry?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Aerometry { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Aerometry { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Aerometry");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aerometry)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aerometry");
+        }
+
+        public static readonly AerometryConverter Singleton = new AerometryConverter();
+    }
+
+    internal class AlexinConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Alexin) || t == typeof(Alexin?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Alexin { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Alexin { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Alexin");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Alexin)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Alexin");
+        }
+
+        public static readonly AlexinConverter Singleton = new AlexinConverter();
+    }
+
+    internal class AlleviateElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AlleviateElement) || t == typeof(AlleviateElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AlleviateClass>(reader);
+                    return new AlleviateElement { AlleviateClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long?>>(reader);
+                    return new AlleviateElement { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AlleviateElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AlleviateElement)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.AlleviateClass != null)
+            {
+                serializer.Serialize(writer, value.AlleviateClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AlleviateElement");
+        }
+
+        public static readonly AlleviateElementConverter Singleton = new AlleviateElementConverter();
+    }
+
+    internal class AmaaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Amaa) || t == typeof(Amaa?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Amaa { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Amaa { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Amaa { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Amaa");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Amaa)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Amaa");
+        }
+
+        public static readonly AmaaConverter Singleton = new AmaaConverter();
+    }
+
+    internal class AmbassageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ambassage) || t == typeof(Ambassage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ambassage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Ambassage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Ambassage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ambassage)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ambassage");
+        }
+
+        public static readonly AmbassageConverter Singleton = new AmbassageConverter();
+    }
+
+    internal class AnkeeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnkeeElement) || t == typeof(AnkeeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new AnkeeElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnkeeClass>(reader);
+                    return new AnkeeElement { AnkeeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new AnkeeElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnkeeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnkeeElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnkeeClass != null)
+            {
+                serializer.Serialize(writer, value.AnkeeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnkeeElement");
+        }
+
+        public static readonly AnkeeElementConverter Singleton = new AnkeeElementConverter();
+    }
+
+    internal class AphasiaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aphasia) || t == typeof(Aphasia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Aphasia { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Aphasia { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Aphasia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aphasia)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aphasia");
+        }
+
+        public static readonly AphasiaConverter Singleton = new AphasiaConverter();
+    }
+
+    internal class AsprawlConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Asprawl) || t == typeof(Asprawl?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Asprawl { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Asprawl { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Asprawl");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Asprawl)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Asprawl");
+        }
+
+        public static readonly AsprawlConverter Singleton = new AsprawlConverter();
+    }
+
+    internal class BedesmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bedesman) || t == typeof(Bedesman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Bedesman { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bedesman { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bedesman { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Bedesman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bedesman)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bedesman");
+        }
+
+        public static readonly BedesmanConverter Singleton = new BedesmanConverter();
+    }
+
+    internal class BelardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Belard) || t == typeof(Belard?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Belard { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Belard { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Belard { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Belard");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Belard)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Belard");
+        }
+
+        public static readonly BelardConverter Singleton = new BelardConverter();
+    }
+
+    internal class BockingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bocking) || t == typeof(Bocking?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bocking { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Bocking { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Bocking { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bocking");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bocking)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bocking");
+        }
+
+        public static readonly BockingConverter Singleton = new BockingConverter();
+    }
+
+    internal class BrawlinglyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brawlingly) || t == typeof(Brawlingly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Brawlingly { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Brawlingly { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brawlingly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brawlingly)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brawlingly");
+        }
+
+        public static readonly BrawlinglyConverter Singleton = new BrawlinglyConverter();
+    }
+
+    internal class BrookieConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brookie) || t == typeof(Brookie?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Brookie { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Brookie { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brookie");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brookie)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brookie");
+        }
+
+        public static readonly BrookieConverter Singleton = new BrookieConverter();
+    }
+
+    internal class BumboatmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bumboatman) || t == typeof(Bumboatman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Bumboatman { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bumboatman { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Bumboatman { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bumboatman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bumboatman)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bumboatman");
+        }
+
+        public static readonly BumboatmanConverter Singleton = new BumboatmanConverter();
+    }
+
+    internal class CalaveriteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Calaverite) || t == typeof(Calaverite?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Calaverite { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Calaverite { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Calaverite");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Calaverite)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Calaverite");
+        }
+
+        public static readonly CalaveriteConverter Singleton = new CalaveriteConverter();
+    }
+
+    internal class CatallacticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Catallactic) || t == typeof(Catallactic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Catallactic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Catallactic { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Catallactic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Catallactic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Catallactic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Catallactic");
+        }
+
+        public static readonly CatallacticConverter Singleton = new CatallacticConverter();
+    }
+
+    internal class CementalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Cemental) || t == typeof(Cemental?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Cemental { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Cemental { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Cemental { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Cemental");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Cemental)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Cemental");
+        }
+
+        public static readonly CementalConverter Singleton = new CementalConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations2.json/csharp-version-5--b2bd4d4221d9/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations2.json/csharp-version-5--b2bd4d4221d9/QuickType.cs
new file mode 100644
index 0000000..c01c593
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations2.json/csharp-version-5--b2bd4d4221d9/QuickType.cs
@@ -0,0 +1,3046 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("Abranchiata", Required = Required.Always)]
+        public Abranchiata[] Abranchiata { get; set; }
+
+        [JsonProperty("academe", Required = Required.Always)]
+        public Academe[] Academe { get; set; }
+
+        [JsonProperty("acquirable", Required = Required.Always)]
+        public Acquirable[] Acquirable { get; set; }
+
+        [JsonProperty("aerometry", Required = Required.Always)]
+        public Aerometry[] Aerometry { get; set; }
+
+        [JsonProperty("alexin", Required = Required.Always)]
+        public Alexin[] Alexin { get; set; }
+
+        [JsonProperty("alleviate", Required = Required.Always)]
+        public AlleviateElement[] Alleviate { get; set; }
+
+        [JsonProperty("amaas", Required = Required.Always)]
+        public Amaa[] Amaas { get; set; }
+
+        [JsonProperty("ambassage", Required = Required.Always)]
+        public Ambassage[] Ambassage { get; set; }
+
+        [JsonProperty("amphithyron", Required = Required.Always)]
+        public Amphithyron[] Amphithyron { get; set; }
+
+        [JsonProperty("Andriana", Required = Required.Always)]
+        public string[] Andriana { get; set; }
+
+        [JsonProperty("ankee", Required = Required.Always)]
+        public AnkeeElement[] Ankee { get; set; }
+
+        [JsonProperty("annihilator", Required = Required.Always)]
+        public Dictionary<string, long?>[] Annihilator { get; set; }
+
+        [JsonProperty("annulose", Required = Required.AllowNull)]
+        public object Annulose { get; set; }
+
+        [JsonProperty("Ansarie", Required = Required.Always)]
+        public AnsarieElement[] Ansarie { get; set; }
+
+        [JsonProperty("aphasia", Required = Required.Always)]
+        public Aphasia[] Aphasia { get; set; }
+
+        [JsonProperty("asprawl", Required = Required.Always)]
+        public Asprawl[] Asprawl { get; set; }
+
+        [JsonProperty("attractive", Required = Required.Always)]
+        public bool?[] Attractive { get; set; }
+
+        [JsonProperty("barksome", Required = Required.Always)]
+        public Dictionary<string, long> Barksome { get; set; }
+
+        [JsonProperty("bedesman", Required = Required.Always)]
+        public Bedesman[] Bedesman { get; set; }
+
+        [JsonProperty("belard", Required = Required.Always)]
+        public Belard[] Belard { get; set; }
+
+        [JsonProperty("bocking", Required = Required.Always)]
+        public Bocking[] Bocking { get; set; }
+
+        [JsonProperty("brawlingly", Required = Required.Always)]
+        public Brawlingly[] Brawlingly { get; set; }
+
+        [JsonProperty("brookie", Required = Required.Always)]
+        public Brookie[] Brookie { get; set; }
+
+        [JsonProperty("bumboatman", Required = Required.Always)]
+        public Bumboatman[] Bumboatman { get; set; }
+
+        [JsonProperty("bystreet", Required = Required.Always)]
+        public object[] Bystreet { get; set; }
+
+        [JsonProperty("calaverite", Required = Required.Always)]
+        public Calaverite[] Calaverite { get; set; }
+
+        [JsonProperty("catallactic", Required = Required.Always)]
+        public Catallactic[] Catallactic { get; set; }
+
+        [JsonProperty("cemental", Required = Required.Always)]
+        public Cemental[] Cemental { get; set; }
+
+        [JsonProperty("Chytridiaceae", Required = Required.Always)]
+        public ChytridiaceaeElement[] Chytridiaceae { get; set; }
+
+        [JsonProperty("Discordia", Required = Required.Always)]
+        public DiscordiaElement[] Discordia { get; set; }
+
+        [JsonProperty("Endomyces", Required = Required.Always)]
+        public Endomyce[] Endomyces { get; set; }
+
+        [JsonProperty("Epinephelidae", Required = Required.Always)]
+        public Epinephelidae[] Epinephelidae { get; set; }
+
+        [JsonProperty("Eupatorium", Required = Required.Always)]
+        public Eupatorium[] Eupatorium { get; set; }
+
+        [JsonProperty("Gryphosaurus", Required = Required.Always)]
+        public GryphosaurusElement[] Gryphosaurus { get; set; }
+
+        [JsonProperty("Koryak", Required = Required.Always)]
+        public Koryak[] Koryak { get; set; }
+
+        [JsonProperty("Lavinia", Required = Required.Always)]
+        public LaviniaElement[] Lavinia { get; set; }
+
+        [JsonProperty("Oskar", Required = Required.Always)]
+        public OskarElement[] Oskar { get; set; }
+
+        [JsonProperty("Rebecca", Required = Required.Always)]
+        public RebeccaElement[] Rebecca { get; set; }
+
+        [JsonProperty("Rhomboganoidei", Required = Required.Always)]
+        public Rhomboganoidei[] Rhomboganoidei { get; set; }
+
+        [JsonProperty("Rigsmal", Required = Required.Always)]
+        public bool Rigsmal { get; set; }
+
+        [JsonProperty("Ruellia", Required = Required.Always)]
+        public Ruellia[] Ruellia { get; set; }
+
+        [JsonProperty("School", Required = Required.Always)]
+        public School[] School { get; set; }
+
+        [JsonProperty("Shakespearolater", Required = Required.Always)]
+        public Shakespearolater[] Shakespearolater { get; set; }
+
+        [JsonProperty("Svan", Required = Required.Always)]
+        public double[] Svan { get; set; }
+
+        [JsonProperty("Wayao", Required = Required.Always)]
+        public Dictionary<string, double> Wayao { get; set; }
+    }
+
+    public partial record AlleviateClass
+    {
+        [JsonProperty("apriori", Required = Required.AllowNull)]
+        public object Apriori { get; set; }
+
+        [JsonProperty("beggarer", Required = Required.AllowNull)]
+        public object Beggarer { get; set; }
+
+        [JsonProperty("brokenheartedly", Required = Required.AllowNull)]
+        public object Brokenheartedly { get; set; }
+
+        [JsonProperty("debilitation", Required = Required.AllowNull)]
+        public object Debilitation { get; set; }
+
+        [JsonProperty("frike", Required = Required.AllowNull)]
+        public object Frike { get; set; }
+
+        [JsonProperty("gastrolith", Required = Required.AllowNull)]
+        public object Gastrolith { get; set; }
+
+        [JsonProperty("Hulsean", Required = Required.AllowNull)]
+        public object Hulsean { get; set; }
+
+        [JsonProperty("orthocentric", Required = Required.AllowNull)]
+        public object Orthocentric { get; set; }
+
+        [JsonProperty("petaly", Required = Required.AllowNull)]
+        public object Petaly { get; set; }
+
+        [JsonProperty("probudgeting", Required = Required.AllowNull)]
+        public object Probudgeting { get; set; }
+
+        [JsonProperty("reacquire", Required = Required.AllowNull)]
+        public object Reacquire { get; set; }
+
+        [JsonProperty("scow", Required = Required.AllowNull)]
+        public object Scow { get; set; }
+
+        [JsonProperty("shutoff", Required = Required.AllowNull)]
+        public object Shutoff { get; set; }
+
+        [JsonProperty("subcontiguous", Required = Required.AllowNull)]
+        public object Subcontiguous { get; set; }
+
+        [JsonProperty("suffumigate", Required = Required.AllowNull)]
+        public object Suffumigate { get; set; }
+
+        [JsonProperty("transformable", Required = Required.AllowNull)]
+        public object Transformable { get; set; }
+
+        [JsonProperty("uncoroneted", Required = Required.AllowNull)]
+        public object Uncoroneted { get; set; }
+
+        [JsonProperty("unparking", Required = Required.AllowNull)]
+        public object Unparking { get; set; }
+
+        [JsonProperty("unvarnishedness", Required = Required.AllowNull)]
+        public object Unvarnishedness { get; set; }
+
+        [JsonProperty("wherewithal", Required = Required.AllowNull)]
+        public object Wherewithal { get; set; }
+    }
+
+    public partial record Rebecca
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Amphithyron
+    {
+        [JsonProperty("akroasis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Akroasis { get; set; }
+
+        [JsonProperty("antiphonical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Antiphonical { get; set; }
+
+        [JsonProperty("basebred", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Basebred { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("conductometric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conductometric { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("ensilation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ensilation { get; set; }
+
+        [JsonProperty("eyebolt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Eyebolt { get; set; }
+
+        [JsonProperty("fistulated", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fistulated { get; set; }
+
+        [JsonProperty("heteropod", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Heteropod { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Juniperus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Juniperus { get; set; }
+
+        [JsonProperty("labyrinthically", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Labyrinthically { get; set; }
+
+        [JsonProperty("martyrization", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Martyrization { get; set; }
+
+        [JsonProperty("mispolicy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mispolicy { get; set; }
+
+        [JsonProperty("multipara", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Multipara { get; set; }
+
+        [JsonProperty("Nazirite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nazirite { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("possessorial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Possessorial { get; set; }
+
+        [JsonProperty("shamed", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shamed { get; set; }
+
+        [JsonProperty("shelfworn", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shelfworn { get; set; }
+
+        [JsonProperty("stagnum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stagnum { get; set; }
+
+        [JsonProperty("Those", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Those { get; set; }
+
+        [JsonProperty("undecimal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undecimal { get; set; }
+    }
+
+    public partial record AnkeeClass
+    {
+        [JsonProperty("Anomoean", Required = Required.AllowNull)]
+        public object Anomoean { get; set; }
+
+        [JsonProperty("barleyhood", Required = Required.AllowNull)]
+        public object Barleyhood { get; set; }
+
+        [JsonProperty("befriender", Required = Required.AllowNull)]
+        public object Befriender { get; set; }
+
+        [JsonProperty("brutishness", Required = Required.AllowNull)]
+        public object Brutishness { get; set; }
+
+        [JsonProperty("cephalalgy", Required = Required.AllowNull)]
+        public object Cephalalgy { get; set; }
+
+        [JsonProperty("cirurgian", Required = Required.AllowNull)]
+        public object Cirurgian { get; set; }
+
+        [JsonProperty("conventionally", Required = Required.AllowNull)]
+        public object Conventionally { get; set; }
+
+        [JsonProperty("jackshay", Required = Required.AllowNull)]
+        public object Jackshay { get; set; }
+
+        [JsonProperty("milammeter", Required = Required.AllowNull)]
+        public object Milammeter { get; set; }
+
+        [JsonProperty("Naja", Required = Required.AllowNull)]
+        public object Naja { get; set; }
+
+        [JsonProperty("ombrological", Required = Required.AllowNull)]
+        public object Ombrological { get; set; }
+
+        [JsonProperty("phonasthenia", Required = Required.AllowNull)]
+        public object Phonasthenia { get; set; }
+
+        [JsonProperty("retrievableness", Required = Required.AllowNull)]
+        public object Retrievableness { get; set; }
+
+        [JsonProperty("snakily", Required = Required.AllowNull)]
+        public object Snakily { get; set; }
+
+        [JsonProperty("swot", Required = Required.AllowNull)]
+        public object Swot { get; set; }
+
+        [JsonProperty("tartlet", Required = Required.AllowNull)]
+        public object Tartlet { get; set; }
+
+        [JsonProperty("thiofuran", Required = Required.AllowNull)]
+        public object Thiofuran { get; set; }
+
+        [JsonProperty("tracheophone", Required = Required.AllowNull)]
+        public object Tracheophone { get; set; }
+
+        [JsonProperty("tuglike", Required = Required.AllowNull)]
+        public object Tuglike { get; set; }
+
+        [JsonProperty("unscratchingly", Required = Required.AllowNull)]
+        public object Unscratchingly { get; set; }
+    }
+
+    public partial record AnsarieClass
+    {
+        [JsonProperty("accension", Required = Required.AllowNull)]
+        public object Accension { get; set; }
+
+        [JsonProperty("Alida", Required = Required.AllowNull)]
+        public object Alida { get; set; }
+
+        [JsonProperty("asteria", Required = Required.AllowNull)]
+        public object Asteria { get; set; }
+
+        [JsonProperty("beriberic", Required = Required.AllowNull)]
+        public object Beriberic { get; set; }
+
+        [JsonProperty("edgebone", Required = Required.AllowNull)]
+        public object Edgebone { get; set; }
+
+        [JsonProperty("gastrodialysis", Required = Required.AllowNull)]
+        public object Gastrodialysis { get; set; }
+
+        [JsonProperty("geographic", Required = Required.AllowNull)]
+        public object Geographic { get; set; }
+
+        [JsonProperty("Ictonyx", Required = Required.AllowNull)]
+        public object Ictonyx { get; set; }
+
+        [JsonProperty("metrocele", Required = Required.AllowNull)]
+        public object Metrocele { get; set; }
+
+        [JsonProperty("misgraft", Required = Required.AllowNull)]
+        public object Misgraft { get; set; }
+
+        [JsonProperty("monteith", Required = Required.AllowNull)]
+        public object Monteith { get; set; }
+
+        [JsonProperty("notcher", Required = Required.AllowNull)]
+        public object Notcher { get; set; }
+
+        [JsonProperty("prorestriction", Required = Required.AllowNull)]
+        public object Prorestriction { get; set; }
+
+        [JsonProperty("Ramist", Required = Required.AllowNull)]
+        public object Ramist { get; set; }
+
+        [JsonProperty("throatlet", Required = Required.AllowNull)]
+        public object Throatlet { get; set; }
+
+        [JsonProperty("unfair", Required = Required.AllowNull)]
+        public object Unfair { get; set; }
+
+        [JsonProperty("unsynonymous", Required = Required.AllowNull)]
+        public object Unsynonymous { get; set; }
+
+        [JsonProperty("water", Required = Required.AllowNull)]
+        public object Water { get; set; }
+
+        [JsonProperty("zestfully", Required = Required.AllowNull)]
+        public object Zestfully { get; set; }
+
+        [JsonProperty("zincic", Required = Required.AllowNull)]
+        public object Zincic { get; set; }
+    }
+
+    public partial record ChytridiaceaeClass
+    {
+        [JsonProperty("Batidaceae", Required = Required.AllowNull)]
+        public object Batidaceae { get; set; }
+
+        [JsonProperty("Brechites", Required = Required.AllowNull)]
+        public object Brechites { get; set; }
+
+        [JsonProperty("codespairer", Required = Required.AllowNull)]
+        public object Codespairer { get; set; }
+
+        [JsonProperty("Emery", Required = Required.AllowNull)]
+        public object Emery { get; set; }
+
+        [JsonProperty("enervative", Required = Required.AllowNull)]
+        public object Enervative { get; set; }
+
+        [JsonProperty("excriminate", Required = Required.AllowNull)]
+        public object Excriminate { get; set; }
+
+        [JsonProperty("goshenite", Required = Required.AllowNull)]
+        public object Goshenite { get; set; }
+
+        [JsonProperty("grime", Required = Required.AllowNull)]
+        public object Grime { get; set; }
+
+        [JsonProperty("gritten", Required = Required.AllowNull)]
+        public object Gritten { get; set; }
+
+        [JsonProperty("hectorly", Required = Required.AllowNull)]
+        public object Hectorly { get; set; }
+
+        [JsonProperty("intermediation", Required = Required.AllowNull)]
+        public object Intermediation { get; set; }
+
+        [JsonProperty("meeterly", Required = Required.AllowNull)]
+        public object Meeterly { get; set; }
+
+        [JsonProperty("Narraganset", Required = Required.AllowNull)]
+        public object Narraganset { get; set; }
+
+        [JsonProperty("onymatic", Required = Required.AllowNull)]
+        public object Onymatic { get; set; }
+
+        [JsonProperty("paddlecock", Required = Required.AllowNull)]
+        public object Paddlecock { get; set; }
+
+        [JsonProperty("thana", Required = Required.AllowNull)]
+        public object Thana { get; set; }
+
+        [JsonProperty("thornily", Required = Required.AllowNull)]
+        public object Thornily { get; set; }
+
+        [JsonProperty("uckia", Required = Required.AllowNull)]
+        public object Uckia { get; set; }
+
+        [JsonProperty("unmettle", Required = Required.AllowNull)]
+        public object Unmettle { get; set; }
+
+        [JsonProperty("vorticellid", Required = Required.AllowNull)]
+        public object Vorticellid { get; set; }
+    }
+
+    public partial record DiscordiaClass
+    {
+        [JsonProperty("Altaic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Altaic { get; set; }
+
+        [JsonProperty("amoristic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amoristic { get; set; }
+
+        [JsonProperty("blennophthalmia", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Blennophthalmia { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disciplinability", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Disciplinability { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("goofer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goofer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("laryngograph", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Laryngograph { get; set; }
+
+        [JsonProperty("leucitis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Leucitis { get; set; }
+
+        [JsonProperty("lymphocyst", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lymphocyst { get; set; }
+
+        [JsonProperty("microcosmology", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Microcosmology { get; set; }
+
+        [JsonProperty("nauseation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nauseation { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("Patarin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Patarin { get; set; }
+
+        [JsonProperty("preliberal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preliberal { get; set; }
+
+        [JsonProperty("prettifier", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Prettifier { get; set; }
+
+        [JsonProperty("rangework", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rangework { get; set; }
+
+        [JsonProperty("redient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Redient { get; set; }
+
+        [JsonProperty("subfusiform", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subfusiform { get; set; }
+
+        [JsonProperty("suicidical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Suicidical { get; set; }
+
+        [JsonProperty("swow", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Swow { get; set; }
+
+        [JsonProperty("wastrel", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wastrel { get; set; }
+
+        [JsonProperty("wingle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wingle { get; set; }
+    }
+
+    public partial record GryphosaurusClass
+    {
+        [JsonProperty("amissibility", Required = Required.AllowNull)]
+        public object Amissibility { get; set; }
+
+        [JsonProperty("Burushaski", Required = Required.AllowNull)]
+        public object Burushaski { get; set; }
+
+        [JsonProperty("citronin", Required = Required.AllowNull)]
+        public object Citronin { get; set; }
+
+        [JsonProperty("coplaintiff", Required = Required.AllowNull)]
+        public object Coplaintiff { get; set; }
+
+        [JsonProperty("disquisitionary", Required = Required.AllowNull)]
+        public object Disquisitionary { get; set; }
+
+        [JsonProperty("enoplan", Required = Required.AllowNull)]
+        public object Enoplan { get; set; }
+
+        [JsonProperty("faintness", Required = Required.AllowNull)]
+        public object Faintness { get; set; }
+
+        [JsonProperty("hebetomy", Required = Required.AllowNull)]
+        public object Hebetomy { get; set; }
+
+        [JsonProperty("islandry", Required = Required.AllowNull)]
+        public object Islandry { get; set; }
+
+        [JsonProperty("lameduck", Required = Required.AllowNull)]
+        public object Lameduck { get; set; }
+
+        [JsonProperty("overbattle", Required = Required.AllowNull)]
+        public object Overbattle { get; set; }
+
+        [JsonProperty("overinterested", Required = Required.AllowNull)]
+        public object Overinterested { get; set; }
+
+        [JsonProperty("phrenologic", Required = Required.AllowNull)]
+        public object Phrenologic { get; set; }
+
+        [JsonProperty("rainband", Required = Required.AllowNull)]
+        public object Rainband { get; set; }
+
+        [JsonProperty("shiningly", Required = Required.AllowNull)]
+        public object Shiningly { get; set; }
+
+        [JsonProperty("stamineous", Required = Required.AllowNull)]
+        public object Stamineous { get; set; }
+
+        [JsonProperty("subscapularis", Required = Required.AllowNull)]
+        public object Subscapularis { get; set; }
+
+        [JsonProperty("Tahami", Required = Required.AllowNull)]
+        public object Tahami { get; set; }
+
+        [JsonProperty("undaubed", Required = Required.AllowNull)]
+        public object Undaubed { get; set; }
+
+        [JsonProperty("underntime", Required = Required.AllowNull)]
+        public object Underntime { get; set; }
+    }
+
+    public partial record LaviniaClass
+    {
+        [JsonProperty("agitable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Agitable { get; set; }
+
+        [JsonProperty("asininity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Asininity { get; set; }
+
+        [JsonProperty("benefiter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Benefiter { get; set; }
+
+        [JsonProperty("bronzelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bronzelike { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cholesteatomatous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cholesteatomatous { get; set; }
+
+        [JsonProperty("deprivement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Deprivement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("flippantness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Flippantness { get; set; }
+
+        [JsonProperty("fogproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fogproof { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("merrymeeting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Merrymeeting { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("overcareful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overcareful { get; set; }
+
+        [JsonProperty("panaris", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Panaris { get; set; }
+
+        [JsonProperty("preacceptance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preacceptance { get; set; }
+
+        [JsonProperty("quinoxaline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quinoxaline { get; set; }
+
+        [JsonProperty("sig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sig { get; set; }
+
+        [JsonProperty("superconfusion", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Superconfusion { get; set; }
+
+        [JsonProperty("Tacana", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tacana { get; set; }
+
+        [JsonProperty("tillotter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tillotter { get; set; }
+
+        [JsonProperty("tranquillize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tranquillize { get; set; }
+
+        [JsonProperty("unquestionable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unquestionable { get; set; }
+
+        [JsonProperty("uproute", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Uproute { get; set; }
+    }
+
+    public partial record OskarClass
+    {
+        [JsonProperty("Acrobates", Required = Required.AllowNull)]
+        public object Acrobates { get; set; }
+
+        [JsonProperty("beanshooter", Required = Required.AllowNull)]
+        public object Beanshooter { get; set; }
+
+        [JsonProperty("bearhound", Required = Required.AllowNull)]
+        public object Bearhound { get; set; }
+
+        [JsonProperty("Cayuga", Required = Required.AllowNull)]
+        public object Cayuga { get; set; }
+
+        [JsonProperty("guarneri", Required = Required.AllowNull)]
+        public object Guarneri { get; set; }
+
+        [JsonProperty("hypochondriacism", Required = Required.AllowNull)]
+        public object Hypochondriacism { get; set; }
+
+        [JsonProperty("indication", Required = Required.AllowNull)]
+        public object Indication { get; set; }
+
+        [JsonProperty("jaculative", Required = Required.AllowNull)]
+        public object Jaculative { get; set; }
+
+        [JsonProperty("nagana", Required = Required.AllowNull)]
+        public object Nagana { get; set; }
+
+        [JsonProperty("Netherlandish", Required = Required.AllowNull)]
+        public object Netherlandish { get; set; }
+
+        [JsonProperty("noctivagous", Required = Required.AllowNull)]
+        public object Noctivagous { get; set; }
+
+        [JsonProperty("nonphysiological", Required = Required.AllowNull)]
+        public object Nonphysiological { get; set; }
+
+        [JsonProperty("praxis", Required = Required.AllowNull)]
+        public object Praxis { get; set; }
+
+        [JsonProperty("provision", Required = Required.AllowNull)]
+        public object Provision { get; set; }
+
+        [JsonProperty("subterhuman", Required = Required.AllowNull)]
+        public object Subterhuman { get; set; }
+
+        [JsonProperty("sunlit", Required = Required.AllowNull)]
+        public object Sunlit { get; set; }
+
+        [JsonProperty("syncraniate", Required = Required.AllowNull)]
+        public object Syncraniate { get; set; }
+
+        [JsonProperty("teachment", Required = Required.AllowNull)]
+        public object Teachment { get; set; }
+
+        [JsonProperty("unmutinous", Required = Required.AllowNull)]
+        public object Unmutinous { get; set; }
+
+        [JsonProperty("unstoppable", Required = Required.AllowNull)]
+        public object Unstoppable { get; set; }
+    }
+
+    public partial struct Abranchiata
+    {
+        public long? Integer;
+        public long[] IntegerArray;
+
+        public static implicit operator Abranchiata(long Integer)
+        {
+            return new Abranchiata { Integer = Integer };
+        }
+        public static implicit operator Abranchiata(long[] IntegerArray)
+        {
+            return new Abranchiata { IntegerArray = IntegerArray };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return IntegerArray == null && Integer == null;
+            }
+        }
+    }
+
+    public partial struct Academe
+    {
+        public long? Integer;
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Academe(long Integer)
+        {
+            return new Academe { Integer = Integer };
+        }
+        public static implicit operator Academe(long[] IntegerArray)
+        {
+            return new Academe { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Academe(Dictionary<string, long> IntegerMap)
+        {
+            return new Academe { IntegerMap = IntegerMap };
+        }
+    }
+
+    public partial struct Acquirable
+    {
+        public Dictionary<string, long> IntegerMap;
+        public long?[] UnionArray;
+
+        public static implicit operator Acquirable(Dictionary<string, long> IntegerMap)
+        {
+            return new Acquirable { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Acquirable(long?[] UnionArray)
+        {
+            return new Acquirable { UnionArray = UnionArray };
+        }
+    }
+
+    public partial struct Aerometry
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Aerometry(bool Bool)
+        {
+            return new Aerometry { Bool = Bool };
+        }
+        public static implicit operator Aerometry(double Double)
+        {
+            return new Aerometry { Double = Double };
+        }
+    }
+
+    public partial struct Alexin
+    {
+        public bool? Bool;
+        public long[] IntegerArray;
+
+        public static implicit operator Alexin(bool Bool)
+        {
+            return new Alexin { Bool = Bool };
+        }
+        public static implicit operator Alexin(long[] IntegerArray)
+        {
+            return new Alexin { IntegerArray = IntegerArray };
+        }
+    }
+
+    public partial struct AlleviateElement
+    {
+        public AlleviateClass AlleviateClass;
+        public long?[] UnionArray;
+
+        public static implicit operator AlleviateElement(AlleviateClass AlleviateClass)
+        {
+            return new AlleviateElement { AlleviateClass = AlleviateClass };
+        }
+        public static implicit operator AlleviateElement(long?[] UnionArray)
+        {
+            return new AlleviateElement { UnionArray = UnionArray };
+        }
+    }
+
+    public partial struct Amaa
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Rebecca Rebecca;
+
+        public static implicit operator Amaa(bool Bool)
+        {
+            return new Amaa { Bool = Bool };
+        }
+        public static implicit operator Amaa(long Integer)
+        {
+            return new Amaa { Integer = Integer };
+        }
+        public static implicit operator Amaa(Rebecca Rebecca)
+        {
+            return new Amaa { Rebecca = Rebecca };
+        }
+    }
+
+    public partial struct Ambassage
+    {
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Ambassage(object[] NullArray)
+        {
+            return new Ambassage { NullArray = NullArray };
+        }
+        public static implicit operator Ambassage(string String)
+        {
+            return new Ambassage { String = String };
+        }
+    }
+
+    public partial struct AnkeeElement
+    {
+        public AnkeeClass AnkeeClass;
+        public long? Integer;
+        public long[] IntegerArray;
+
+        public static implicit operator AnkeeElement(AnkeeClass AnkeeClass)
+        {
+            return new AnkeeElement { AnkeeClass = AnkeeClass };
+        }
+        public static implicit operator AnkeeElement(long Integer)
+        {
+            return new AnkeeElement { Integer = Integer };
+        }
+        public static implicit operator AnkeeElement(long[] IntegerArray)
+        {
+            return new AnkeeElement { IntegerArray = IntegerArray };
+        }
+    }
+
+    public partial struct AnsarieElement
+    {
+        public AnsarieClass AnsarieClass;
+        public long[] IntegerArray;
+
+        public static implicit operator AnsarieElement(AnsarieClass AnsarieClass)
+        {
+            return new AnsarieElement { AnsarieClass = AnsarieClass };
+        }
+        public static implicit operator AnsarieElement(long[] IntegerArray)
+        {
+            return new AnsarieElement { IntegerArray = IntegerArray };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return IntegerArray == null && AnsarieClass == null;
+            }
+        }
+    }
+
+    public partial struct Aphasia
+    {
+        public long? Integer;
+        public long[] IntegerArray;
+
+        public static implicit operator Aphasia(long Integer)
+        {
+            return new Aphasia { Integer = Integer };
+        }
+        public static implicit operator Aphasia(long[] IntegerArray)
+        {
+            return new Aphasia { IntegerArray = IntegerArray };
+        }
+    }
+
+    public partial struct Asprawl
+    {
+        public double? Double;
+        public string String;
+
+        public static implicit operator Asprawl(double Double)
+        {
+            return new Asprawl { Double = Double };
+        }
+        public static implicit operator Asprawl(string String)
+        {
+            return new Asprawl { String = String };
+        }
+    }
+
+    public partial struct Bedesman
+    {
+        public bool? Bool;
+        public double? Double;
+        public string String;
+
+        public static implicit operator Bedesman(bool Bool)
+        {
+            return new Bedesman { Bool = Bool };
+        }
+        public static implicit operator Bedesman(double Double)
+        {
+            return new Bedesman { Double = Double };
+        }
+        public static implicit operator Bedesman(string String)
+        {
+            return new Bedesman { String = String };
+        }
+    }
+
+    public partial struct Belard
+    {
+        public double? Double;
+        public long[] IntegerArray;
+        public Rebecca Rebecca;
+
+        public static implicit operator Belard(double Double)
+        {
+            return new Belard { Double = Double };
+        }
+        public static implicit operator Belard(long[] IntegerArray)
+        {
+            return new Belard { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Belard(Rebecca Rebecca)
+        {
+            return new Belard { Rebecca = Rebecca };
+        }
+    }
+
+    public partial struct Bocking
+    {
+        public bool? Bool;
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Bocking(bool Bool)
+        {
+            return new Bocking { Bool = Bool };
+        }
+        public static implicit operator Bocking(long[] IntegerArray)
+        {
+            return new Bocking { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Bocking(Dictionary<string, long> IntegerMap)
+        {
+            return new Bocking { IntegerMap = IntegerMap };
+        }
+    }
+
+    public partial struct Brawlingly
+    {
+        public object[] NullArray;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Brawlingly(object[] NullArray)
+        {
+            return new Brawlingly { NullArray = NullArray };
+        }
+        public static implicit operator Brawlingly(Dictionary<string, long?> UnionMap)
+        {
+            return new Brawlingly { UnionMap = UnionMap };
+        }
+    }
+
+    public partial struct Brookie
+    {
+        public long[] IntegerArray;
+        public Rebecca Rebecca;
+
+        public static implicit operator Brookie(long[] IntegerArray)
+        {
+            return new Brookie { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Brookie(Rebecca Rebecca)
+        {
+            return new Brookie { Rebecca = Rebecca };
+        }
+    }
+
+    public partial struct Bumboatman
+    {
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Bumboatman(object[] NullArray)
+        {
+            return new Bumboatman { NullArray = NullArray };
+        }
+        public static implicit operator Bumboatman(string String)
+        {
+            return new Bumboatman { String = String };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return NullArray == null && String == null;
+            }
+        }
+    }
+
+    public partial struct Calaverite
+    {
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator Calaverite(long[] IntegerArray)
+        {
+            return new Calaverite { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Calaverite(string String)
+        {
+            return new Calaverite { String = String };
+        }
+    }
+
+    public partial struct Catallactic
+    {
+        public bool? Bool;
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+
+        public static implicit operator Catallactic(bool Bool)
+        {
+            return new Catallactic { Bool = Bool };
+        }
+        public static implicit operator Catallactic(Dictionary<string, long> IntegerMap)
+        {
+            return new Catallactic { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Catallactic(object[] NullArray)
+        {
+            return new Catallactic { NullArray = NullArray };
+        }
+    }
+
+    public partial struct Cemental
+    {
+        public double? Double;
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Cemental(double Double)
+        {
+            return new Cemental { Double = Double };
+        }
+        public static implicit operator Cemental(long[] IntegerArray)
+        {
+            return new Cemental { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Cemental(Dictionary<string, long> IntegerMap)
+        {
+            return new Cemental { IntegerMap = IntegerMap };
+        }
+    }
+
+    public partial struct ChytridiaceaeElement
+    {
+        public bool? Bool;
+        public ChytridiaceaeClass ChytridiaceaeClass;
+
+        public static implicit operator ChytridiaceaeElement(bool Bool)
+        {
+            return new ChytridiaceaeElement { Bool = Bool };
+        }
+        public static implicit operator ChytridiaceaeElement(ChytridiaceaeClass ChytridiaceaeClass)
+        {
+            return new ChytridiaceaeElement { ChytridiaceaeClass = ChytridiaceaeClass };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return Bool == null && ChytridiaceaeClass == null;
+            }
+        }
+    }
+
+    public partial struct DiscordiaElement
+    {
+        public DiscordiaClass DiscordiaClass;
+        public long[] IntegerArray;
+
+        public static implicit operator DiscordiaElement(DiscordiaClass DiscordiaClass)
+        {
+            return new DiscordiaElement { DiscordiaClass = DiscordiaClass };
+        }
+        public static implicit operator DiscordiaElement(long[] IntegerArray)
+        {
+            return new DiscordiaElement { IntegerArray = IntegerArray };
+        }
+    }
+
+    public partial struct Endomyce
+    {
+        public long? Integer;
+        public string String;
+
+        public static implicit operator Endomyce(long Integer)
+        {
+            return new Endomyce { Integer = Integer };
+        }
+        public static implicit operator Endomyce(string String)
+        {
+            return new Endomyce { String = String };
+        }
+    }
+
+    public partial struct Epinephelidae
+    {
+        public bool? Bool;
+        public long? Integer;
+        public string String;
+
+        public static implicit operator Epinephelidae(bool Bool)
+        {
+            return new Epinephelidae { Bool = Bool };
+        }
+        public static implicit operator Epinephelidae(long Integer)
+        {
+            return new Epinephelidae { Integer = Integer };
+        }
+        public static implicit operator Epinephelidae(string String)
+        {
+            return new Epinephelidae { String = String };
+        }
+    }
+
+    public partial struct Eupatorium
+    {
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+
+        public static implicit operator Eupatorium(Dictionary<string, long> IntegerMap)
+        {
+            return new Eupatorium { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Eupatorium(object[] NullArray)
+        {
+            return new Eupatorium { NullArray = NullArray };
+        }
+    }
+
+    public partial struct GryphosaurusElement
+    {
+        public GryphosaurusClass GryphosaurusClass;
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator GryphosaurusElement(GryphosaurusClass GryphosaurusClass)
+        {
+            return new GryphosaurusElement { GryphosaurusClass = GryphosaurusClass };
+        }
+        public static implicit operator GryphosaurusElement(long[] IntegerArray)
+        {
+            return new GryphosaurusElement { IntegerArray = IntegerArray };
+        }
+        public static implicit operator GryphosaurusElement(string String)
+        {
+            return new GryphosaurusElement { String = String };
+        }
+    }
+
+    public partial struct Koryak
+    {
+        public string String;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Koryak(string String)
+        {
+            return new Koryak { String = String };
+        }
+        public static implicit operator Koryak(Dictionary<string, long?> UnionMap)
+        {
+            return new Koryak { UnionMap = UnionMap };
+        }
+    }
+
+    public partial struct LaviniaElement
+    {
+        public LaviniaClass LaviniaClass;
+        public string String;
+
+        public static implicit operator LaviniaElement(LaviniaClass LaviniaClass)
+        {
+            return new LaviniaElement { LaviniaClass = LaviniaClass };
+        }
+        public static implicit operator LaviniaElement(string String)
+        {
+            return new LaviniaElement { String = String };
+        }
+    }
+
+    public partial struct OskarElement
+    {
+        public long[] IntegerArray;
+        public OskarClass OskarClass;
+
+        public static implicit operator OskarElement(long[] IntegerArray)
+        {
+            return new OskarElement { IntegerArray = IntegerArray };
+        }
+        public static implicit operator OskarElement(OskarClass OskarClass)
+        {
+            return new OskarElement { OskarClass = OskarClass };
+        }
+    }
+
+    public partial struct RebeccaElement
+    {
+        public long? Integer;
+        public Rebecca Rebecca;
+        public string String;
+
+        public static implicit operator RebeccaElement(long Integer)
+        {
+            return new RebeccaElement { Integer = Integer };
+        }
+        public static implicit operator RebeccaElement(Rebecca Rebecca)
+        {
+            return new RebeccaElement { Rebecca = Rebecca };
+        }
+        public static implicit operator RebeccaElement(string String)
+        {
+            return new RebeccaElement { String = String };
+        }
+    }
+
+    public partial struct Rhomboganoidei
+    {
+        public long[] IntegerArray;
+        public Rebecca Rebecca;
+        public string String;
+
+        public static implicit operator Rhomboganoidei(long[] IntegerArray)
+        {
+            return new Rhomboganoidei { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Rhomboganoidei(Rebecca Rebecca)
+        {
+            return new Rhomboganoidei { Rebecca = Rebecca };
+        }
+        public static implicit operator Rhomboganoidei(string String)
+        {
+            return new Rhomboganoidei { String = String };
+        }
+    }
+
+    public partial struct Ruellia
+    {
+        public bool? Bool;
+        public Rebecca Rebecca;
+        public string String;
+
+        public static implicit operator Ruellia(bool Bool)
+        {
+            return new Ruellia { Bool = Bool };
+        }
+        public static implicit operator Ruellia(Rebecca Rebecca)
+        {
+            return new Ruellia { Rebecca = Rebecca };
+        }
+        public static implicit operator Ruellia(string String)
+        {
+            return new Ruellia { String = String };
+        }
+    }
+
+    public partial struct School
+    {
+        public long? Integer;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator School(long Integer)
+        {
+            return new School { Integer = Integer };
+        }
+        public static implicit operator School(Dictionary<string, long> IntegerMap)
+        {
+            return new School { IntegerMap = IntegerMap };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return Integer == null && IntegerMap == null;
+            }
+        }
+    }
+
+    public partial struct Shakespearolater
+    {
+        public double? Double;
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator Shakespearolater(double Double)
+        {
+            return new Shakespearolater { Double = Double };
+        }
+        public static implicit operator Shakespearolater(long[] IntegerArray)
+        {
+            return new Shakespearolater { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Shakespearolater(string String)
+        {
+            return new Shakespearolater { String = String };
+        }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json)
+        {
+            return JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+        }
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self)
+        {
+            return JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+        }
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                AbranchiataConverter.Singleton,
+                AnsarieElementConverter.Singleton,
+                ChytridiaceaeElementConverter.Singleton,
+                DiscordiaElementConverter.Singleton,
+                EndomyceConverter.Singleton,
+                EpinephelidaeConverter.Singleton,
+                EupatoriumConverter.Singleton,
+                GryphosaurusElementConverter.Singleton,
+                KoryakConverter.Singleton,
+                LaviniaElementConverter.Singleton,
+                OskarElementConverter.Singleton,
+                RebeccaElementConverter.Singleton,
+                RhomboganoideiConverter.Singleton,
+                RuelliaConverter.Singleton,
+                SchoolConverter.Singleton,
+                ShakespearolaterConverter.Singleton,
+                AcademeConverter.Singleton,
+                AcquirableConverter.Singleton,
+                AerometryConverter.Singleton,
+                AlexinConverter.Singleton,
+                AlleviateElementConverter.Singleton,
+                AmaaConverter.Singleton,
+                AmbassageConverter.Singleton,
+                AnkeeElementConverter.Singleton,
+                AphasiaConverter.Singleton,
+                AsprawlConverter.Singleton,
+                BedesmanConverter.Singleton,
+                BelardConverter.Singleton,
+                BockingConverter.Singleton,
+                BrawlinglyConverter.Singleton,
+                BrookieConverter.Singleton,
+                BumboatmanConverter.Singleton,
+                CalaveriteConverter.Singleton,
+                CatallacticConverter.Singleton,
+                CementalConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class AbranchiataConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Abranchiata) || t == typeof(Abranchiata?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Abranchiata { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Abranchiata { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Abranchiata { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Abranchiata");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Abranchiata)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Abranchiata");
+        }
+
+        public static readonly AbranchiataConverter Singleton = new AbranchiataConverter();
+    }
+
+    internal class AnsarieElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(AnsarieElement) || t == typeof(AnsarieElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new AnsarieElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnsarieClass>(reader);
+                    return new AnsarieElement { AnsarieClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnsarieElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnsarieElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnsarieElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnsarieClass != null)
+            {
+                serializer.Serialize(writer, value.AnsarieClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnsarieElement");
+        }
+
+        public static readonly AnsarieElementConverter Singleton = new AnsarieElementConverter();
+    }
+
+    internal class ChytridiaceaeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(ChytridiaceaeElement) || t == typeof(ChytridiaceaeElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new ChytridiaceaeElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new ChytridiaceaeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChytridiaceaeClass>(reader);
+                    return new ChytridiaceaeElement { ChytridiaceaeClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChytridiaceaeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChytridiaceaeElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.ChytridiaceaeClass != null)
+            {
+                serializer.Serialize(writer, value.ChytridiaceaeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChytridiaceaeElement");
+        }
+
+        public static readonly ChytridiaceaeElementConverter Singleton = new ChytridiaceaeElementConverter();
+    }
+
+    internal class DiscordiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(DiscordiaElement) || t == typeof(DiscordiaElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiscordiaClass>(reader);
+                    return new DiscordiaElement { DiscordiaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiscordiaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiscordiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiscordiaElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiscordiaClass != null)
+            {
+                serializer.Serialize(writer, value.DiscordiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiscordiaElement");
+        }
+
+        public static readonly DiscordiaElementConverter Singleton = new DiscordiaElementConverter();
+    }
+
+    internal class EndomyceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Endomyce) || t == typeof(Endomyce?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Endomyce { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Endomyce { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Endomyce");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Endomyce)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Endomyce");
+        }
+
+        public static readonly EndomyceConverter Singleton = new EndomyceConverter();
+    }
+
+    internal class EpinephelidaeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Epinephelidae) || t == typeof(Epinephelidae?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Epinephelidae { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Epinephelidae { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Epinephelidae { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Epinephelidae");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epinephelidae)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epinephelidae");
+        }
+
+        public static readonly EpinephelidaeConverter Singleton = new EpinephelidaeConverter();
+    }
+
+    internal class EupatoriumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Eupatorium) || t == typeof(Eupatorium?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eupatorium { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Eupatorium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Eupatorium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eupatorium)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eupatorium");
+        }
+
+        public static readonly EupatoriumConverter Singleton = new EupatoriumConverter();
+    }
+
+    internal class GryphosaurusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(GryphosaurusElement) || t == typeof(GryphosaurusElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new GryphosaurusElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<GryphosaurusClass>(reader);
+                    return new GryphosaurusElement { GryphosaurusClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new GryphosaurusElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type GryphosaurusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (GryphosaurusElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.GryphosaurusClass != null)
+            {
+                serializer.Serialize(writer, value.GryphosaurusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type GryphosaurusElement");
+        }
+
+        public static readonly GryphosaurusElementConverter Singleton = new GryphosaurusElementConverter();
+    }
+
+    internal class KoryakConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Koryak) || t == typeof(Koryak?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Koryak { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Koryak { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Koryak");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Koryak)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Koryak");
+        }
+
+        public static readonly KoryakConverter Singleton = new KoryakConverter();
+    }
+
+    internal class LaviniaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(LaviniaElement) || t == typeof(LaviniaElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LaviniaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LaviniaClass>(reader);
+                    return new LaviniaElement { LaviniaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LaviniaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LaviniaElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LaviniaClass != null)
+            {
+                serializer.Serialize(writer, value.LaviniaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LaviniaElement");
+        }
+
+        public static readonly LaviniaElementConverter Singleton = new LaviniaElementConverter();
+    }
+
+    internal class OskarElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(OskarElement) || t == typeof(OskarElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OskarClass>(reader);
+                    return new OskarElement { OskarClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new OskarElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OskarElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OskarElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.OskarClass != null)
+            {
+                serializer.Serialize(writer, value.OskarClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OskarElement");
+        }
+
+        public static readonly OskarElementConverter Singleton = new OskarElementConverter();
+    }
+
+    internal class RebeccaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(RebeccaElement) || t == typeof(RebeccaElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new RebeccaElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new RebeccaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new RebeccaElement { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type RebeccaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RebeccaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type RebeccaElement");
+        }
+
+        public static readonly RebeccaElementConverter Singleton = new RebeccaElementConverter();
+    }
+
+    internal class RhomboganoideiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Rhomboganoidei) || t == typeof(Rhomboganoidei?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Rhomboganoidei { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Rhomboganoidei { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rhomboganoidei { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rhomboganoidei");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rhomboganoidei)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rhomboganoidei");
+        }
+
+        public static readonly RhomboganoideiConverter Singleton = new RhomboganoideiConverter();
+    }
+
+    internal class RuelliaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Ruellia) || t == typeof(Ruellia?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Ruellia { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ruellia { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Ruellia { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Ruellia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ruellia)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ruellia");
+        }
+
+        public static readonly RuelliaConverter Singleton = new RuelliaConverter();
+    }
+
+    internal class SchoolConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(School) || t == typeof(School?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new School { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new School { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new School { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type School");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (School)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type School");
+        }
+
+        public static readonly SchoolConverter Singleton = new SchoolConverter();
+    }
+
+    internal class ShakespearolaterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Shakespearolater) || t == typeof(Shakespearolater?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Shakespearolater { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Shakespearolater { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Shakespearolater { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shakespearolater");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shakespearolater)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shakespearolater");
+        }
+
+        public static readonly ShakespearolaterConverter Singleton = new ShakespearolaterConverter();
+    }
+
+    internal class AcademeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Academe) || t == typeof(Academe?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Academe { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Academe { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Academe { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Academe");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Academe)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Academe");
+        }
+
+        public static readonly AcademeConverter Singleton = new AcademeConverter();
+    }
+
+    internal class AcquirableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Acquirable) || t == typeof(Acquirable?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Acquirable { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Acquirable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Acquirable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Acquirable)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Acquirable");
+        }
+
+        public static readonly AcquirableConverter Singleton = new AcquirableConverter();
+    }
+
+    internal class AerometryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Aerometry) || t == typeof(Aerometry?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Aerometry { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Aerometry { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Aerometry");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aerometry)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aerometry");
+        }
+
+        public static readonly AerometryConverter Singleton = new AerometryConverter();
+    }
+
+    internal class AlexinConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Alexin) || t == typeof(Alexin?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Alexin { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Alexin { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Alexin");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Alexin)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Alexin");
+        }
+
+        public static readonly AlexinConverter Singleton = new AlexinConverter();
+    }
+
+    internal class AlleviateElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(AlleviateElement) || t == typeof(AlleviateElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AlleviateClass>(reader);
+                    return new AlleviateElement { AlleviateClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new AlleviateElement { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AlleviateElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AlleviateElement)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.AlleviateClass != null)
+            {
+                serializer.Serialize(writer, value.AlleviateClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AlleviateElement");
+        }
+
+        public static readonly AlleviateElementConverter Singleton = new AlleviateElementConverter();
+    }
+
+    internal class AmaaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Amaa) || t == typeof(Amaa?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Amaa { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Amaa { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Amaa { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Amaa");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Amaa)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Amaa");
+        }
+
+        public static readonly AmaaConverter Singleton = new AmaaConverter();
+    }
+
+    internal class AmbassageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Ambassage) || t == typeof(Ambassage?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ambassage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Ambassage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Ambassage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ambassage)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ambassage");
+        }
+
+        public static readonly AmbassageConverter Singleton = new AmbassageConverter();
+    }
+
+    internal class AnkeeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(AnkeeElement) || t == typeof(AnkeeElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new AnkeeElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnkeeClass>(reader);
+                    return new AnkeeElement { AnkeeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnkeeElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnkeeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnkeeElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnkeeClass != null)
+            {
+                serializer.Serialize(writer, value.AnkeeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnkeeElement");
+        }
+
+        public static readonly AnkeeElementConverter Singleton = new AnkeeElementConverter();
+    }
+
+    internal class AphasiaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Aphasia) || t == typeof(Aphasia?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Aphasia { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Aphasia { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Aphasia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aphasia)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aphasia");
+        }
+
+        public static readonly AphasiaConverter Singleton = new AphasiaConverter();
+    }
+
+    internal class AsprawlConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Asprawl) || t == typeof(Asprawl?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Asprawl { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Asprawl { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Asprawl");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Asprawl)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Asprawl");
+        }
+
+        public static readonly AsprawlConverter Singleton = new AsprawlConverter();
+    }
+
+    internal class BedesmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Bedesman) || t == typeof(Bedesman?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Bedesman { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bedesman { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bedesman { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Bedesman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bedesman)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bedesman");
+        }
+
+        public static readonly BedesmanConverter Singleton = new BedesmanConverter();
+    }
+
+    internal class BelardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Belard) || t == typeof(Belard?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Belard { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Belard { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Belard { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Belard");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Belard)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Belard");
+        }
+
+        public static readonly BelardConverter Singleton = new BelardConverter();
+    }
+
+    internal class BockingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Bocking) || t == typeof(Bocking?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bocking { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Bocking { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Bocking { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bocking");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bocking)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bocking");
+        }
+
+        public static readonly BockingConverter Singleton = new BockingConverter();
+    }
+
+    internal class BrawlinglyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Brawlingly) || t == typeof(Brawlingly?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Brawlingly { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Brawlingly { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brawlingly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brawlingly)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brawlingly");
+        }
+
+        public static readonly BrawlinglyConverter Singleton = new BrawlinglyConverter();
+    }
+
+    internal class BrookieConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Brookie) || t == typeof(Brookie?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Brookie { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Brookie { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brookie");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brookie)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brookie");
+        }
+
+        public static readonly BrookieConverter Singleton = new BrookieConverter();
+    }
+
+    internal class BumboatmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Bumboatman) || t == typeof(Bumboatman?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Bumboatman { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bumboatman { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Bumboatman { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bumboatman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bumboatman)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bumboatman");
+        }
+
+        public static readonly BumboatmanConverter Singleton = new BumboatmanConverter();
+    }
+
+    internal class CalaveriteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Calaverite) || t == typeof(Calaverite?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Calaverite { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Calaverite { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Calaverite");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Calaverite)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Calaverite");
+        }
+
+        public static readonly CalaveriteConverter Singleton = new CalaveriteConverter();
+    }
+
+    internal class CatallacticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Catallactic) || t == typeof(Catallactic?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Catallactic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Catallactic { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Catallactic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Catallactic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Catallactic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Catallactic");
+        }
+
+        public static readonly CatallacticConverter Singleton = new CatallacticConverter();
+    }
+
+    internal class CementalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Cemental) || t == typeof(Cemental?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Cemental { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Cemental { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Cemental { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Cemental");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Cemental)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Cemental");
+        }
+
+        public static readonly CementalConverter Singleton = new CementalConverter();
+    }
+}
diff --git a/head/csharp-records/test/inputs/json/priority/combinations2.json/csharp-version-6--6a3b58bb4100/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations2.json/csharp-version-6--6a3b58bb4100/QuickType.cs
new file mode 100644
index 0000000..3b34c42
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations2.json/csharp-version-6--6a3b58bb4100/QuickType.cs
@@ -0,0 +1,2653 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("Abranchiata", Required = Required.Always)]
+        public Abranchiata[] Abranchiata { get; set; }
+
+        [JsonProperty("academe", Required = Required.Always)]
+        public Academe[] Academe { get; set; }
+
+        [JsonProperty("acquirable", Required = Required.Always)]
+        public Acquirable[] Acquirable { get; set; }
+
+        [JsonProperty("aerometry", Required = Required.Always)]
+        public Aerometry[] Aerometry { get; set; }
+
+        [JsonProperty("alexin", Required = Required.Always)]
+        public Alexin[] Alexin { get; set; }
+
+        [JsonProperty("alleviate", Required = Required.Always)]
+        public AlleviateElement[] Alleviate { get; set; }
+
+        [JsonProperty("amaas", Required = Required.Always)]
+        public Amaa[] Amaas { get; set; }
+
+        [JsonProperty("ambassage", Required = Required.Always)]
+        public Ambassage[] Ambassage { get; set; }
+
+        [JsonProperty("amphithyron", Required = Required.Always)]
+        public Amphithyron[] Amphithyron { get; set; }
+
+        [JsonProperty("Andriana", Required = Required.Always)]
+        public string[] Andriana { get; set; }
+
+        [JsonProperty("ankee", Required = Required.Always)]
+        public AnkeeElement[] Ankee { get; set; }
+
+        [JsonProperty("annihilator", Required = Required.Always)]
+        public Dictionary<string, long?>[] Annihilator { get; set; }
+
+        [JsonProperty("annulose", Required = Required.AllowNull)]
+        public object Annulose { get; set; }
+
+        [JsonProperty("Ansarie", Required = Required.Always)]
+        public AnsarieElement[] Ansarie { get; set; }
+
+        [JsonProperty("aphasia", Required = Required.Always)]
+        public Aphasia[] Aphasia { get; set; }
+
+        [JsonProperty("asprawl", Required = Required.Always)]
+        public Asprawl[] Asprawl { get; set; }
+
+        [JsonProperty("attractive", Required = Required.Always)]
+        public bool?[] Attractive { get; set; }
+
+        [JsonProperty("barksome", Required = Required.Always)]
+        public Dictionary<string, long> Barksome { get; set; }
+
+        [JsonProperty("bedesman", Required = Required.Always)]
+        public Bedesman[] Bedesman { get; set; }
+
+        [JsonProperty("belard", Required = Required.Always)]
+        public Belard[] Belard { get; set; }
+
+        [JsonProperty("bocking", Required = Required.Always)]
+        public Bocking[] Bocking { get; set; }
+
+        [JsonProperty("brawlingly", Required = Required.Always)]
+        public Brawlingly[] Brawlingly { get; set; }
+
+        [JsonProperty("brookie", Required = Required.Always)]
+        public Brookie[] Brookie { get; set; }
+
+        [JsonProperty("bumboatman", Required = Required.Always)]
+        public Bumboatman[] Bumboatman { get; set; }
+
+        [JsonProperty("bystreet", Required = Required.Always)]
+        public object[] Bystreet { get; set; }
+
+        [JsonProperty("calaverite", Required = Required.Always)]
+        public Calaverite[] Calaverite { get; set; }
+
+        [JsonProperty("catallactic", Required = Required.Always)]
+        public Catallactic[] Catallactic { get; set; }
+
+        [JsonProperty("cemental", Required = Required.Always)]
+        public Cemental[] Cemental { get; set; }
+
+        [JsonProperty("Chytridiaceae", Required = Required.Always)]
+        public ChytridiaceaeElement[] Chytridiaceae { get; set; }
+
+        [JsonProperty("Discordia", Required = Required.Always)]
+        public DiscordiaElement[] Discordia { get; set; }
+
+        [JsonProperty("Endomyces", Required = Required.Always)]
+        public Endomyce[] Endomyces { get; set; }
+
+        [JsonProperty("Epinephelidae", Required = Required.Always)]
+        public Epinephelidae[] Epinephelidae { get; set; }
+
+        [JsonProperty("Eupatorium", Required = Required.Always)]
+        public Eupatorium[] Eupatorium { get; set; }
+
+        [JsonProperty("Gryphosaurus", Required = Required.Always)]
+        public GryphosaurusElement[] Gryphosaurus { get; set; }
+
+        [JsonProperty("Koryak", Required = Required.Always)]
+        public Koryak[] Koryak { get; set; }
+
+        [JsonProperty("Lavinia", Required = Required.Always)]
+        public LaviniaElement[] Lavinia { get; set; }
+
+        [JsonProperty("Oskar", Required = Required.Always)]
+        public OskarElement[] Oskar { get; set; }
+
+        [JsonProperty("Rebecca", Required = Required.Always)]
+        public RebeccaElement[] Rebecca { get; set; }
+
+        [JsonProperty("Rhomboganoidei", Required = Required.Always)]
+        public Rhomboganoidei[] Rhomboganoidei { get; set; }
+
+        [JsonProperty("Rigsmal", Required = Required.Always)]
+        public bool Rigsmal { get; set; }
+
+        [JsonProperty("Ruellia", Required = Required.Always)]
+        public Ruellia[] Ruellia { get; set; }
+
+        [JsonProperty("School", Required = Required.Always)]
+        public School[] School { get; set; }
+
+        [JsonProperty("Shakespearolater", Required = Required.Always)]
+        public Shakespearolater[] Shakespearolater { get; set; }
+
+        [JsonProperty("Svan", Required = Required.Always)]
+        public double[] Svan { get; set; }
+
+        [JsonProperty("Wayao", Required = Required.Always)]
+        public Dictionary<string, double> Wayao { get; set; }
+    }
+
+    public partial record AlleviateClass
+    {
+        [JsonProperty("apriori", Required = Required.AllowNull)]
+        public object Apriori { get; set; }
+
+        [JsonProperty("beggarer", Required = Required.AllowNull)]
+        public object Beggarer { get; set; }
+
+        [JsonProperty("brokenheartedly", Required = Required.AllowNull)]
+        public object Brokenheartedly { get; set; }
+
+        [JsonProperty("debilitation", Required = Required.AllowNull)]
+        public object Debilitation { get; set; }
+
+        [JsonProperty("frike", Required = Required.AllowNull)]
+        public object Frike { get; set; }
+
+        [JsonProperty("gastrolith", Required = Required.AllowNull)]
+        public object Gastrolith { get; set; }
+
+        [JsonProperty("Hulsean", Required = Required.AllowNull)]
+        public object Hulsean { get; set; }
+
+        [JsonProperty("orthocentric", Required = Required.AllowNull)]
+        public object Orthocentric { get; set; }
+
+        [JsonProperty("petaly", Required = Required.AllowNull)]
+        public object Petaly { get; set; }
+
+        [JsonProperty("probudgeting", Required = Required.AllowNull)]
+        public object Probudgeting { get; set; }
+
+        [JsonProperty("reacquire", Required = Required.AllowNull)]
+        public object Reacquire { get; set; }
+
+        [JsonProperty("scow", Required = Required.AllowNull)]
+        public object Scow { get; set; }
+
+        [JsonProperty("shutoff", Required = Required.AllowNull)]
+        public object Shutoff { get; set; }
+
+        [JsonProperty("subcontiguous", Required = Required.AllowNull)]
+        public object Subcontiguous { get; set; }
+
+        [JsonProperty("suffumigate", Required = Required.AllowNull)]
+        public object Suffumigate { get; set; }
+
+        [JsonProperty("transformable", Required = Required.AllowNull)]
+        public object Transformable { get; set; }
+
+        [JsonProperty("uncoroneted", Required = Required.AllowNull)]
+        public object Uncoroneted { get; set; }
+
+        [JsonProperty("unparking", Required = Required.AllowNull)]
+        public object Unparking { get; set; }
+
+        [JsonProperty("unvarnishedness", Required = Required.AllowNull)]
+        public object Unvarnishedness { get; set; }
+
+        [JsonProperty("wherewithal", Required = Required.AllowNull)]
+        public object Wherewithal { get; set; }
+    }
+
+    public partial record Rebecca
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Amphithyron
+    {
+        [JsonProperty("akroasis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Akroasis { get; set; }
+
+        [JsonProperty("antiphonical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Antiphonical { get; set; }
+
+        [JsonProperty("basebred", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Basebred { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("conductometric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conductometric { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("ensilation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ensilation { get; set; }
+
+        [JsonProperty("eyebolt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Eyebolt { get; set; }
+
+        [JsonProperty("fistulated", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fistulated { get; set; }
+
+        [JsonProperty("heteropod", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Heteropod { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Juniperus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Juniperus { get; set; }
+
+        [JsonProperty("labyrinthically", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Labyrinthically { get; set; }
+
+        [JsonProperty("martyrization", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Martyrization { get; set; }
+
+        [JsonProperty("mispolicy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mispolicy { get; set; }
+
+        [JsonProperty("multipara", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Multipara { get; set; }
+
+        [JsonProperty("Nazirite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nazirite { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("possessorial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Possessorial { get; set; }
+
+        [JsonProperty("shamed", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shamed { get; set; }
+
+        [JsonProperty("shelfworn", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shelfworn { get; set; }
+
+        [JsonProperty("stagnum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stagnum { get; set; }
+
+        [JsonProperty("Those", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Those { get; set; }
+
+        [JsonProperty("undecimal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undecimal { get; set; }
+    }
+
+    public partial record AnkeeClass
+    {
+        [JsonProperty("Anomoean", Required = Required.AllowNull)]
+        public object Anomoean { get; set; }
+
+        [JsonProperty("barleyhood", Required = Required.AllowNull)]
+        public object Barleyhood { get; set; }
+
+        [JsonProperty("befriender", Required = Required.AllowNull)]
+        public object Befriender { get; set; }
+
+        [JsonProperty("brutishness", Required = Required.AllowNull)]
+        public object Brutishness { get; set; }
+
+        [JsonProperty("cephalalgy", Required = Required.AllowNull)]
+        public object Cephalalgy { get; set; }
+
+        [JsonProperty("cirurgian", Required = Required.AllowNull)]
+        public object Cirurgian { get; set; }
+
+        [JsonProperty("conventionally", Required = Required.AllowNull)]
+        public object Conventionally { get; set; }
+
+        [JsonProperty("jackshay", Required = Required.AllowNull)]
+        public object Jackshay { get; set; }
+
+        [JsonProperty("milammeter", Required = Required.AllowNull)]
+        public object Milammeter { get; set; }
+
+        [JsonProperty("Naja", Required = Required.AllowNull)]
+        public object Naja { get; set; }
+
+        [JsonProperty("ombrological", Required = Required.AllowNull)]
+        public object Ombrological { get; set; }
+
+        [JsonProperty("phonasthenia", Required = Required.AllowNull)]
+        public object Phonasthenia { get; set; }
+
+        [JsonProperty("retrievableness", Required = Required.AllowNull)]
+        public object Retrievableness { get; set; }
+
+        [JsonProperty("snakily", Required = Required.AllowNull)]
+        public object Snakily { get; set; }
+
+        [JsonProperty("swot", Required = Required.AllowNull)]
+        public object Swot { get; set; }
+
+        [JsonProperty("tartlet", Required = Required.AllowNull)]
+        public object Tartlet { get; set; }
+
+        [JsonProperty("thiofuran", Required = Required.AllowNull)]
+        public object Thiofuran { get; set; }
+
+        [JsonProperty("tracheophone", Required = Required.AllowNull)]
+        public object Tracheophone { get; set; }
+
+        [JsonProperty("tuglike", Required = Required.AllowNull)]
+        public object Tuglike { get; set; }
+
+        [JsonProperty("unscratchingly", Required = Required.AllowNull)]
+        public object Unscratchingly { get; set; }
+    }
+
+    public partial record AnsarieClass
+    {
+        [JsonProperty("accension", Required = Required.AllowNull)]
+        public object Accension { get; set; }
+
+        [JsonProperty("Alida", Required = Required.AllowNull)]
+        public object Alida { get; set; }
+
+        [JsonProperty("asteria", Required = Required.AllowNull)]
+        public object Asteria { get; set; }
+
+        [JsonProperty("beriberic", Required = Required.AllowNull)]
+        public object Beriberic { get; set; }
+
+        [JsonProperty("edgebone", Required = Required.AllowNull)]
+        public object Edgebone { get; set; }
+
+        [JsonProperty("gastrodialysis", Required = Required.AllowNull)]
+        public object Gastrodialysis { get; set; }
+
+        [JsonProperty("geographic", Required = Required.AllowNull)]
+        public object Geographic { get; set; }
+
+        [JsonProperty("Ictonyx", Required = Required.AllowNull)]
+        public object Ictonyx { get; set; }
+
+        [JsonProperty("metrocele", Required = Required.AllowNull)]
+        public object Metrocele { get; set; }
+
+        [JsonProperty("misgraft", Required = Required.AllowNull)]
+        public object Misgraft { get; set; }
+
+        [JsonProperty("monteith", Required = Required.AllowNull)]
+        public object Monteith { get; set; }
+
+        [JsonProperty("notcher", Required = Required.AllowNull)]
+        public object Notcher { get; set; }
+
+        [JsonProperty("prorestriction", Required = Required.AllowNull)]
+        public object Prorestriction { get; set; }
+
+        [JsonProperty("Ramist", Required = Required.AllowNull)]
+        public object Ramist { get; set; }
+
+        [JsonProperty("throatlet", Required = Required.AllowNull)]
+        public object Throatlet { get; set; }
+
+        [JsonProperty("unfair", Required = Required.AllowNull)]
+        public object Unfair { get; set; }
+
+        [JsonProperty("unsynonymous", Required = Required.AllowNull)]
+        public object Unsynonymous { get; set; }
+
+        [JsonProperty("water", Required = Required.AllowNull)]
+        public object Water { get; set; }
+
+        [JsonProperty("zestfully", Required = Required.AllowNull)]
+        public object Zestfully { get; set; }
+
+        [JsonProperty("zincic", Required = Required.AllowNull)]
+        public object Zincic { get; set; }
+    }
+
+    public partial record ChytridiaceaeClass
+    {
+        [JsonProperty("Batidaceae", Required = Required.AllowNull)]
+        public object Batidaceae { get; set; }
+
+        [JsonProperty("Brechites", Required = Required.AllowNull)]
+        public object Brechites { get; set; }
+
+        [JsonProperty("codespairer", Required = Required.AllowNull)]
+        public object Codespairer { get; set; }
+
+        [JsonProperty("Emery", Required = Required.AllowNull)]
+        public object Emery { get; set; }
+
+        [JsonProperty("enervative", Required = Required.AllowNull)]
+        public object Enervative { get; set; }
+
+        [JsonProperty("excriminate", Required = Required.AllowNull)]
+        public object Excriminate { get; set; }
+
+        [JsonProperty("goshenite", Required = Required.AllowNull)]
+        public object Goshenite { get; set; }
+
+        [JsonProperty("grime", Required = Required.AllowNull)]
+        public object Grime { get; set; }
+
+        [JsonProperty("gritten", Required = Required.AllowNull)]
+        public object Gritten { get; set; }
+
+        [JsonProperty("hectorly", Required = Required.AllowNull)]
+        public object Hectorly { get; set; }
+
+        [JsonProperty("intermediation", Required = Required.AllowNull)]
+        public object Intermediation { get; set; }
+
+        [JsonProperty("meeterly", Required = Required.AllowNull)]
+        public object Meeterly { get; set; }
+
+        [JsonProperty("Narraganset", Required = Required.AllowNull)]
+        public object Narraganset { get; set; }
+
+        [JsonProperty("onymatic", Required = Required.AllowNull)]
+        public object Onymatic { get; set; }
+
+        [JsonProperty("paddlecock", Required = Required.AllowNull)]
+        public object Paddlecock { get; set; }
+
+        [JsonProperty("thana", Required = Required.AllowNull)]
+        public object Thana { get; set; }
+
+        [JsonProperty("thornily", Required = Required.AllowNull)]
+        public object Thornily { get; set; }
+
+        [JsonProperty("uckia", Required = Required.AllowNull)]
+        public object Uckia { get; set; }
+
+        [JsonProperty("unmettle", Required = Required.AllowNull)]
+        public object Unmettle { get; set; }
+
+        [JsonProperty("vorticellid", Required = Required.AllowNull)]
+        public object Vorticellid { get; set; }
+    }
+
+    public partial record DiscordiaClass
+    {
+        [JsonProperty("Altaic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Altaic { get; set; }
+
+        [JsonProperty("amoristic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amoristic { get; set; }
+
+        [JsonProperty("blennophthalmia", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Blennophthalmia { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disciplinability", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Disciplinability { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("goofer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goofer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("laryngograph", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Laryngograph { get; set; }
+
+        [JsonProperty("leucitis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Leucitis { get; set; }
+
+        [JsonProperty("lymphocyst", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lymphocyst { get; set; }
+
+        [JsonProperty("microcosmology", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Microcosmology { get; set; }
+
+        [JsonProperty("nauseation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nauseation { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("Patarin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Patarin { get; set; }
+
+        [JsonProperty("preliberal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preliberal { get; set; }
+
+        [JsonProperty("prettifier", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Prettifier { get; set; }
+
+        [JsonProperty("rangework", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rangework { get; set; }
+
+        [JsonProperty("redient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Redient { get; set; }
+
+        [JsonProperty("subfusiform", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subfusiform { get; set; }
+
+        [JsonProperty("suicidical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Suicidical { get; set; }
+
+        [JsonProperty("swow", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Swow { get; set; }
+
+        [JsonProperty("wastrel", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wastrel { get; set; }
+
+        [JsonProperty("wingle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wingle { get; set; }
+    }
+
+    public partial record GryphosaurusClass
+    {
+        [JsonProperty("amissibility", Required = Required.AllowNull)]
+        public object Amissibility { get; set; }
+
+        [JsonProperty("Burushaski", Required = Required.AllowNull)]
+        public object Burushaski { get; set; }
+
+        [JsonProperty("citronin", Required = Required.AllowNull)]
+        public object Citronin { get; set; }
+
+        [JsonProperty("coplaintiff", Required = Required.AllowNull)]
+        public object Coplaintiff { get; set; }
+
+        [JsonProperty("disquisitionary", Required = Required.AllowNull)]
+        public object Disquisitionary { get; set; }
+
+        [JsonProperty("enoplan", Required = Required.AllowNull)]
+        public object Enoplan { get; set; }
+
+        [JsonProperty("faintness", Required = Required.AllowNull)]
+        public object Faintness { get; set; }
+
+        [JsonProperty("hebetomy", Required = Required.AllowNull)]
+        public object Hebetomy { get; set; }
+
+        [JsonProperty("islandry", Required = Required.AllowNull)]
+        public object Islandry { get; set; }
+
+        [JsonProperty("lameduck", Required = Required.AllowNull)]
+        public object Lameduck { get; set; }
+
+        [JsonProperty("overbattle", Required = Required.AllowNull)]
+        public object Overbattle { get; set; }
+
+        [JsonProperty("overinterested", Required = Required.AllowNull)]
+        public object Overinterested { get; set; }
+
+        [JsonProperty("phrenologic", Required = Required.AllowNull)]
+        public object Phrenologic { get; set; }
+
+        [JsonProperty("rainband", Required = Required.AllowNull)]
+        public object Rainband { get; set; }
+
+        [JsonProperty("shiningly", Required = Required.AllowNull)]
+        public object Shiningly { get; set; }
+
+        [JsonProperty("stamineous", Required = Required.AllowNull)]
+        public object Stamineous { get; set; }
+
+        [JsonProperty("subscapularis", Required = Required.AllowNull)]
+        public object Subscapularis { get; set; }
+
+        [JsonProperty("Tahami", Required = Required.AllowNull)]
+        public object Tahami { get; set; }
+
+        [JsonProperty("undaubed", Required = Required.AllowNull)]
+        public object Undaubed { get; set; }
+
+        [JsonProperty("underntime", Required = Required.AllowNull)]
+        public object Underntime { get; set; }
+    }
+
+    public partial record LaviniaClass
+    {
+        [JsonProperty("agitable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Agitable { get; set; }
+
+        [JsonProperty("asininity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Asininity { get; set; }
+
+        [JsonProperty("benefiter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Benefiter { get; set; }
+
+        [JsonProperty("bronzelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bronzelike { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cholesteatomatous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cholesteatomatous { get; set; }
+
+        [JsonProperty("deprivement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Deprivement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("flippantness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Flippantness { get; set; }
+
+        [JsonProperty("fogproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fogproof { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("merrymeeting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Merrymeeting { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("overcareful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overcareful { get; set; }
+
+        [JsonProperty("panaris", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Panaris { get; set; }
+
+        [JsonProperty("preacceptance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preacceptance { get; set; }
+
+        [JsonProperty("quinoxaline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quinoxaline { get; set; }
+
+        [JsonProperty("sig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sig { get; set; }
+
+        [JsonProperty("superconfusion", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Superconfusion { get; set; }
+
+        [JsonProperty("Tacana", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tacana { get; set; }
+
+        [JsonProperty("tillotter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tillotter { get; set; }
+
+        [JsonProperty("tranquillize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tranquillize { get; set; }
+
+        [JsonProperty("unquestionable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unquestionable { get; set; }
+
+        [JsonProperty("uproute", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Uproute { get; set; }
+    }
+
+    public partial record OskarClass
+    {
+        [JsonProperty("Acrobates", Required = Required.AllowNull)]
+        public object Acrobates { get; set; }
+
+        [JsonProperty("beanshooter", Required = Required.AllowNull)]
+        public object Beanshooter { get; set; }
+
+        [JsonProperty("bearhound", Required = Required.AllowNull)]
+        public object Bearhound { get; set; }
+
+        [JsonProperty("Cayuga", Required = Required.AllowNull)]
+        public object Cayuga { get; set; }
+
+        [JsonProperty("guarneri", Required = Required.AllowNull)]
+        public object Guarneri { get; set; }
+
+        [JsonProperty("hypochondriacism", Required = Required.AllowNull)]
+        public object Hypochondriacism { get; set; }
+
+        [JsonProperty("indication", Required = Required.AllowNull)]
+        public object Indication { get; set; }
+
+        [JsonProperty("jaculative", Required = Required.AllowNull)]
+        public object Jaculative { get; set; }
+
+        [JsonProperty("nagana", Required = Required.AllowNull)]
+        public object Nagana { get; set; }
+
+        [JsonProperty("Netherlandish", Required = Required.AllowNull)]
+        public object Netherlandish { get; set; }
+
+        [JsonProperty("noctivagous", Required = Required.AllowNull)]
+        public object Noctivagous { get; set; }
+
+        [JsonProperty("nonphysiological", Required = Required.AllowNull)]
+        public object Nonphysiological { get; set; }
+
+        [JsonProperty("praxis", Required = Required.AllowNull)]
+        public object Praxis { get; set; }
+
+        [JsonProperty("provision", Required = Required.AllowNull)]
+        public object Provision { get; set; }
+
+        [JsonProperty("subterhuman", Required = Required.AllowNull)]
+        public object Subterhuman { get; set; }
+
+        [JsonProperty("sunlit", Required = Required.AllowNull)]
+        public object Sunlit { get; set; }
+
+        [JsonProperty("syncraniate", Required = Required.AllowNull)]
+        public object Syncraniate { get; set; }
+
+        [JsonProperty("teachment", Required = Required.AllowNull)]
+        public object Teachment { get; set; }
+
+        [JsonProperty("unmutinous", Required = Required.AllowNull)]
+        public object Unmutinous { get; set; }
+
+        [JsonProperty("unstoppable", Required = Required.AllowNull)]
+        public object Unstoppable { get; set; }
+    }
+
+    public partial struct Abranchiata
+    {
+        public long? Integer;
+        public long[] IntegerArray;
+
+        public static implicit operator Abranchiata(long Integer) => new Abranchiata { Integer = Integer };
+        public static implicit operator Abranchiata(long[] IntegerArray) => new Abranchiata { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Integer == null;
+    }
+
+    public partial struct Academe
+    {
+        public long? Integer;
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Academe(long Integer) => new Academe { Integer = Integer };
+        public static implicit operator Academe(long[] IntegerArray) => new Academe { IntegerArray = IntegerArray };
+        public static implicit operator Academe(Dictionary<string, long> IntegerMap) => new Academe { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Acquirable
+    {
+        public Dictionary<string, long> IntegerMap;
+        public long?[] UnionArray;
+
+        public static implicit operator Acquirable(Dictionary<string, long> IntegerMap) => new Acquirable { IntegerMap = IntegerMap };
+        public static implicit operator Acquirable(long?[] UnionArray) => new Acquirable { UnionArray = UnionArray };
+    }
+
+    public partial struct Aerometry
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Aerometry(bool Bool) => new Aerometry { Bool = Bool };
+        public static implicit operator Aerometry(double Double) => new Aerometry { Double = Double };
+    }
+
+    public partial struct Alexin
+    {
+        public bool? Bool;
+        public long[] IntegerArray;
+
+        public static implicit operator Alexin(bool Bool) => new Alexin { Bool = Bool };
+        public static implicit operator Alexin(long[] IntegerArray) => new Alexin { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AlleviateElement
+    {
+        public AlleviateClass AlleviateClass;
+        public long?[] UnionArray;
+
+        public static implicit operator AlleviateElement(AlleviateClass AlleviateClass) => new AlleviateElement { AlleviateClass = AlleviateClass };
+        public static implicit operator AlleviateElement(long?[] UnionArray) => new AlleviateElement { UnionArray = UnionArray };
+    }
+
+    public partial struct Amaa
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Rebecca Rebecca;
+
+        public static implicit operator Amaa(bool Bool) => new Amaa { Bool = Bool };
+        public static implicit operator Amaa(long Integer) => new Amaa { Integer = Integer };
+        public static implicit operator Amaa(Rebecca Rebecca) => new Amaa { Rebecca = Rebecca };
+    }
+
+    public partial struct Ambassage
+    {
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Ambassage(object[] NullArray) => new Ambassage { NullArray = NullArray };
+        public static implicit operator Ambassage(string String) => new Ambassage { String = String };
+    }
+
+    public partial struct AnkeeElement
+    {
+        public AnkeeClass AnkeeClass;
+        public long? Integer;
+        public long[] IntegerArray;
+
+        public static implicit operator AnkeeElement(AnkeeClass AnkeeClass) => new AnkeeElement { AnkeeClass = AnkeeClass };
+        public static implicit operator AnkeeElement(long Integer) => new AnkeeElement { Integer = Integer };
+        public static implicit operator AnkeeElement(long[] IntegerArray) => new AnkeeElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AnsarieElement
+    {
+        public AnsarieClass AnsarieClass;
+        public long[] IntegerArray;
+
+        public static implicit operator AnsarieElement(AnsarieClass AnsarieClass) => new AnsarieElement { AnsarieClass = AnsarieClass };
+        public static implicit operator AnsarieElement(long[] IntegerArray) => new AnsarieElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && AnsarieClass == null;
+    }
+
+    public partial struct Aphasia
+    {
+        public long? Integer;
+        public long[] IntegerArray;
+
+        public static implicit operator Aphasia(long Integer) => new Aphasia { Integer = Integer };
+        public static implicit operator Aphasia(long[] IntegerArray) => new Aphasia { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Asprawl
+    {
+        public double? Double;
+        public string String;
+
+        public static implicit operator Asprawl(double Double) => new Asprawl { Double = Double };
+        public static implicit operator Asprawl(string String) => new Asprawl { String = String };
+    }
+
+    public partial struct Bedesman
+    {
+        public bool? Bool;
+        public double? Double;
+        public string String;
+
+        public static implicit operator Bedesman(bool Bool) => new Bedesman { Bool = Bool };
+        public static implicit operator Bedesman(double Double) => new Bedesman { Double = Double };
+        public static implicit operator Bedesman(string String) => new Bedesman { String = String };
+    }
+
+    public partial struct Belard
+    {
+        public double? Double;
+        public long[] IntegerArray;
+        public Rebecca Rebecca;
+
+        public static implicit operator Belard(double Double) => new Belard { Double = Double };
+        public static implicit operator Belard(long[] IntegerArray) => new Belard { IntegerArray = IntegerArray };
+        public static implicit operator Belard(Rebecca Rebecca) => new Belard { Rebecca = Rebecca };
+    }
+
+    public partial struct Bocking
+    {
+        public bool? Bool;
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Bocking(bool Bool) => new Bocking { Bool = Bool };
+        public static implicit operator Bocking(long[] IntegerArray) => new Bocking { IntegerArray = IntegerArray };
+        public static implicit operator Bocking(Dictionary<string, long> IntegerMap) => new Bocking { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Brawlingly
+    {
+        public object[] NullArray;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Brawlingly(object[] NullArray) => new Brawlingly { NullArray = NullArray };
+        public static implicit operator Brawlingly(Dictionary<string, long?> UnionMap) => new Brawlingly { UnionMap = UnionMap };
+    }
+
+    public partial struct Brookie
+    {
+        public long[] IntegerArray;
+        public Rebecca Rebecca;
+
+        public static implicit operator Brookie(long[] IntegerArray) => new Brookie { IntegerArray = IntegerArray };
+        public static implicit operator Brookie(Rebecca Rebecca) => new Brookie { Rebecca = Rebecca };
+    }
+
+    public partial struct Bumboatman
+    {
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Bumboatman(object[] NullArray) => new Bumboatman { NullArray = NullArray };
+        public static implicit operator Bumboatman(string String) => new Bumboatman { String = String };
+        public bool IsNull => NullArray == null && String == null;
+    }
+
+    public partial struct Calaverite
+    {
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator Calaverite(long[] IntegerArray) => new Calaverite { IntegerArray = IntegerArray };
+        public static implicit operator Calaverite(string String) => new Calaverite { String = String };
+    }
+
+    public partial struct Catallactic
+    {
+        public bool? Bool;
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+
+        public static implicit operator Catallactic(bool Bool) => new Catallactic { Bool = Bool };
+        public static implicit operator Catallactic(Dictionary<string, long> IntegerMap) => new Catallactic { IntegerMap = IntegerMap };
+        public static implicit operator Catallactic(object[] NullArray) => new Catallactic { NullArray = NullArray };
+    }
+
+    public partial struct Cemental
+    {
+        public double? Double;
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Cemental(double Double) => new Cemental { Double = Double };
+        public static implicit operator Cemental(long[] IntegerArray) => new Cemental { IntegerArray = IntegerArray };
+        public static implicit operator Cemental(Dictionary<string, long> IntegerMap) => new Cemental { IntegerMap = IntegerMap };
+    }
+
+    public partial struct ChytridiaceaeElement
+    {
+        public bool? Bool;
+        public ChytridiaceaeClass ChytridiaceaeClass;
+
+        public static implicit operator ChytridiaceaeElement(bool Bool) => new ChytridiaceaeElement { Bool = Bool };
+        public static implicit operator ChytridiaceaeElement(ChytridiaceaeClass ChytridiaceaeClass) => new ChytridiaceaeElement { ChytridiaceaeClass = ChytridiaceaeClass };
+        public bool IsNull => Bool == null && ChytridiaceaeClass == null;
+    }
+
+    public partial struct DiscordiaElement
+    {
+        public DiscordiaClass DiscordiaClass;
+        public long[] IntegerArray;
+
+        public static implicit operator DiscordiaElement(DiscordiaClass DiscordiaClass) => new DiscordiaElement { DiscordiaClass = DiscordiaClass };
+        public static implicit operator DiscordiaElement(long[] IntegerArray) => new DiscordiaElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Endomyce
+    {
+        public long? Integer;
+        public string String;
+
+        public static implicit operator Endomyce(long Integer) => new Endomyce { Integer = Integer };
+        public static implicit operator Endomyce(string String) => new Endomyce { String = String };
+    }
+
+    public partial struct Epinephelidae
+    {
+        public bool? Bool;
+        public long? Integer;
+        public string String;
+
+        public static implicit operator Epinephelidae(bool Bool) => new Epinephelidae { Bool = Bool };
+        public static implicit operator Epinephelidae(long Integer) => new Epinephelidae { Integer = Integer };
+        public static implicit operator Epinephelidae(string String) => new Epinephelidae { String = String };
+    }
+
+    public partial struct Eupatorium
+    {
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+
+        public static implicit operator Eupatorium(Dictionary<string, long> IntegerMap) => new Eupatorium { IntegerMap = IntegerMap };
+        public static implicit operator Eupatorium(object[] NullArray) => new Eupatorium { NullArray = NullArray };
+    }
+
+    public partial struct GryphosaurusElement
+    {
+        public GryphosaurusClass GryphosaurusClass;
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator GryphosaurusElement(GryphosaurusClass GryphosaurusClass) => new GryphosaurusElement { GryphosaurusClass = GryphosaurusClass };
+        public static implicit operator GryphosaurusElement(long[] IntegerArray) => new GryphosaurusElement { IntegerArray = IntegerArray };
+        public static implicit operator GryphosaurusElement(string String) => new GryphosaurusElement { String = String };
+    }
+
+    public partial struct Koryak
+    {
+        public string String;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Koryak(string String) => new Koryak { String = String };
+        public static implicit operator Koryak(Dictionary<string, long?> UnionMap) => new Koryak { UnionMap = UnionMap };
+    }
+
+    public partial struct LaviniaElement
+    {
+        public LaviniaClass LaviniaClass;
+        public string String;
+
+        public static implicit operator LaviniaElement(LaviniaClass LaviniaClass) => new LaviniaElement { LaviniaClass = LaviniaClass };
+        public static implicit operator LaviniaElement(string String) => new LaviniaElement { String = String };
+    }
+
+    public partial struct OskarElement
+    {
+        public long[] IntegerArray;
+        public OskarClass OskarClass;
+
+        public static implicit operator OskarElement(long[] IntegerArray) => new OskarElement { IntegerArray = IntegerArray };
+        public static implicit operator OskarElement(OskarClass OskarClass) => new OskarElement { OskarClass = OskarClass };
+    }
+
+    public partial struct RebeccaElement
+    {
+        public long? Integer;
+        public Rebecca Rebecca;
+        public string String;
+
+        public static implicit operator RebeccaElement(long Integer) => new RebeccaElement { Integer = Integer };
+        public static implicit operator RebeccaElement(Rebecca Rebecca) => new RebeccaElement { Rebecca = Rebecca };
+        public static implicit operator RebeccaElement(string String) => new RebeccaElement { String = String };
+    }
+
+    public partial struct Rhomboganoidei
+    {
+        public long[] IntegerArray;
+        public Rebecca Rebecca;
+        public string String;
+
+        public static implicit operator Rhomboganoidei(long[] IntegerArray) => new Rhomboganoidei { IntegerArray = IntegerArray };
+        public static implicit operator Rhomboganoidei(Rebecca Rebecca) => new Rhomboganoidei { Rebecca = Rebecca };
+        public static implicit operator Rhomboganoidei(string String) => new Rhomboganoidei { String = String };
+    }
+
+    public partial struct Ruellia
+    {
+        public bool? Bool;
+        public Rebecca Rebecca;
+        public string String;
+
+        public static implicit operator Ruellia(bool Bool) => new Ruellia { Bool = Bool };
+        public static implicit operator Ruellia(Rebecca Rebecca) => new Ruellia { Rebecca = Rebecca };
+        public static implicit operator Ruellia(string String) => new Ruellia { String = String };
+    }
+
+    public partial struct School
+    {
+        public long? Integer;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator School(long Integer) => new School { Integer = Integer };
+        public static implicit operator School(Dictionary<string, long> IntegerMap) => new School { IntegerMap = IntegerMap };
+        public bool IsNull => Integer == null && IntegerMap == null;
+    }
+
+    public partial struct Shakespearolater
+    {
+        public double? Double;
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator Shakespearolater(double Double) => new Shakespearolater { Double = Double };
+        public static implicit operator Shakespearolater(long[] IntegerArray) => new Shakespearolater { IntegerArray = IntegerArray };
+        public static implicit operator Shakespearolater(string String) => new Shakespearolater { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                AbranchiataConverter.Singleton,
+                AnsarieElementConverter.Singleton,
+                ChytridiaceaeElementConverter.Singleton,
+                DiscordiaElementConverter.Singleton,
+                EndomyceConverter.Singleton,
+                EpinephelidaeConverter.Singleton,
+                EupatoriumConverter.Singleton,
+                GryphosaurusElementConverter.Singleton,
+                KoryakConverter.Singleton,
+                LaviniaElementConverter.Singleton,
+                OskarElementConverter.Singleton,
+                RebeccaElementConverter.Singleton,
+                RhomboganoideiConverter.Singleton,
+                RuelliaConverter.Singleton,
+                SchoolConverter.Singleton,
+                ShakespearolaterConverter.Singleton,
+                AcademeConverter.Singleton,
+                AcquirableConverter.Singleton,
+                AerometryConverter.Singleton,
+                AlexinConverter.Singleton,
+                AlleviateElementConverter.Singleton,
+                AmaaConverter.Singleton,
+                AmbassageConverter.Singleton,
+                AnkeeElementConverter.Singleton,
+                AphasiaConverter.Singleton,
+                AsprawlConverter.Singleton,
+                BedesmanConverter.Singleton,
+                BelardConverter.Singleton,
+                BockingConverter.Singleton,
+                BrawlinglyConverter.Singleton,
+                BrookieConverter.Singleton,
+                BumboatmanConverter.Singleton,
+                CalaveriteConverter.Singleton,
+                CatallacticConverter.Singleton,
+                CementalConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class AbranchiataConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Abranchiata) || t == typeof(Abranchiata?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Abranchiata { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Abranchiata { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Abranchiata { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Abranchiata");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Abranchiata)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Abranchiata");
+        }
+
+        public static readonly AbranchiataConverter Singleton = new AbranchiataConverter();
+    }
+
+    internal class AnsarieElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnsarieElement) || t == typeof(AnsarieElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new AnsarieElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnsarieClass>(reader);
+                    return new AnsarieElement { AnsarieClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnsarieElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnsarieElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnsarieElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnsarieClass != null)
+            {
+                serializer.Serialize(writer, value.AnsarieClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnsarieElement");
+        }
+
+        public static readonly AnsarieElementConverter Singleton = new AnsarieElementConverter();
+    }
+
+    internal class ChytridiaceaeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChytridiaceaeElement) || t == typeof(ChytridiaceaeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new ChytridiaceaeElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new ChytridiaceaeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChytridiaceaeClass>(reader);
+                    return new ChytridiaceaeElement { ChytridiaceaeClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChytridiaceaeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChytridiaceaeElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.ChytridiaceaeClass != null)
+            {
+                serializer.Serialize(writer, value.ChytridiaceaeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChytridiaceaeElement");
+        }
+
+        public static readonly ChytridiaceaeElementConverter Singleton = new ChytridiaceaeElementConverter();
+    }
+
+    internal class DiscordiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiscordiaElement) || t == typeof(DiscordiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiscordiaClass>(reader);
+                    return new DiscordiaElement { DiscordiaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiscordiaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiscordiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiscordiaElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiscordiaClass != null)
+            {
+                serializer.Serialize(writer, value.DiscordiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiscordiaElement");
+        }
+
+        public static readonly DiscordiaElementConverter Singleton = new DiscordiaElementConverter();
+    }
+
+    internal class EndomyceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Endomyce) || t == typeof(Endomyce?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Endomyce { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Endomyce { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Endomyce");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Endomyce)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Endomyce");
+        }
+
+        public static readonly EndomyceConverter Singleton = new EndomyceConverter();
+    }
+
+    internal class EpinephelidaeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epinephelidae) || t == typeof(Epinephelidae?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Epinephelidae { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Epinephelidae { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Epinephelidae { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Epinephelidae");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epinephelidae)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epinephelidae");
+        }
+
+        public static readonly EpinephelidaeConverter Singleton = new EpinephelidaeConverter();
+    }
+
+    internal class EupatoriumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eupatorium) || t == typeof(Eupatorium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eupatorium { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Eupatorium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Eupatorium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eupatorium)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eupatorium");
+        }
+
+        public static readonly EupatoriumConverter Singleton = new EupatoriumConverter();
+    }
+
+    internal class GryphosaurusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GryphosaurusElement) || t == typeof(GryphosaurusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new GryphosaurusElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<GryphosaurusClass>(reader);
+                    return new GryphosaurusElement { GryphosaurusClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new GryphosaurusElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type GryphosaurusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (GryphosaurusElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.GryphosaurusClass != null)
+            {
+                serializer.Serialize(writer, value.GryphosaurusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type GryphosaurusElement");
+        }
+
+        public static readonly GryphosaurusElementConverter Singleton = new GryphosaurusElementConverter();
+    }
+
+    internal class KoryakConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Koryak) || t == typeof(Koryak?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Koryak { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Koryak { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Koryak");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Koryak)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Koryak");
+        }
+
+        public static readonly KoryakConverter Singleton = new KoryakConverter();
+    }
+
+    internal class LaviniaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LaviniaElement) || t == typeof(LaviniaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LaviniaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LaviniaClass>(reader);
+                    return new LaviniaElement { LaviniaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LaviniaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LaviniaElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LaviniaClass != null)
+            {
+                serializer.Serialize(writer, value.LaviniaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LaviniaElement");
+        }
+
+        public static readonly LaviniaElementConverter Singleton = new LaviniaElementConverter();
+    }
+
+    internal class OskarElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OskarElement) || t == typeof(OskarElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OskarClass>(reader);
+                    return new OskarElement { OskarClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new OskarElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OskarElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OskarElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.OskarClass != null)
+            {
+                serializer.Serialize(writer, value.OskarClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OskarElement");
+        }
+
+        public static readonly OskarElementConverter Singleton = new OskarElementConverter();
+    }
+
+    internal class RebeccaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RebeccaElement) || t == typeof(RebeccaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new RebeccaElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new RebeccaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new RebeccaElement { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type RebeccaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RebeccaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type RebeccaElement");
+        }
+
+        public static readonly RebeccaElementConverter Singleton = new RebeccaElementConverter();
+    }
+
+    internal class RhomboganoideiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rhomboganoidei) || t == typeof(Rhomboganoidei?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Rhomboganoidei { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Rhomboganoidei { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rhomboganoidei { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rhomboganoidei");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rhomboganoidei)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rhomboganoidei");
+        }
+
+        public static readonly RhomboganoideiConverter Singleton = new RhomboganoideiConverter();
+    }
+
+    internal class RuelliaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ruellia) || t == typeof(Ruellia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Ruellia { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ruellia { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Ruellia { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Ruellia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ruellia)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ruellia");
+        }
+
+        public static readonly RuelliaConverter Singleton = new RuelliaConverter();
+    }
+
+    internal class SchoolConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(School) || t == typeof(School?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new School { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new School { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new School { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type School");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (School)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type School");
+        }
+
+        public static readonly SchoolConverter Singleton = new SchoolConverter();
+    }
+
+    internal class ShakespearolaterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shakespearolater) || t == typeof(Shakespearolater?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Shakespearolater { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Shakespearolater { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Shakespearolater { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shakespearolater");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shakespearolater)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shakespearolater");
+        }
+
+        public static readonly ShakespearolaterConverter Singleton = new ShakespearolaterConverter();
+    }
+
+    internal class AcademeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Academe) || t == typeof(Academe?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Academe { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Academe { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Academe { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Academe");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Academe)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Academe");
+        }
+
+        public static readonly AcademeConverter Singleton = new AcademeConverter();
+    }
+
+    internal class AcquirableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Acquirable) || t == typeof(Acquirable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Acquirable { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Acquirable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Acquirable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Acquirable)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Acquirable");
+        }
+
+        public static readonly AcquirableConverter Singleton = new AcquirableConverter();
+    }
+
+    internal class AerometryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aerometry) || t == typeof(Aerometry?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Aerometry { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Aerometry { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Aerometry");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aerometry)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aerometry");
+        }
+
+        public static readonly AerometryConverter Singleton = new AerometryConverter();
+    }
+
+    internal class AlexinConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Alexin) || t == typeof(Alexin?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Alexin { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Alexin { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Alexin");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Alexin)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Alexin");
+        }
+
+        public static readonly AlexinConverter Singleton = new AlexinConverter();
+    }
+
+    internal class AlleviateElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AlleviateElement) || t == typeof(AlleviateElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AlleviateClass>(reader);
+                    return new AlleviateElement { AlleviateClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new AlleviateElement { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AlleviateElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AlleviateElement)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.AlleviateClass != null)
+            {
+                serializer.Serialize(writer, value.AlleviateClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AlleviateElement");
+        }
+
+        public static readonly AlleviateElementConverter Singleton = new AlleviateElementConverter();
+    }
+
+    internal class AmaaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Amaa) || t == typeof(Amaa?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Amaa { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Amaa { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Amaa { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Amaa");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Amaa)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Amaa");
+        }
+
+        public static readonly AmaaConverter Singleton = new AmaaConverter();
+    }
+
+    internal class AmbassageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ambassage) || t == typeof(Ambassage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ambassage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Ambassage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Ambassage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ambassage)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ambassage");
+        }
+
+        public static readonly AmbassageConverter Singleton = new AmbassageConverter();
+    }
+
+    internal class AnkeeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnkeeElement) || t == typeof(AnkeeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new AnkeeElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnkeeClass>(reader);
+                    return new AnkeeElement { AnkeeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnkeeElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnkeeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnkeeElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnkeeClass != null)
+            {
+                serializer.Serialize(writer, value.AnkeeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnkeeElement");
+        }
+
+        public static readonly AnkeeElementConverter Singleton = new AnkeeElementConverter();
+    }
+
+    internal class AphasiaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aphasia) || t == typeof(Aphasia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Aphasia { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Aphasia { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Aphasia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aphasia)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aphasia");
+        }
+
+        public static readonly AphasiaConverter Singleton = new AphasiaConverter();
+    }
+
+    internal class AsprawlConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Asprawl) || t == typeof(Asprawl?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Asprawl { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Asprawl { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Asprawl");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Asprawl)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Asprawl");
+        }
+
+        public static readonly AsprawlConverter Singleton = new AsprawlConverter();
+    }
+
+    internal class BedesmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bedesman) || t == typeof(Bedesman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Bedesman { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bedesman { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bedesman { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Bedesman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bedesman)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bedesman");
+        }
+
+        public static readonly BedesmanConverter Singleton = new BedesmanConverter();
+    }
+
+    internal class BelardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Belard) || t == typeof(Belard?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Belard { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Belard { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Belard { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Belard");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Belard)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Belard");
+        }
+
+        public static readonly BelardConverter Singleton = new BelardConverter();
+    }
+
+    internal class BockingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bocking) || t == typeof(Bocking?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bocking { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Bocking { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Bocking { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bocking");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bocking)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bocking");
+        }
+
+        public static readonly BockingConverter Singleton = new BockingConverter();
+    }
+
+    internal class BrawlinglyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brawlingly) || t == typeof(Brawlingly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Brawlingly { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Brawlingly { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brawlingly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brawlingly)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brawlingly");
+        }
+
+        public static readonly BrawlinglyConverter Singleton = new BrawlinglyConverter();
+    }
+
+    internal class BrookieConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brookie) || t == typeof(Brookie?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Brookie { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Brookie { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brookie");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brookie)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brookie");
+        }
+
+        public static readonly BrookieConverter Singleton = new BrookieConverter();
+    }
+
+    internal class BumboatmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bumboatman) || t == typeof(Bumboatman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Bumboatman { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bumboatman { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Bumboatman { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bumboatman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bumboatman)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bumboatman");
+        }
+
+        public static readonly BumboatmanConverter Singleton = new BumboatmanConverter();
+    }
+
+    internal class CalaveriteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Calaverite) || t == typeof(Calaverite?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Calaverite { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Calaverite { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Calaverite");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Calaverite)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Calaverite");
+        }
+
+        public static readonly CalaveriteConverter Singleton = new CalaveriteConverter();
+    }
+
+    internal class CatallacticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Catallactic) || t == typeof(Catallactic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Catallactic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Catallactic { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Catallactic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Catallactic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Catallactic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Catallactic");
+        }
+
+        public static readonly CatallacticConverter Singleton = new CatallacticConverter();
+    }
+
+    internal class CementalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Cemental) || t == typeof(Cemental?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Cemental { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Cemental { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Cemental { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Cemental");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Cemental)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Cemental");
+        }
+
+        public static readonly CementalConverter Singleton = new CementalConverter();
+    }
+}
diff --git a/head/csharp-records/test/inputs/json/priority/combinations2.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations2.json/default/QuickType.cs
new file mode 100644
index 0000000..21db15d
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations2.json/default/QuickType.cs
@@ -0,0 +1,2668 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("Abranchiata", Required = Required.Always)]
+        public Abranchiata[] Abranchiata { get; set; }
+
+        [JsonProperty("academe", Required = Required.Always)]
+        public Academe[] Academe { get; set; }
+
+        [JsonProperty("acquirable", Required = Required.Always)]
+        public Acquirable[] Acquirable { get; set; }
+
+        [JsonProperty("aerometry", Required = Required.Always)]
+        public Aerometry[] Aerometry { get; set; }
+
+        [JsonProperty("alexin", Required = Required.Always)]
+        public Alexin[] Alexin { get; set; }
+
+        [JsonProperty("alleviate", Required = Required.Always)]
+        public AlleviateElement[] Alleviate { get; set; }
+
+        [JsonProperty("amaas", Required = Required.Always)]
+        public Amaa[] Amaas { get; set; }
+
+        [JsonProperty("ambassage", Required = Required.Always)]
+        public Ambassage[] Ambassage { get; set; }
+
+        [JsonProperty("amphithyron", Required = Required.Always)]
+        public Amphithyron?[] Amphithyron { get; set; }
+
+        [JsonProperty("Andriana", Required = Required.Always)]
+        public string?[] Andriana { get; set; }
+
+        [JsonProperty("ankee", Required = Required.Always)]
+        public AnkeeElement[] Ankee { get; set; }
+
+        [JsonProperty("annihilator", Required = Required.Always)]
+        public Dictionary<string, long?>?[] Annihilator { get; set; }
+
+        [JsonProperty("annulose", Required = Required.AllowNull)]
+        public object Annulose { get; set; }
+
+        [JsonProperty("Ansarie", Required = Required.Always)]
+        public AnsarieElement[] Ansarie { get; set; }
+
+        [JsonProperty("aphasia", Required = Required.Always)]
+        public Aphasia[] Aphasia { get; set; }
+
+        [JsonProperty("asprawl", Required = Required.Always)]
+        public Asprawl[] Asprawl { get; set; }
+
+        [JsonProperty("attractive", Required = Required.Always)]
+        public bool?[] Attractive { get; set; }
+
+        [JsonProperty("barksome", Required = Required.Always)]
+        public Dictionary<string, long> Barksome { get; set; }
+
+        [JsonProperty("bedesman", Required = Required.Always)]
+        public Bedesman[] Bedesman { get; set; }
+
+        [JsonProperty("belard", Required = Required.Always)]
+        public Belard[] Belard { get; set; }
+
+        [JsonProperty("bocking", Required = Required.Always)]
+        public Bocking[] Bocking { get; set; }
+
+        [JsonProperty("brawlingly", Required = Required.Always)]
+        public Brawlingly[] Brawlingly { get; set; }
+
+        [JsonProperty("brookie", Required = Required.Always)]
+        public Brookie[] Brookie { get; set; }
+
+        [JsonProperty("bumboatman", Required = Required.Always)]
+        public Bumboatman[] Bumboatman { get; set; }
+
+        [JsonProperty("bystreet", Required = Required.Always)]
+        public object[] Bystreet { get; set; }
+
+        [JsonProperty("calaverite", Required = Required.Always)]
+        public Calaverite[] Calaverite { get; set; }
+
+        [JsonProperty("catallactic", Required = Required.Always)]
+        public Catallactic[] Catallactic { get; set; }
+
+        [JsonProperty("cemental", Required = Required.Always)]
+        public Cemental[] Cemental { get; set; }
+
+        [JsonProperty("Chytridiaceae", Required = Required.Always)]
+        public ChytridiaceaeElement[] Chytridiaceae { get; set; }
+
+        [JsonProperty("Discordia", Required = Required.Always)]
+        public DiscordiaElement[] Discordia { get; set; }
+
+        [JsonProperty("Endomyces", Required = Required.Always)]
+        public Endomyce[] Endomyces { get; set; }
+
+        [JsonProperty("Epinephelidae", Required = Required.Always)]
+        public Epinephelidae[] Epinephelidae { get; set; }
+
+        [JsonProperty("Eupatorium", Required = Required.Always)]
+        public Eupatorium[] Eupatorium { get; set; }
+
+        [JsonProperty("Gryphosaurus", Required = Required.Always)]
+        public GryphosaurusElement[] Gryphosaurus { get; set; }
+
+        [JsonProperty("Koryak", Required = Required.Always)]
+        public Koryak[] Koryak { get; set; }
+
+        [JsonProperty("Lavinia", Required = Required.Always)]
+        public LaviniaElement[] Lavinia { get; set; }
+
+        [JsonProperty("Oskar", Required = Required.Always)]
+        public OskarElement[] Oskar { get; set; }
+
+        [JsonProperty("Rebecca", Required = Required.Always)]
+        public RebeccaElement[] Rebecca { get; set; }
+
+        [JsonProperty("Rhomboganoidei", Required = Required.Always)]
+        public Rhomboganoidei[] Rhomboganoidei { get; set; }
+
+        [JsonProperty("Rigsmal", Required = Required.Always)]
+        public bool Rigsmal { get; set; }
+
+        [JsonProperty("Ruellia", Required = Required.Always)]
+        public Ruellia[] Ruellia { get; set; }
+
+        [JsonProperty("School", Required = Required.Always)]
+        public School[] School { get; set; }
+
+        [JsonProperty("Shakespearolater", Required = Required.Always)]
+        public Shakespearolater[] Shakespearolater { get; set; }
+
+        [JsonProperty("Svan", Required = Required.Always)]
+        public double[] Svan { get; set; }
+
+        [JsonProperty("Wayao", Required = Required.Always)]
+        public Dictionary<string, double> Wayao { get; set; }
+    }
+
+    public partial record AlleviateClass
+    {
+        [JsonProperty("apriori", Required = Required.AllowNull)]
+        public object Apriori { get; set; }
+
+        [JsonProperty("beggarer", Required = Required.AllowNull)]
+        public object Beggarer { get; set; }
+
+        [JsonProperty("brokenheartedly", Required = Required.AllowNull)]
+        public object Brokenheartedly { get; set; }
+
+        [JsonProperty("debilitation", Required = Required.AllowNull)]
+        public object Debilitation { get; set; }
+
+        [JsonProperty("frike", Required = Required.AllowNull)]
+        public object Frike { get; set; }
+
+        [JsonProperty("gastrolith", Required = Required.AllowNull)]
+        public object Gastrolith { get; set; }
+
+        [JsonProperty("Hulsean", Required = Required.AllowNull)]
+        public object Hulsean { get; set; }
+
+        [JsonProperty("orthocentric", Required = Required.AllowNull)]
+        public object Orthocentric { get; set; }
+
+        [JsonProperty("petaly", Required = Required.AllowNull)]
+        public object Petaly { get; set; }
+
+        [JsonProperty("probudgeting", Required = Required.AllowNull)]
+        public object Probudgeting { get; set; }
+
+        [JsonProperty("reacquire", Required = Required.AllowNull)]
+        public object Reacquire { get; set; }
+
+        [JsonProperty("scow", Required = Required.AllowNull)]
+        public object Scow { get; set; }
+
+        [JsonProperty("shutoff", Required = Required.AllowNull)]
+        public object Shutoff { get; set; }
+
+        [JsonProperty("subcontiguous", Required = Required.AllowNull)]
+        public object Subcontiguous { get; set; }
+
+        [JsonProperty("suffumigate", Required = Required.AllowNull)]
+        public object Suffumigate { get; set; }
+
+        [JsonProperty("transformable", Required = Required.AllowNull)]
+        public object Transformable { get; set; }
+
+        [JsonProperty("uncoroneted", Required = Required.AllowNull)]
+        public object Uncoroneted { get; set; }
+
+        [JsonProperty("unparking", Required = Required.AllowNull)]
+        public object Unparking { get; set; }
+
+        [JsonProperty("unvarnishedness", Required = Required.AllowNull)]
+        public object Unvarnishedness { get; set; }
+
+        [JsonProperty("wherewithal", Required = Required.AllowNull)]
+        public object Wherewithal { get; set; }
+    }
+
+    public partial record Rebecca
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Amphithyron
+    {
+        [JsonProperty("akroasis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Akroasis { get; set; }
+
+        [JsonProperty("antiphonical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Antiphonical { get; set; }
+
+        [JsonProperty("basebred", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Basebred { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("conductometric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conductometric { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ensilation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ensilation { get; set; }
+
+        [JsonProperty("eyebolt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Eyebolt { get; set; }
+
+        [JsonProperty("fistulated", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fistulated { get; set; }
+
+        [JsonProperty("heteropod", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Heteropod { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Juniperus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Juniperus { get; set; }
+
+        [JsonProperty("labyrinthically", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Labyrinthically { get; set; }
+
+        [JsonProperty("martyrization", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Martyrization { get; set; }
+
+        [JsonProperty("mispolicy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mispolicy { get; set; }
+
+        [JsonProperty("multipara", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Multipara { get; set; }
+
+        [JsonProperty("Nazirite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nazirite { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("possessorial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Possessorial { get; set; }
+
+        [JsonProperty("shamed", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shamed { get; set; }
+
+        [JsonProperty("shelfworn", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shelfworn { get; set; }
+
+        [JsonProperty("stagnum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stagnum { get; set; }
+
+        [JsonProperty("Those", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Those { get; set; }
+
+        [JsonProperty("undecimal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undecimal { get; set; }
+    }
+
+    public partial record AnkeeClass
+    {
+        [JsonProperty("Anomoean", Required = Required.AllowNull)]
+        public object Anomoean { get; set; }
+
+        [JsonProperty("barleyhood", Required = Required.AllowNull)]
+        public object Barleyhood { get; set; }
+
+        [JsonProperty("befriender", Required = Required.AllowNull)]
+        public object Befriender { get; set; }
+
+        [JsonProperty("brutishness", Required = Required.AllowNull)]
+        public object Brutishness { get; set; }
+
+        [JsonProperty("cephalalgy", Required = Required.AllowNull)]
+        public object Cephalalgy { get; set; }
+
+        [JsonProperty("cirurgian", Required = Required.AllowNull)]
+        public object Cirurgian { get; set; }
+
+        [JsonProperty("conventionally", Required = Required.AllowNull)]
+        public object Conventionally { get; set; }
+
+        [JsonProperty("jackshay", Required = Required.AllowNull)]
+        public object Jackshay { get; set; }
+
+        [JsonProperty("milammeter", Required = Required.AllowNull)]
+        public object Milammeter { get; set; }
+
+        [JsonProperty("Naja", Required = Required.AllowNull)]
+        public object Naja { get; set; }
+
+        [JsonProperty("ombrological", Required = Required.AllowNull)]
+        public object Ombrological { get; set; }
+
+        [JsonProperty("phonasthenia", Required = Required.AllowNull)]
+        public object Phonasthenia { get; set; }
+
+        [JsonProperty("retrievableness", Required = Required.AllowNull)]
+        public object Retrievableness { get; set; }
+
+        [JsonProperty("snakily", Required = Required.AllowNull)]
+        public object Snakily { get; set; }
+
+        [JsonProperty("swot", Required = Required.AllowNull)]
+        public object Swot { get; set; }
+
+        [JsonProperty("tartlet", Required = Required.AllowNull)]
+        public object Tartlet { get; set; }
+
+        [JsonProperty("thiofuran", Required = Required.AllowNull)]
+        public object Thiofuran { get; set; }
+
+        [JsonProperty("tracheophone", Required = Required.AllowNull)]
+        public object Tracheophone { get; set; }
+
+        [JsonProperty("tuglike", Required = Required.AllowNull)]
+        public object Tuglike { get; set; }
+
+        [JsonProperty("unscratchingly", Required = Required.AllowNull)]
+        public object Unscratchingly { get; set; }
+    }
+
+    public partial record AnsarieClass
+    {
+        [JsonProperty("accension", Required = Required.AllowNull)]
+        public object Accension { get; set; }
+
+        [JsonProperty("Alida", Required = Required.AllowNull)]
+        public object Alida { get; set; }
+
+        [JsonProperty("asteria", Required = Required.AllowNull)]
+        public object Asteria { get; set; }
+
+        [JsonProperty("beriberic", Required = Required.AllowNull)]
+        public object Beriberic { get; set; }
+
+        [JsonProperty("edgebone", Required = Required.AllowNull)]
+        public object Edgebone { get; set; }
+
+        [JsonProperty("gastrodialysis", Required = Required.AllowNull)]
+        public object Gastrodialysis { get; set; }
+
+        [JsonProperty("geographic", Required = Required.AllowNull)]
+        public object Geographic { get; set; }
+
+        [JsonProperty("Ictonyx", Required = Required.AllowNull)]
+        public object Ictonyx { get; set; }
+
+        [JsonProperty("metrocele", Required = Required.AllowNull)]
+        public object Metrocele { get; set; }
+
+        [JsonProperty("misgraft", Required = Required.AllowNull)]
+        public object Misgraft { get; set; }
+
+        [JsonProperty("monteith", Required = Required.AllowNull)]
+        public object Monteith { get; set; }
+
+        [JsonProperty("notcher", Required = Required.AllowNull)]
+        public object Notcher { get; set; }
+
+        [JsonProperty("prorestriction", Required = Required.AllowNull)]
+        public object Prorestriction { get; set; }
+
+        [JsonProperty("Ramist", Required = Required.AllowNull)]
+        public object Ramist { get; set; }
+
+        [JsonProperty("throatlet", Required = Required.AllowNull)]
+        public object Throatlet { get; set; }
+
+        [JsonProperty("unfair", Required = Required.AllowNull)]
+        public object Unfair { get; set; }
+
+        [JsonProperty("unsynonymous", Required = Required.AllowNull)]
+        public object Unsynonymous { get; set; }
+
+        [JsonProperty("water", Required = Required.AllowNull)]
+        public object Water { get; set; }
+
+        [JsonProperty("zestfully", Required = Required.AllowNull)]
+        public object Zestfully { get; set; }
+
+        [JsonProperty("zincic", Required = Required.AllowNull)]
+        public object Zincic { get; set; }
+    }
+
+    public partial record ChytridiaceaeClass
+    {
+        [JsonProperty("Batidaceae", Required = Required.AllowNull)]
+        public object Batidaceae { get; set; }
+
+        [JsonProperty("Brechites", Required = Required.AllowNull)]
+        public object Brechites { get; set; }
+
+        [JsonProperty("codespairer", Required = Required.AllowNull)]
+        public object Codespairer { get; set; }
+
+        [JsonProperty("Emery", Required = Required.AllowNull)]
+        public object Emery { get; set; }
+
+        [JsonProperty("enervative", Required = Required.AllowNull)]
+        public object Enervative { get; set; }
+
+        [JsonProperty("excriminate", Required = Required.AllowNull)]
+        public object Excriminate { get; set; }
+
+        [JsonProperty("goshenite", Required = Required.AllowNull)]
+        public object Goshenite { get; set; }
+
+        [JsonProperty("grime", Required = Required.AllowNull)]
+        public object Grime { get; set; }
+
+        [JsonProperty("gritten", Required = Required.AllowNull)]
+        public object Gritten { get; set; }
+
+        [JsonProperty("hectorly", Required = Required.AllowNull)]
+        public object Hectorly { get; set; }
+
+        [JsonProperty("intermediation", Required = Required.AllowNull)]
+        public object Intermediation { get; set; }
+
+        [JsonProperty("meeterly", Required = Required.AllowNull)]
+        public object Meeterly { get; set; }
+
+        [JsonProperty("Narraganset", Required = Required.AllowNull)]
+        public object Narraganset { get; set; }
+
+        [JsonProperty("onymatic", Required = Required.AllowNull)]
+        public object Onymatic { get; set; }
+
+        [JsonProperty("paddlecock", Required = Required.AllowNull)]
+        public object Paddlecock { get; set; }
+
+        [JsonProperty("thana", Required = Required.AllowNull)]
+        public object Thana { get; set; }
+
+        [JsonProperty("thornily", Required = Required.AllowNull)]
+        public object Thornily { get; set; }
+
+        [JsonProperty("uckia", Required = Required.AllowNull)]
+        public object Uckia { get; set; }
+
+        [JsonProperty("unmettle", Required = Required.AllowNull)]
+        public object Unmettle { get; set; }
+
+        [JsonProperty("vorticellid", Required = Required.AllowNull)]
+        public object Vorticellid { get; set; }
+    }
+
+    public partial record DiscordiaClass
+    {
+        [JsonProperty("Altaic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Altaic { get; set; }
+
+        [JsonProperty("amoristic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amoristic { get; set; }
+
+        [JsonProperty("blennophthalmia", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Blennophthalmia { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disciplinability", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Disciplinability { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("goofer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goofer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("laryngograph", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Laryngograph { get; set; }
+
+        [JsonProperty("leucitis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Leucitis { get; set; }
+
+        [JsonProperty("lymphocyst", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lymphocyst { get; set; }
+
+        [JsonProperty("microcosmology", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Microcosmology { get; set; }
+
+        [JsonProperty("nauseation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nauseation { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("Patarin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Patarin { get; set; }
+
+        [JsonProperty("preliberal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preliberal { get; set; }
+
+        [JsonProperty("prettifier", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Prettifier { get; set; }
+
+        [JsonProperty("rangework", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rangework { get; set; }
+
+        [JsonProperty("redient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Redient { get; set; }
+
+        [JsonProperty("subfusiform", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subfusiform { get; set; }
+
+        [JsonProperty("suicidical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Suicidical { get; set; }
+
+        [JsonProperty("swow", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Swow { get; set; }
+
+        [JsonProperty("wastrel", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wastrel { get; set; }
+
+        [JsonProperty("wingle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wingle { get; set; }
+    }
+
+    public partial record GryphosaurusClass
+    {
+        [JsonProperty("amissibility", Required = Required.AllowNull)]
+        public object Amissibility { get; set; }
+
+        [JsonProperty("Burushaski", Required = Required.AllowNull)]
+        public object Burushaski { get; set; }
+
+        [JsonProperty("citronin", Required = Required.AllowNull)]
+        public object Citronin { get; set; }
+
+        [JsonProperty("coplaintiff", Required = Required.AllowNull)]
+        public object Coplaintiff { get; set; }
+
+        [JsonProperty("disquisitionary", Required = Required.AllowNull)]
+        public object Disquisitionary { get; set; }
+
+        [JsonProperty("enoplan", Required = Required.AllowNull)]
+        public object Enoplan { get; set; }
+
+        [JsonProperty("faintness", Required = Required.AllowNull)]
+        public object Faintness { get; set; }
+
+        [JsonProperty("hebetomy", Required = Required.AllowNull)]
+        public object Hebetomy { get; set; }
+
+        [JsonProperty("islandry", Required = Required.AllowNull)]
+        public object Islandry { get; set; }
+
+        [JsonProperty("lameduck", Required = Required.AllowNull)]
+        public object Lameduck { get; set; }
+
+        [JsonProperty("overbattle", Required = Required.AllowNull)]
+        public object Overbattle { get; set; }
+
+        [JsonProperty("overinterested", Required = Required.AllowNull)]
+        public object Overinterested { get; set; }
+
+        [JsonProperty("phrenologic", Required = Required.AllowNull)]
+        public object Phrenologic { get; set; }
+
+        [JsonProperty("rainband", Required = Required.AllowNull)]
+        public object Rainband { get; set; }
+
+        [JsonProperty("shiningly", Required = Required.AllowNull)]
+        public object Shiningly { get; set; }
+
+        [JsonProperty("stamineous", Required = Required.AllowNull)]
+        public object Stamineous { get; set; }
+
+        [JsonProperty("subscapularis", Required = Required.AllowNull)]
+        public object Subscapularis { get; set; }
+
+        [JsonProperty("Tahami", Required = Required.AllowNull)]
+        public object Tahami { get; set; }
+
+        [JsonProperty("undaubed", Required = Required.AllowNull)]
+        public object Undaubed { get; set; }
+
+        [JsonProperty("underntime", Required = Required.AllowNull)]
+        public object Underntime { get; set; }
+    }
+
+    public partial record LaviniaClass
+    {
+        [JsonProperty("agitable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Agitable { get; set; }
+
+        [JsonProperty("asininity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Asininity { get; set; }
+
+        [JsonProperty("benefiter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Benefiter { get; set; }
+
+        [JsonProperty("bronzelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bronzelike { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cholesteatomatous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cholesteatomatous { get; set; }
+
+        [JsonProperty("deprivement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Deprivement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("flippantness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Flippantness { get; set; }
+
+        [JsonProperty("fogproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fogproof { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("merrymeeting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Merrymeeting { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("overcareful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overcareful { get; set; }
+
+        [JsonProperty("panaris", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Panaris { get; set; }
+
+        [JsonProperty("preacceptance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preacceptance { get; set; }
+
+        [JsonProperty("quinoxaline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quinoxaline { get; set; }
+
+        [JsonProperty("sig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sig { get; set; }
+
+        [JsonProperty("superconfusion", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Superconfusion { get; set; }
+
+        [JsonProperty("Tacana", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tacana { get; set; }
+
+        [JsonProperty("tillotter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tillotter { get; set; }
+
+        [JsonProperty("tranquillize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tranquillize { get; set; }
+
+        [JsonProperty("unquestionable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unquestionable { get; set; }
+
+        [JsonProperty("uproute", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Uproute { get; set; }
+    }
+
+    public partial record OskarClass
+    {
+        [JsonProperty("Acrobates", Required = Required.AllowNull)]
+        public object Acrobates { get; set; }
+
+        [JsonProperty("beanshooter", Required = Required.AllowNull)]
+        public object Beanshooter { get; set; }
+
+        [JsonProperty("bearhound", Required = Required.AllowNull)]
+        public object Bearhound { get; set; }
+
+        [JsonProperty("Cayuga", Required = Required.AllowNull)]
+        public object Cayuga { get; set; }
+
+        [JsonProperty("guarneri", Required = Required.AllowNull)]
+        public object Guarneri { get; set; }
+
+        [JsonProperty("hypochondriacism", Required = Required.AllowNull)]
+        public object Hypochondriacism { get; set; }
+
+        [JsonProperty("indication", Required = Required.AllowNull)]
+        public object Indication { get; set; }
+
+        [JsonProperty("jaculative", Required = Required.AllowNull)]
+        public object Jaculative { get; set; }
+
+        [JsonProperty("nagana", Required = Required.AllowNull)]
+        public object Nagana { get; set; }
+
+        [JsonProperty("Netherlandish", Required = Required.AllowNull)]
+        public object Netherlandish { get; set; }
+
+        [JsonProperty("noctivagous", Required = Required.AllowNull)]
+        public object Noctivagous { get; set; }
+
+        [JsonProperty("nonphysiological", Required = Required.AllowNull)]
+        public object Nonphysiological { get; set; }
+
+        [JsonProperty("praxis", Required = Required.AllowNull)]
+        public object Praxis { get; set; }
+
+        [JsonProperty("provision", Required = Required.AllowNull)]
+        public object Provision { get; set; }
+
+        [JsonProperty("subterhuman", Required = Required.AllowNull)]
+        public object Subterhuman { get; set; }
+
+        [JsonProperty("sunlit", Required = Required.AllowNull)]
+        public object Sunlit { get; set; }
+
+        [JsonProperty("syncraniate", Required = Required.AllowNull)]
+        public object Syncraniate { get; set; }
+
+        [JsonProperty("teachment", Required = Required.AllowNull)]
+        public object Teachment { get; set; }
+
+        [JsonProperty("unmutinous", Required = Required.AllowNull)]
+        public object Unmutinous { get; set; }
+
+        [JsonProperty("unstoppable", Required = Required.AllowNull)]
+        public object Unstoppable { get; set; }
+    }
+
+    public partial struct Abranchiata
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Abranchiata(long Integer) => new Abranchiata { Integer = Integer };
+        public static implicit operator Abranchiata(long[] IntegerArray) => new Abranchiata { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Integer == null;
+    }
+
+    public partial struct Academe
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Academe(long Integer) => new Academe { Integer = Integer };
+        public static implicit operator Academe(long[] IntegerArray) => new Academe { IntegerArray = IntegerArray };
+        public static implicit operator Academe(Dictionary<string, long> IntegerMap) => new Academe { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Acquirable
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public long?[]? UnionArray;
+
+        public static implicit operator Acquirable(Dictionary<string, long> IntegerMap) => new Acquirable { IntegerMap = IntegerMap };
+        public static implicit operator Acquirable(long?[] UnionArray) => new Acquirable { UnionArray = UnionArray };
+    }
+
+    public partial struct Aerometry
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Aerometry(bool Bool) => new Aerometry { Bool = Bool };
+        public static implicit operator Aerometry(double Double) => new Aerometry { Double = Double };
+    }
+
+    public partial struct Alexin
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+
+        public static implicit operator Alexin(bool Bool) => new Alexin { Bool = Bool };
+        public static implicit operator Alexin(long[] IntegerArray) => new Alexin { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AlleviateElement
+    {
+        public AlleviateClass? AlleviateClass;
+        public long?[]? UnionArray;
+
+        public static implicit operator AlleviateElement(AlleviateClass AlleviateClass) => new AlleviateElement { AlleviateClass = AlleviateClass };
+        public static implicit operator AlleviateElement(long?[] UnionArray) => new AlleviateElement { UnionArray = UnionArray };
+    }
+
+    public partial struct Amaa
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Amaa(bool Bool) => new Amaa { Bool = Bool };
+        public static implicit operator Amaa(long Integer) => new Amaa { Integer = Integer };
+        public static implicit operator Amaa(Rebecca Rebecca) => new Amaa { Rebecca = Rebecca };
+    }
+
+    public partial struct Ambassage
+    {
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Ambassage(object[] NullArray) => new Ambassage { NullArray = NullArray };
+        public static implicit operator Ambassage(string String) => new Ambassage { String = String };
+    }
+
+    public partial struct AnkeeElement
+    {
+        public AnkeeClass? AnkeeClass;
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator AnkeeElement(AnkeeClass AnkeeClass) => new AnkeeElement { AnkeeClass = AnkeeClass };
+        public static implicit operator AnkeeElement(long Integer) => new AnkeeElement { Integer = Integer };
+        public static implicit operator AnkeeElement(long[] IntegerArray) => new AnkeeElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AnsarieElement
+    {
+        public AnsarieClass? AnsarieClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator AnsarieElement(AnsarieClass AnsarieClass) => new AnsarieElement { AnsarieClass = AnsarieClass };
+        public static implicit operator AnsarieElement(long[] IntegerArray) => new AnsarieElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && AnsarieClass == null;
+    }
+
+    public partial struct Aphasia
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Aphasia(long Integer) => new Aphasia { Integer = Integer };
+        public static implicit operator Aphasia(long[] IntegerArray) => new Aphasia { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Asprawl
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Asprawl(double Double) => new Asprawl { Double = Double };
+        public static implicit operator Asprawl(string String) => new Asprawl { String = String };
+    }
+
+    public partial struct Bedesman
+    {
+        public bool? Bool;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Bedesman(bool Bool) => new Bedesman { Bool = Bool };
+        public static implicit operator Bedesman(double Double) => new Bedesman { Double = Double };
+        public static implicit operator Bedesman(string String) => new Bedesman { String = String };
+    }
+
+    public partial struct Belard
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Belard(double Double) => new Belard { Double = Double };
+        public static implicit operator Belard(long[] IntegerArray) => new Belard { IntegerArray = IntegerArray };
+        public static implicit operator Belard(Rebecca Rebecca) => new Belard { Rebecca = Rebecca };
+    }
+
+    public partial struct Bocking
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Bocking(bool Bool) => new Bocking { Bool = Bool };
+        public static implicit operator Bocking(long[] IntegerArray) => new Bocking { IntegerArray = IntegerArray };
+        public static implicit operator Bocking(Dictionary<string, long> IntegerMap) => new Bocking { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Brawlingly
+    {
+        public object[]? NullArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Brawlingly(object[] NullArray) => new Brawlingly { NullArray = NullArray };
+        public static implicit operator Brawlingly(Dictionary<string, long?> UnionMap) => new Brawlingly { UnionMap = UnionMap };
+    }
+
+    public partial struct Brookie
+    {
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Brookie(long[] IntegerArray) => new Brookie { IntegerArray = IntegerArray };
+        public static implicit operator Brookie(Rebecca Rebecca) => new Brookie { Rebecca = Rebecca };
+    }
+
+    public partial struct Bumboatman
+    {
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Bumboatman(object[] NullArray) => new Bumboatman { NullArray = NullArray };
+        public static implicit operator Bumboatman(string String) => new Bumboatman { String = String };
+        public bool IsNull => NullArray == null && String == null;
+    }
+
+    public partial struct Calaverite
+    {
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Calaverite(long[] IntegerArray) => new Calaverite { IntegerArray = IntegerArray };
+        public static implicit operator Calaverite(string String) => new Calaverite { String = String };
+    }
+
+    public partial struct Catallactic
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Catallactic(bool Bool) => new Catallactic { Bool = Bool };
+        public static implicit operator Catallactic(Dictionary<string, long> IntegerMap) => new Catallactic { IntegerMap = IntegerMap };
+        public static implicit operator Catallactic(object[] NullArray) => new Catallactic { NullArray = NullArray };
+    }
+
+    public partial struct Cemental
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Cemental(double Double) => new Cemental { Double = Double };
+        public static implicit operator Cemental(long[] IntegerArray) => new Cemental { IntegerArray = IntegerArray };
+        public static implicit operator Cemental(Dictionary<string, long> IntegerMap) => new Cemental { IntegerMap = IntegerMap };
+    }
+
+    public partial struct ChytridiaceaeElement
+    {
+        public bool? Bool;
+        public ChytridiaceaeClass? ChytridiaceaeClass;
+
+        public static implicit operator ChytridiaceaeElement(bool Bool) => new ChytridiaceaeElement { Bool = Bool };
+        public static implicit operator ChytridiaceaeElement(ChytridiaceaeClass ChytridiaceaeClass) => new ChytridiaceaeElement { ChytridiaceaeClass = ChytridiaceaeClass };
+        public bool IsNull => Bool == null && ChytridiaceaeClass == null;
+    }
+
+    public partial struct DiscordiaElement
+    {
+        public DiscordiaClass? DiscordiaClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator DiscordiaElement(DiscordiaClass DiscordiaClass) => new DiscordiaElement { DiscordiaClass = DiscordiaClass };
+        public static implicit operator DiscordiaElement(long[] IntegerArray) => new DiscordiaElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Endomyce
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Endomyce(long Integer) => new Endomyce { Integer = Integer };
+        public static implicit operator Endomyce(string String) => new Endomyce { String = String };
+    }
+
+    public partial struct Epinephelidae
+    {
+        public bool? Bool;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Epinephelidae(bool Bool) => new Epinephelidae { Bool = Bool };
+        public static implicit operator Epinephelidae(long Integer) => new Epinephelidae { Integer = Integer };
+        public static implicit operator Epinephelidae(string String) => new Epinephelidae { String = String };
+    }
+
+    public partial struct Eupatorium
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Eupatorium(Dictionary<string, long> IntegerMap) => new Eupatorium { IntegerMap = IntegerMap };
+        public static implicit operator Eupatorium(object[] NullArray) => new Eupatorium { NullArray = NullArray };
+    }
+
+    public partial struct GryphosaurusElement
+    {
+        public GryphosaurusClass? GryphosaurusClass;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator GryphosaurusElement(GryphosaurusClass GryphosaurusClass) => new GryphosaurusElement { GryphosaurusClass = GryphosaurusClass };
+        public static implicit operator GryphosaurusElement(long[] IntegerArray) => new GryphosaurusElement { IntegerArray = IntegerArray };
+        public static implicit operator GryphosaurusElement(string String) => new GryphosaurusElement { String = String };
+    }
+
+    public partial struct Koryak
+    {
+        public string? String;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Koryak(string String) => new Koryak { String = String };
+        public static implicit operator Koryak(Dictionary<string, long?> UnionMap) => new Koryak { UnionMap = UnionMap };
+    }
+
+    public partial struct LaviniaElement
+    {
+        public LaviniaClass? LaviniaClass;
+        public string? String;
+
+        public static implicit operator LaviniaElement(LaviniaClass LaviniaClass) => new LaviniaElement { LaviniaClass = LaviniaClass };
+        public static implicit operator LaviniaElement(string String) => new LaviniaElement { String = String };
+    }
+
+    public partial struct OskarElement
+    {
+        public long[]? IntegerArray;
+        public OskarClass? OskarClass;
+
+        public static implicit operator OskarElement(long[] IntegerArray) => new OskarElement { IntegerArray = IntegerArray };
+        public static implicit operator OskarElement(OskarClass OskarClass) => new OskarElement { OskarClass = OskarClass };
+    }
+
+    public partial struct RebeccaElement
+    {
+        public long? Integer;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator RebeccaElement(long Integer) => new RebeccaElement { Integer = Integer };
+        public static implicit operator RebeccaElement(Rebecca Rebecca) => new RebeccaElement { Rebecca = Rebecca };
+        public static implicit operator RebeccaElement(string String) => new RebeccaElement { String = String };
+    }
+
+    public partial struct Rhomboganoidei
+    {
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Rhomboganoidei(long[] IntegerArray) => new Rhomboganoidei { IntegerArray = IntegerArray };
+        public static implicit operator Rhomboganoidei(Rebecca Rebecca) => new Rhomboganoidei { Rebecca = Rebecca };
+        public static implicit operator Rhomboganoidei(string String) => new Rhomboganoidei { String = String };
+    }
+
+    public partial struct Ruellia
+    {
+        public bool? Bool;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Ruellia(bool Bool) => new Ruellia { Bool = Bool };
+        public static implicit operator Ruellia(Rebecca Rebecca) => new Ruellia { Rebecca = Rebecca };
+        public static implicit operator Ruellia(string String) => new Ruellia { String = String };
+    }
+
+    public partial struct School
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator School(long Integer) => new School { Integer = Integer };
+        public static implicit operator School(Dictionary<string, long> IntegerMap) => new School { IntegerMap = IntegerMap };
+        public bool IsNull => Integer == null && IntegerMap == null;
+    }
+
+    public partial struct Shakespearolater
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Shakespearolater(double Double) => new Shakespearolater { Double = Double };
+        public static implicit operator Shakespearolater(long[] IntegerArray) => new Shakespearolater { IntegerArray = IntegerArray };
+        public static implicit operator Shakespearolater(string String) => new Shakespearolater { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                AbranchiataConverter.Singleton,
+                AnsarieElementConverter.Singleton,
+                ChytridiaceaeElementConverter.Singleton,
+                DiscordiaElementConverter.Singleton,
+                EndomyceConverter.Singleton,
+                EpinephelidaeConverter.Singleton,
+                EupatoriumConverter.Singleton,
+                GryphosaurusElementConverter.Singleton,
+                KoryakConverter.Singleton,
+                LaviniaElementConverter.Singleton,
+                OskarElementConverter.Singleton,
+                RebeccaElementConverter.Singleton,
+                RhomboganoideiConverter.Singleton,
+                RuelliaConverter.Singleton,
+                SchoolConverter.Singleton,
+                ShakespearolaterConverter.Singleton,
+                AcademeConverter.Singleton,
+                AcquirableConverter.Singleton,
+                AerometryConverter.Singleton,
+                AlexinConverter.Singleton,
+                AlleviateElementConverter.Singleton,
+                AmaaConverter.Singleton,
+                AmbassageConverter.Singleton,
+                AnkeeElementConverter.Singleton,
+                AphasiaConverter.Singleton,
+                AsprawlConverter.Singleton,
+                BedesmanConverter.Singleton,
+                BelardConverter.Singleton,
+                BockingConverter.Singleton,
+                BrawlinglyConverter.Singleton,
+                BrookieConverter.Singleton,
+                BumboatmanConverter.Singleton,
+                CalaveriteConverter.Singleton,
+                CatallacticConverter.Singleton,
+                CementalConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class AbranchiataConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Abranchiata) || t == typeof(Abranchiata?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Abranchiata { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Abranchiata { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Abranchiata { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Abranchiata");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Abranchiata)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Abranchiata");
+        }
+
+        public static readonly AbranchiataConverter Singleton = new AbranchiataConverter();
+    }
+
+    internal class AnsarieElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnsarieElement) || t == typeof(AnsarieElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new AnsarieElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnsarieClass>(reader);
+                    return new AnsarieElement { AnsarieClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnsarieElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnsarieElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnsarieElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnsarieClass != null)
+            {
+                serializer.Serialize(writer, value.AnsarieClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnsarieElement");
+        }
+
+        public static readonly AnsarieElementConverter Singleton = new AnsarieElementConverter();
+    }
+
+    internal class ChytridiaceaeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChytridiaceaeElement) || t == typeof(ChytridiaceaeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new ChytridiaceaeElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new ChytridiaceaeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChytridiaceaeClass>(reader);
+                    return new ChytridiaceaeElement { ChytridiaceaeClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChytridiaceaeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChytridiaceaeElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.ChytridiaceaeClass != null)
+            {
+                serializer.Serialize(writer, value.ChytridiaceaeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChytridiaceaeElement");
+        }
+
+        public static readonly ChytridiaceaeElementConverter Singleton = new ChytridiaceaeElementConverter();
+    }
+
+    internal class DiscordiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiscordiaElement) || t == typeof(DiscordiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiscordiaClass>(reader);
+                    return new DiscordiaElement { DiscordiaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiscordiaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiscordiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiscordiaElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiscordiaClass != null)
+            {
+                serializer.Serialize(writer, value.DiscordiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiscordiaElement");
+        }
+
+        public static readonly DiscordiaElementConverter Singleton = new DiscordiaElementConverter();
+    }
+
+    internal class EndomyceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Endomyce) || t == typeof(Endomyce?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Endomyce { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Endomyce { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Endomyce");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Endomyce)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Endomyce");
+        }
+
+        public static readonly EndomyceConverter Singleton = new EndomyceConverter();
+    }
+
+    internal class EpinephelidaeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epinephelidae) || t == typeof(Epinephelidae?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Epinephelidae { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Epinephelidae { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Epinephelidae { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Epinephelidae");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epinephelidae)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epinephelidae");
+        }
+
+        public static readonly EpinephelidaeConverter Singleton = new EpinephelidaeConverter();
+    }
+
+    internal class EupatoriumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eupatorium) || t == typeof(Eupatorium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eupatorium { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Eupatorium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Eupatorium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eupatorium)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eupatorium");
+        }
+
+        public static readonly EupatoriumConverter Singleton = new EupatoriumConverter();
+    }
+
+    internal class GryphosaurusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GryphosaurusElement) || t == typeof(GryphosaurusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new GryphosaurusElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<GryphosaurusClass>(reader);
+                    return new GryphosaurusElement { GryphosaurusClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new GryphosaurusElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type GryphosaurusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (GryphosaurusElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.GryphosaurusClass != null)
+            {
+                serializer.Serialize(writer, value.GryphosaurusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type GryphosaurusElement");
+        }
+
+        public static readonly GryphosaurusElementConverter Singleton = new GryphosaurusElementConverter();
+    }
+
+    internal class KoryakConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Koryak) || t == typeof(Koryak?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Koryak { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Koryak { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Koryak");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Koryak)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Koryak");
+        }
+
+        public static readonly KoryakConverter Singleton = new KoryakConverter();
+    }
+
+    internal class LaviniaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LaviniaElement) || t == typeof(LaviniaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LaviniaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LaviniaClass>(reader);
+                    return new LaviniaElement { LaviniaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LaviniaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LaviniaElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LaviniaClass != null)
+            {
+                serializer.Serialize(writer, value.LaviniaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LaviniaElement");
+        }
+
+        public static readonly LaviniaElementConverter Singleton = new LaviniaElementConverter();
+    }
+
+    internal class OskarElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OskarElement) || t == typeof(OskarElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OskarClass>(reader);
+                    return new OskarElement { OskarClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new OskarElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OskarElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OskarElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.OskarClass != null)
+            {
+                serializer.Serialize(writer, value.OskarClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OskarElement");
+        }
+
+        public static readonly OskarElementConverter Singleton = new OskarElementConverter();
+    }
+
+    internal class RebeccaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RebeccaElement) || t == typeof(RebeccaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new RebeccaElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new RebeccaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new RebeccaElement { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type RebeccaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RebeccaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type RebeccaElement");
+        }
+
+        public static readonly RebeccaElementConverter Singleton = new RebeccaElementConverter();
+    }
+
+    internal class RhomboganoideiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rhomboganoidei) || t == typeof(Rhomboganoidei?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Rhomboganoidei { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Rhomboganoidei { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rhomboganoidei { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rhomboganoidei");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rhomboganoidei)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rhomboganoidei");
+        }
+
+        public static readonly RhomboganoideiConverter Singleton = new RhomboganoideiConverter();
+    }
+
+    internal class RuelliaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ruellia) || t == typeof(Ruellia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Ruellia { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ruellia { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Ruellia { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Ruellia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ruellia)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ruellia");
+        }
+
+        public static readonly RuelliaConverter Singleton = new RuelliaConverter();
+    }
+
+    internal class SchoolConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(School) || t == typeof(School?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new School { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new School { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new School { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type School");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (School)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type School");
+        }
+
+        public static readonly SchoolConverter Singleton = new SchoolConverter();
+    }
+
+    internal class ShakespearolaterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shakespearolater) || t == typeof(Shakespearolater?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Shakespearolater { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Shakespearolater { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Shakespearolater { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shakespearolater");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shakespearolater)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shakespearolater");
+        }
+
+        public static readonly ShakespearolaterConverter Singleton = new ShakespearolaterConverter();
+    }
+
+    internal class AcademeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Academe) || t == typeof(Academe?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Academe { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Academe { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Academe { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Academe");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Academe)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Academe");
+        }
+
+        public static readonly AcademeConverter Singleton = new AcademeConverter();
+    }
+
+    internal class AcquirableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Acquirable) || t == typeof(Acquirable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Acquirable { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Acquirable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Acquirable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Acquirable)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Acquirable");
+        }
+
+        public static readonly AcquirableConverter Singleton = new AcquirableConverter();
+    }
+
+    internal class AerometryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aerometry) || t == typeof(Aerometry?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Aerometry { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Aerometry { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Aerometry");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aerometry)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aerometry");
+        }
+
+        public static readonly AerometryConverter Singleton = new AerometryConverter();
+    }
+
+    internal class AlexinConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Alexin) || t == typeof(Alexin?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Alexin { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Alexin { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Alexin");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Alexin)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Alexin");
+        }
+
+        public static readonly AlexinConverter Singleton = new AlexinConverter();
+    }
+
+    internal class AlleviateElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AlleviateElement) || t == typeof(AlleviateElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AlleviateClass>(reader);
+                    return new AlleviateElement { AlleviateClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new AlleviateElement { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AlleviateElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AlleviateElement)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.AlleviateClass != null)
+            {
+                serializer.Serialize(writer, value.AlleviateClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AlleviateElement");
+        }
+
+        public static readonly AlleviateElementConverter Singleton = new AlleviateElementConverter();
+    }
+
+    internal class AmaaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Amaa) || t == typeof(Amaa?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Amaa { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Amaa { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Amaa { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Amaa");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Amaa)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Amaa");
+        }
+
+        public static readonly AmaaConverter Singleton = new AmaaConverter();
+    }
+
+    internal class AmbassageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ambassage) || t == typeof(Ambassage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ambassage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Ambassage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Ambassage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ambassage)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ambassage");
+        }
+
+        public static readonly AmbassageConverter Singleton = new AmbassageConverter();
+    }
+
+    internal class AnkeeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnkeeElement) || t == typeof(AnkeeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new AnkeeElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnkeeClass>(reader);
+                    return new AnkeeElement { AnkeeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnkeeElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnkeeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnkeeElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnkeeClass != null)
+            {
+                serializer.Serialize(writer, value.AnkeeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnkeeElement");
+        }
+
+        public static readonly AnkeeElementConverter Singleton = new AnkeeElementConverter();
+    }
+
+    internal class AphasiaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aphasia) || t == typeof(Aphasia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Aphasia { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Aphasia { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Aphasia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aphasia)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aphasia");
+        }
+
+        public static readonly AphasiaConverter Singleton = new AphasiaConverter();
+    }
+
+    internal class AsprawlConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Asprawl) || t == typeof(Asprawl?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Asprawl { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Asprawl { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Asprawl");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Asprawl)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Asprawl");
+        }
+
+        public static readonly AsprawlConverter Singleton = new AsprawlConverter();
+    }
+
+    internal class BedesmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bedesman) || t == typeof(Bedesman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Bedesman { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bedesman { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bedesman { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Bedesman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bedesman)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bedesman");
+        }
+
+        public static readonly BedesmanConverter Singleton = new BedesmanConverter();
+    }
+
+    internal class BelardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Belard) || t == typeof(Belard?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Belard { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Belard { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Belard { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Belard");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Belard)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Belard");
+        }
+
+        public static readonly BelardConverter Singleton = new BelardConverter();
+    }
+
+    internal class BockingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bocking) || t == typeof(Bocking?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bocking { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Bocking { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Bocking { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bocking");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bocking)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bocking");
+        }
+
+        public static readonly BockingConverter Singleton = new BockingConverter();
+    }
+
+    internal class BrawlinglyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brawlingly) || t == typeof(Brawlingly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Brawlingly { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Brawlingly { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brawlingly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brawlingly)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brawlingly");
+        }
+
+        public static readonly BrawlinglyConverter Singleton = new BrawlinglyConverter();
+    }
+
+    internal class BrookieConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brookie) || t == typeof(Brookie?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Brookie { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Brookie { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brookie");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brookie)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brookie");
+        }
+
+        public static readonly BrookieConverter Singleton = new BrookieConverter();
+    }
+
+    internal class BumboatmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bumboatman) || t == typeof(Bumboatman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Bumboatman { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bumboatman { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Bumboatman { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bumboatman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bumboatman)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bumboatman");
+        }
+
+        public static readonly BumboatmanConverter Singleton = new BumboatmanConverter();
+    }
+
+    internal class CalaveriteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Calaverite) || t == typeof(Calaverite?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Calaverite { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Calaverite { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Calaverite");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Calaverite)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Calaverite");
+        }
+
+        public static readonly CalaveriteConverter Singleton = new CalaveriteConverter();
+    }
+
+    internal class CatallacticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Catallactic) || t == typeof(Catallactic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Catallactic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Catallactic { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Catallactic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Catallactic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Catallactic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Catallactic");
+        }
+
+        public static readonly CatallacticConverter Singleton = new CatallacticConverter();
+    }
+
+    internal class CementalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Cemental) || t == typeof(Cemental?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Cemental { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Cemental { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Cemental { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Cemental");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Cemental)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Cemental");
+        }
+
+        public static readonly CementalConverter Singleton = new CementalConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations2.json/density-dense--3bfb4c22cfd0/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations2.json/density-dense--3bfb4c22cfd0/QuickType.cs
new file mode 100644
index 0000000..995d35a
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations2.json/density-dense--3bfb4c22cfd0/QuickType.cs
@@ -0,0 +1,2192 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+    using J = Newtonsoft.Json.JsonPropertyAttribute;
+    using R = Newtonsoft.Json.Required;
+    using N = Newtonsoft.Json.NullValueHandling;
+
+    public partial record TopLevel
+    {
+        [J("Abranchiata", Required = R.Always)]      public Abranchiata[] Abranchiata { get; set; }               
+        [J("academe", Required = R.Always)]          public Academe[] Academe { get; set; }                       
+        [J("acquirable", Required = R.Always)]       public Acquirable[] Acquirable { get; set; }                 
+        [J("aerometry", Required = R.Always)]        public Aerometry[] Aerometry { get; set; }                   
+        [J("alexin", Required = R.Always)]           public Alexin[] Alexin { get; set; }                         
+        [J("alleviate", Required = R.Always)]        public AlleviateElement[] Alleviate { get; set; }            
+        [J("amaas", Required = R.Always)]            public Amaa[] Amaas { get; set; }                            
+        [J("ambassage", Required = R.Always)]        public Ambassage[] Ambassage { get; set; }                   
+        [J("amphithyron", Required = R.Always)]      public Amphithyron?[] Amphithyron { get; set; }              
+        [J("Andriana", Required = R.Always)]         public string?[] Andriana { get; set; }                      
+        [J("ankee", Required = R.Always)]            public AnkeeElement[] Ankee { get; set; }                    
+        [J("annihilator", Required = R.Always)]      public Dictionary<string, long?>?[] Annihilator { get; set; }
+        [J("annulose", Required = R.AllowNull)]      public object Annulose { get; set; }                         
+        [J("Ansarie", Required = R.Always)]          public AnsarieElement[] Ansarie { get; set; }                
+        [J("aphasia", Required = R.Always)]          public Aphasia[] Aphasia { get; set; }                       
+        [J("asprawl", Required = R.Always)]          public Asprawl[] Asprawl { get; set; }                       
+        [J("attractive", Required = R.Always)]       public bool?[] Attractive { get; set; }                      
+        [J("barksome", Required = R.Always)]         public Dictionary<string, long> Barksome { get; set; }       
+        [J("bedesman", Required = R.Always)]         public Bedesman[] Bedesman { get; set; }                     
+        [J("belard", Required = R.Always)]           public Belard[] Belard { get; set; }                         
+        [J("bocking", Required = R.Always)]          public Bocking[] Bocking { get; set; }                       
+        [J("brawlingly", Required = R.Always)]       public Brawlingly[] Brawlingly { get; set; }                 
+        [J("brookie", Required = R.Always)]          public Brookie[] Brookie { get; set; }                       
+        [J("bumboatman", Required = R.Always)]       public Bumboatman[] Bumboatman { get; set; }                 
+        [J("bystreet", Required = R.Always)]         public object[] Bystreet { get; set; }                       
+        [J("calaverite", Required = R.Always)]       public Calaverite[] Calaverite { get; set; }                 
+        [J("catallactic", Required = R.Always)]      public Catallactic[] Catallactic { get; set; }               
+        [J("cemental", Required = R.Always)]         public Cemental[] Cemental { get; set; }                     
+        [J("Chytridiaceae", Required = R.Always)]    public ChytridiaceaeElement[] Chytridiaceae { get; set; }    
+        [J("Discordia", Required = R.Always)]        public DiscordiaElement[] Discordia { get; set; }            
+        [J("Endomyces", Required = R.Always)]        public Endomyce[] Endomyces { get; set; }                    
+        [J("Epinephelidae", Required = R.Always)]    public Epinephelidae[] Epinephelidae { get; set; }           
+        [J("Eupatorium", Required = R.Always)]       public Eupatorium[] Eupatorium { get; set; }                 
+        [J("Gryphosaurus", Required = R.Always)]     public GryphosaurusElement[] Gryphosaurus { get; set; }      
+        [J("Koryak", Required = R.Always)]           public Koryak[] Koryak { get; set; }                         
+        [J("Lavinia", Required = R.Always)]          public LaviniaElement[] Lavinia { get; set; }                
+        [J("Oskar", Required = R.Always)]            public OskarElement[] Oskar { get; set; }                    
+        [J("Rebecca", Required = R.Always)]          public RebeccaElement[] Rebecca { get; set; }                
+        [J("Rhomboganoidei", Required = R.Always)]   public Rhomboganoidei[] Rhomboganoidei { get; set; }         
+        [J("Rigsmal", Required = R.Always)]          public bool Rigsmal { get; set; }                            
+        [J("Ruellia", Required = R.Always)]          public Ruellia[] Ruellia { get; set; }                       
+        [J("School", Required = R.Always)]           public School[] School { get; set; }                         
+        [J("Shakespearolater", Required = R.Always)] public Shakespearolater[] Shakespearolater { get; set; }     
+        [J("Svan", Required = R.Always)]             public double[] Svan { get; set; }                           
+        [J("Wayao", Required = R.Always)]            public Dictionary<string, double> Wayao { get; set; }        
+    }
+
+    public partial record AlleviateClass
+    {
+        [J("apriori", Required = R.AllowNull)]         public object Apriori { get; set; }        
+        [J("beggarer", Required = R.AllowNull)]        public object Beggarer { get; set; }       
+        [J("brokenheartedly", Required = R.AllowNull)] public object Brokenheartedly { get; set; }
+        [J("debilitation", Required = R.AllowNull)]    public object Debilitation { get; set; }   
+        [J("frike", Required = R.AllowNull)]           public object Frike { get; set; }          
+        [J("gastrolith", Required = R.AllowNull)]      public object Gastrolith { get; set; }     
+        [J("Hulsean", Required = R.AllowNull)]         public object Hulsean { get; set; }        
+        [J("orthocentric", Required = R.AllowNull)]    public object Orthocentric { get; set; }   
+        [J("petaly", Required = R.AllowNull)]          public object Petaly { get; set; }         
+        [J("probudgeting", Required = R.AllowNull)]    public object Probudgeting { get; set; }   
+        [J("reacquire", Required = R.AllowNull)]       public object Reacquire { get; set; }      
+        [J("scow", Required = R.AllowNull)]            public object Scow { get; set; }           
+        [J("shutoff", Required = R.AllowNull)]         public object Shutoff { get; set; }        
+        [J("subcontiguous", Required = R.AllowNull)]   public object Subcontiguous { get; set; }  
+        [J("suffumigate", Required = R.AllowNull)]     public object Suffumigate { get; set; }    
+        [J("transformable", Required = R.AllowNull)]   public object Transformable { get; set; }  
+        [J("uncoroneted", Required = R.AllowNull)]     public object Uncoroneted { get; set; }    
+        [J("unparking", Required = R.AllowNull)]       public object Unparking { get; set; }      
+        [J("unvarnishedness", Required = R.AllowNull)] public object Unvarnishedness { get; set; }
+        [J("wherewithal", Required = R.AllowNull)]     public object Wherewithal { get; set; }    
+    }
+
+    public partial record Rebecca
+    {
+        [J("catharticalness", Required = R.Always)] public double Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.Always)]    public long Chirotherium { get; set; }     
+        [J("disdiapason", Required = R.Always)]     public string Disdiapason { get; set; }    
+        [J("homocerc", Required = R.Always)]        public bool Homocerc { get; set; }         
+        [J("nonbookish", Required = R.AllowNull)]   public object Nonbookish { get; set; }     
+    }
+
+    public partial record Amphithyron
+    {
+        [J("akroasis", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Akroasis { get; set; }         
+        [J("antiphonical", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Antiphonical { get; set; }     
+        [J("basebred", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Basebred { get; set; }         
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }     
+        [J("conductometric", Required = R.DisallowNull, NullValueHandling = N.Ignore)]  public long? Conductometric { get; set; }   
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }    
+        [J("ensilation", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Ensilation { get; set; }       
+        [J("eyebolt", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Eyebolt { get; set; }          
+        [J("fistulated", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Fistulated { get; set; }       
+        [J("heteropod", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Heteropod { get; set; }        
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }         
+        [J("Juniperus", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Juniperus { get; set; }        
+        [J("labyrinthically", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public long? Labyrinthically { get; set; }  
+        [J("martyrization", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Martyrization { get; set; }    
+        [J("mispolicy", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Mispolicy { get; set; }        
+        [J("multipara", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Multipara { get; set; }        
+        [J("Nazirite", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Nazirite { get; set; }         
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }     
+        [J("possessorial", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Possessorial { get; set; }     
+        [J("shamed", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Shamed { get; set; }           
+        [J("shelfworn", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Shelfworn { get; set; }        
+        [J("stagnum", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Stagnum { get; set; }          
+        [J("Those", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Those { get; set; }            
+        [J("undecimal", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Undecimal { get; set; }        
+    }
+
+    public partial record AnkeeClass
+    {
+        [J("Anomoean", Required = R.AllowNull)]        public object Anomoean { get; set; }       
+        [J("barleyhood", Required = R.AllowNull)]      public object Barleyhood { get; set; }     
+        [J("befriender", Required = R.AllowNull)]      public object Befriender { get; set; }     
+        [J("brutishness", Required = R.AllowNull)]     public object Brutishness { get; set; }    
+        [J("cephalalgy", Required = R.AllowNull)]      public object Cephalalgy { get; set; }     
+        [J("cirurgian", Required = R.AllowNull)]       public object Cirurgian { get; set; }      
+        [J("conventionally", Required = R.AllowNull)]  public object Conventionally { get; set; } 
+        [J("jackshay", Required = R.AllowNull)]        public object Jackshay { get; set; }       
+        [J("milammeter", Required = R.AllowNull)]      public object Milammeter { get; set; }     
+        [J("Naja", Required = R.AllowNull)]            public object Naja { get; set; }           
+        [J("ombrological", Required = R.AllowNull)]    public object Ombrological { get; set; }   
+        [J("phonasthenia", Required = R.AllowNull)]    public object Phonasthenia { get; set; }   
+        [J("retrievableness", Required = R.AllowNull)] public object Retrievableness { get; set; }
+        [J("snakily", Required = R.AllowNull)]         public object Snakily { get; set; }        
+        [J("swot", Required = R.AllowNull)]            public object Swot { get; set; }           
+        [J("tartlet", Required = R.AllowNull)]         public object Tartlet { get; set; }        
+        [J("thiofuran", Required = R.AllowNull)]       public object Thiofuran { get; set; }      
+        [J("tracheophone", Required = R.AllowNull)]    public object Tracheophone { get; set; }   
+        [J("tuglike", Required = R.AllowNull)]         public object Tuglike { get; set; }        
+        [J("unscratchingly", Required = R.AllowNull)]  public object Unscratchingly { get; set; } 
+    }
+
+    public partial record AnsarieClass
+    {
+        [J("accension", Required = R.AllowNull)]      public object Accension { get; set; }     
+        [J("Alida", Required = R.AllowNull)]          public object Alida { get; set; }         
+        [J("asteria", Required = R.AllowNull)]        public object Asteria { get; set; }       
+        [J("beriberic", Required = R.AllowNull)]      public object Beriberic { get; set; }     
+        [J("edgebone", Required = R.AllowNull)]       public object Edgebone { get; set; }      
+        [J("gastrodialysis", Required = R.AllowNull)] public object Gastrodialysis { get; set; }
+        [J("geographic", Required = R.AllowNull)]     public object Geographic { get; set; }    
+        [J("Ictonyx", Required = R.AllowNull)]        public object Ictonyx { get; set; }       
+        [J("metrocele", Required = R.AllowNull)]      public object Metrocele { get; set; }     
+        [J("misgraft", Required = R.AllowNull)]       public object Misgraft { get; set; }      
+        [J("monteith", Required = R.AllowNull)]       public object Monteith { get; set; }      
+        [J("notcher", Required = R.AllowNull)]        public object Notcher { get; set; }       
+        [J("prorestriction", Required = R.AllowNull)] public object Prorestriction { get; set; }
+        [J("Ramist", Required = R.AllowNull)]         public object Ramist { get; set; }        
+        [J("throatlet", Required = R.AllowNull)]      public object Throatlet { get; set; }     
+        [J("unfair", Required = R.AllowNull)]         public object Unfair { get; set; }        
+        [J("unsynonymous", Required = R.AllowNull)]   public object Unsynonymous { get; set; }  
+        [J("water", Required = R.AllowNull)]          public object Water { get; set; }         
+        [J("zestfully", Required = R.AllowNull)]      public object Zestfully { get; set; }     
+        [J("zincic", Required = R.AllowNull)]         public object Zincic { get; set; }        
+    }
+
+    public partial record ChytridiaceaeClass
+    {
+        [J("Batidaceae", Required = R.AllowNull)]     public object Batidaceae { get; set; }    
+        [J("Brechites", Required = R.AllowNull)]      public object Brechites { get; set; }     
+        [J("codespairer", Required = R.AllowNull)]    public object Codespairer { get; set; }   
+        [J("Emery", Required = R.AllowNull)]          public object Emery { get; set; }         
+        [J("enervative", Required = R.AllowNull)]     public object Enervative { get; set; }    
+        [J("excriminate", Required = R.AllowNull)]    public object Excriminate { get; set; }   
+        [J("goshenite", Required = R.AllowNull)]      public object Goshenite { get; set; }     
+        [J("grime", Required = R.AllowNull)]          public object Grime { get; set; }         
+        [J("gritten", Required = R.AllowNull)]        public object Gritten { get; set; }       
+        [J("hectorly", Required = R.AllowNull)]       public object Hectorly { get; set; }      
+        [J("intermediation", Required = R.AllowNull)] public object Intermediation { get; set; }
+        [J("meeterly", Required = R.AllowNull)]       public object Meeterly { get; set; }      
+        [J("Narraganset", Required = R.AllowNull)]    public object Narraganset { get; set; }   
+        [J("onymatic", Required = R.AllowNull)]       public object Onymatic { get; set; }      
+        [J("paddlecock", Required = R.AllowNull)]     public object Paddlecock { get; set; }    
+        [J("thana", Required = R.AllowNull)]          public object Thana { get; set; }         
+        [J("thornily", Required = R.AllowNull)]       public object Thornily { get; set; }      
+        [J("uckia", Required = R.AllowNull)]          public object Uckia { get; set; }         
+        [J("unmettle", Required = R.AllowNull)]       public object Unmettle { get; set; }      
+        [J("vorticellid", Required = R.AllowNull)]    public object Vorticellid { get; set; }   
+    }
+
+    public partial record DiscordiaClass
+    {
+        [J("Altaic", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Altaic { get; set; }           
+        [J("amoristic", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Amoristic { get; set; }        
+        [J("blennophthalmia", Required = R.DisallowNull, NullValueHandling = N.Ignore)]  public long? Blennophthalmia { get; set; }  
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]  public double? Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Chirotherium { get; set; }     
+        [J("disciplinability", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public long? Disciplinability { get; set; } 
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public string? Disdiapason { get; set; }    
+        [J("goofer", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Goofer { get; set; }           
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public bool? Homocerc { get; set; }         
+        [J("laryngograph", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Laryngograph { get; set; }     
+        [J("leucitis", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Leucitis { get; set; }         
+        [J("lymphocyst", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Lymphocyst { get; set; }       
+        [J("microcosmology", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Microcosmology { get; set; }   
+        [J("nauseation", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Nauseation { get; set; }       
+        [J("nonbookish")]                                                                public object? Nonbookish { get; set; }     
+        [J("Patarin", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Patarin { get; set; }          
+        [J("preliberal", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Preliberal { get; set; }       
+        [J("prettifier", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Prettifier { get; set; }       
+        [J("rangework", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Rangework { get; set; }        
+        [J("redient", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Redient { get; set; }          
+        [J("subfusiform", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Subfusiform { get; set; }      
+        [J("suicidical", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Suicidical { get; set; }       
+        [J("swow", Required = R.DisallowNull, NullValueHandling = N.Ignore)]             public long? Swow { get; set; }             
+        [J("wastrel", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Wastrel { get; set; }          
+        [J("wingle", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Wingle { get; set; }           
+    }
+
+    public partial record GryphosaurusClass
+    {
+        [J("amissibility", Required = R.AllowNull)]    public object Amissibility { get; set; }   
+        [J("Burushaski", Required = R.AllowNull)]      public object Burushaski { get; set; }     
+        [J("citronin", Required = R.AllowNull)]        public object Citronin { get; set; }       
+        [J("coplaintiff", Required = R.AllowNull)]     public object Coplaintiff { get; set; }    
+        [J("disquisitionary", Required = R.AllowNull)] public object Disquisitionary { get; set; }
+        [J("enoplan", Required = R.AllowNull)]         public object Enoplan { get; set; }        
+        [J("faintness", Required = R.AllowNull)]       public object Faintness { get; set; }      
+        [J("hebetomy", Required = R.AllowNull)]        public object Hebetomy { get; set; }       
+        [J("islandry", Required = R.AllowNull)]        public object Islandry { get; set; }       
+        [J("lameduck", Required = R.AllowNull)]        public object Lameduck { get; set; }       
+        [J("overbattle", Required = R.AllowNull)]      public object Overbattle { get; set; }     
+        [J("overinterested", Required = R.AllowNull)]  public object Overinterested { get; set; } 
+        [J("phrenologic", Required = R.AllowNull)]     public object Phrenologic { get; set; }    
+        [J("rainband", Required = R.AllowNull)]        public object Rainband { get; set; }       
+        [J("shiningly", Required = R.AllowNull)]       public object Shiningly { get; set; }      
+        [J("stamineous", Required = R.AllowNull)]      public object Stamineous { get; set; }     
+        [J("subscapularis", Required = R.AllowNull)]   public object Subscapularis { get; set; }  
+        [J("Tahami", Required = R.AllowNull)]          public object Tahami { get; set; }         
+        [J("undaubed", Required = R.AllowNull)]        public object Undaubed { get; set; }       
+        [J("underntime", Required = R.AllowNull)]      public object Underntime { get; set; }     
+    }
+
+    public partial record LaviniaClass
+    {
+        [J("agitable", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Agitable { get; set; }         
+        [J("asininity", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Asininity { get; set; }        
+        [J("benefiter", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Benefiter { get; set; }        
+        [J("bronzelike", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Bronzelike { get; set; }       
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public double? Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Chirotherium { get; set; }     
+        [J("cholesteatomatous", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public long? Cholesteatomatous { get; set; }
+        [J("deprivement", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Deprivement { get; set; }      
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public string? Disdiapason { get; set; }    
+        [J("flippantness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Flippantness { get; set; }     
+        [J("fogproof", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Fogproof { get; set; }         
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public bool? Homocerc { get; set; }         
+        [J("merrymeeting", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Merrymeeting { get; set; }     
+        [J("nonbookish")]                                                                 public object? Nonbookish { get; set; }     
+        [J("overcareful", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Overcareful { get; set; }      
+        [J("panaris", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Panaris { get; set; }          
+        [J("preacceptance", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Preacceptance { get; set; }    
+        [J("quinoxaline", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Quinoxaline { get; set; }      
+        [J("sig", Required = R.DisallowNull, NullValueHandling = N.Ignore)]               public long? Sig { get; set; }              
+        [J("superconfusion", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Superconfusion { get; set; }   
+        [J("Tacana", Required = R.DisallowNull, NullValueHandling = N.Ignore)]            public long? Tacana { get; set; }           
+        [J("tillotter", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Tillotter { get; set; }        
+        [J("tranquillize", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Tranquillize { get; set; }     
+        [J("unquestionable", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Unquestionable { get; set; }   
+        [J("uproute", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Uproute { get; set; }          
+    }
+
+    public partial record OskarClass
+    {
+        [J("Acrobates", Required = R.AllowNull)]        public object Acrobates { get; set; }       
+        [J("beanshooter", Required = R.AllowNull)]      public object Beanshooter { get; set; }     
+        [J("bearhound", Required = R.AllowNull)]        public object Bearhound { get; set; }       
+        [J("Cayuga", Required = R.AllowNull)]           public object Cayuga { get; set; }          
+        [J("guarneri", Required = R.AllowNull)]         public object Guarneri { get; set; }        
+        [J("hypochondriacism", Required = R.AllowNull)] public object Hypochondriacism { get; set; }
+        [J("indication", Required = R.AllowNull)]       public object Indication { get; set; }      
+        [J("jaculative", Required = R.AllowNull)]       public object Jaculative { get; set; }      
+        [J("nagana", Required = R.AllowNull)]           public object Nagana { get; set; }          
+        [J("Netherlandish", Required = R.AllowNull)]    public object Netherlandish { get; set; }   
+        [J("noctivagous", Required = R.AllowNull)]      public object Noctivagous { get; set; }     
+        [J("nonphysiological", Required = R.AllowNull)] public object Nonphysiological { get; set; }
+        [J("praxis", Required = R.AllowNull)]           public object Praxis { get; set; }          
+        [J("provision", Required = R.AllowNull)]        public object Provision { get; set; }       
+        [J("subterhuman", Required = R.AllowNull)]      public object Subterhuman { get; set; }     
+        [J("sunlit", Required = R.AllowNull)]           public object Sunlit { get; set; }          
+        [J("syncraniate", Required = R.AllowNull)]      public object Syncraniate { get; set; }     
+        [J("teachment", Required = R.AllowNull)]        public object Teachment { get; set; }       
+        [J("unmutinous", Required = R.AllowNull)]       public object Unmutinous { get; set; }      
+        [J("unstoppable", Required = R.AllowNull)]      public object Unstoppable { get; set; }     
+    }
+
+    public partial struct Abranchiata
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Abranchiata(long Integer) => new Abranchiata { Integer = Integer };
+        public static implicit operator Abranchiata(long[] IntegerArray) => new Abranchiata { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Integer == null;
+    }
+
+    public partial struct Academe
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Academe(long Integer) => new Academe { Integer = Integer };
+        public static implicit operator Academe(long[] IntegerArray) => new Academe { IntegerArray = IntegerArray };
+        public static implicit operator Academe(Dictionary<string, long> IntegerMap) => new Academe { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Acquirable
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public long?[]? UnionArray;
+
+        public static implicit operator Acquirable(Dictionary<string, long> IntegerMap) => new Acquirable { IntegerMap = IntegerMap };
+        public static implicit operator Acquirable(long?[] UnionArray) => new Acquirable { UnionArray = UnionArray };
+    }
+
+    public partial struct Aerometry
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Aerometry(bool Bool) => new Aerometry { Bool = Bool };
+        public static implicit operator Aerometry(double Double) => new Aerometry { Double = Double };
+    }
+
+    public partial struct Alexin
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+
+        public static implicit operator Alexin(bool Bool) => new Alexin { Bool = Bool };
+        public static implicit operator Alexin(long[] IntegerArray) => new Alexin { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AlleviateElement
+    {
+        public AlleviateClass? AlleviateClass;
+        public long?[]? UnionArray;
+
+        public static implicit operator AlleviateElement(AlleviateClass AlleviateClass) => new AlleviateElement { AlleviateClass = AlleviateClass };
+        public static implicit operator AlleviateElement(long?[] UnionArray) => new AlleviateElement { UnionArray = UnionArray };
+    }
+
+    public partial struct Amaa
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Amaa(bool Bool) => new Amaa { Bool = Bool };
+        public static implicit operator Amaa(long Integer) => new Amaa { Integer = Integer };
+        public static implicit operator Amaa(Rebecca Rebecca) => new Amaa { Rebecca = Rebecca };
+    }
+
+    public partial struct Ambassage
+    {
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Ambassage(object[] NullArray) => new Ambassage { NullArray = NullArray };
+        public static implicit operator Ambassage(string String) => new Ambassage { String = String };
+    }
+
+    public partial struct AnkeeElement
+    {
+        public AnkeeClass? AnkeeClass;
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator AnkeeElement(AnkeeClass AnkeeClass) => new AnkeeElement { AnkeeClass = AnkeeClass };
+        public static implicit operator AnkeeElement(long Integer) => new AnkeeElement { Integer = Integer };
+        public static implicit operator AnkeeElement(long[] IntegerArray) => new AnkeeElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AnsarieElement
+    {
+        public AnsarieClass? AnsarieClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator AnsarieElement(AnsarieClass AnsarieClass) => new AnsarieElement { AnsarieClass = AnsarieClass };
+        public static implicit operator AnsarieElement(long[] IntegerArray) => new AnsarieElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && AnsarieClass == null;
+    }
+
+    public partial struct Aphasia
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Aphasia(long Integer) => new Aphasia { Integer = Integer };
+        public static implicit operator Aphasia(long[] IntegerArray) => new Aphasia { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Asprawl
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Asprawl(double Double) => new Asprawl { Double = Double };
+        public static implicit operator Asprawl(string String) => new Asprawl { String = String };
+    }
+
+    public partial struct Bedesman
+    {
+        public bool? Bool;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Bedesman(bool Bool) => new Bedesman { Bool = Bool };
+        public static implicit operator Bedesman(double Double) => new Bedesman { Double = Double };
+        public static implicit operator Bedesman(string String) => new Bedesman { String = String };
+    }
+
+    public partial struct Belard
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Belard(double Double) => new Belard { Double = Double };
+        public static implicit operator Belard(long[] IntegerArray) => new Belard { IntegerArray = IntegerArray };
+        public static implicit operator Belard(Rebecca Rebecca) => new Belard { Rebecca = Rebecca };
+    }
+
+    public partial struct Bocking
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Bocking(bool Bool) => new Bocking { Bool = Bool };
+        public static implicit operator Bocking(long[] IntegerArray) => new Bocking { IntegerArray = IntegerArray };
+        public static implicit operator Bocking(Dictionary<string, long> IntegerMap) => new Bocking { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Brawlingly
+    {
+        public object[]? NullArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Brawlingly(object[] NullArray) => new Brawlingly { NullArray = NullArray };
+        public static implicit operator Brawlingly(Dictionary<string, long?> UnionMap) => new Brawlingly { UnionMap = UnionMap };
+    }
+
+    public partial struct Brookie
+    {
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Brookie(long[] IntegerArray) => new Brookie { IntegerArray = IntegerArray };
+        public static implicit operator Brookie(Rebecca Rebecca) => new Brookie { Rebecca = Rebecca };
+    }
+
+    public partial struct Bumboatman
+    {
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Bumboatman(object[] NullArray) => new Bumboatman { NullArray = NullArray };
+        public static implicit operator Bumboatman(string String) => new Bumboatman { String = String };
+        public bool IsNull => NullArray == null && String == null;
+    }
+
+    public partial struct Calaverite
+    {
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Calaverite(long[] IntegerArray) => new Calaverite { IntegerArray = IntegerArray };
+        public static implicit operator Calaverite(string String) => new Calaverite { String = String };
+    }
+
+    public partial struct Catallactic
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Catallactic(bool Bool) => new Catallactic { Bool = Bool };
+        public static implicit operator Catallactic(Dictionary<string, long> IntegerMap) => new Catallactic { IntegerMap = IntegerMap };
+        public static implicit operator Catallactic(object[] NullArray) => new Catallactic { NullArray = NullArray };
+    }
+
+    public partial struct Cemental
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Cemental(double Double) => new Cemental { Double = Double };
+        public static implicit operator Cemental(long[] IntegerArray) => new Cemental { IntegerArray = IntegerArray };
+        public static implicit operator Cemental(Dictionary<string, long> IntegerMap) => new Cemental { IntegerMap = IntegerMap };
+    }
+
+    public partial struct ChytridiaceaeElement
+    {
+        public bool? Bool;
+        public ChytridiaceaeClass? ChytridiaceaeClass;
+
+        public static implicit operator ChytridiaceaeElement(bool Bool) => new ChytridiaceaeElement { Bool = Bool };
+        public static implicit operator ChytridiaceaeElement(ChytridiaceaeClass ChytridiaceaeClass) => new ChytridiaceaeElement { ChytridiaceaeClass = ChytridiaceaeClass };
+        public bool IsNull => Bool == null && ChytridiaceaeClass == null;
+    }
+
+    public partial struct DiscordiaElement
+    {
+        public DiscordiaClass? DiscordiaClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator DiscordiaElement(DiscordiaClass DiscordiaClass) => new DiscordiaElement { DiscordiaClass = DiscordiaClass };
+        public static implicit operator DiscordiaElement(long[] IntegerArray) => new DiscordiaElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Endomyce
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Endomyce(long Integer) => new Endomyce { Integer = Integer };
+        public static implicit operator Endomyce(string String) => new Endomyce { String = String };
+    }
+
+    public partial struct Epinephelidae
+    {
+        public bool? Bool;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Epinephelidae(bool Bool) => new Epinephelidae { Bool = Bool };
+        public static implicit operator Epinephelidae(long Integer) => new Epinephelidae { Integer = Integer };
+        public static implicit operator Epinephelidae(string String) => new Epinephelidae { String = String };
+    }
+
+    public partial struct Eupatorium
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Eupatorium(Dictionary<string, long> IntegerMap) => new Eupatorium { IntegerMap = IntegerMap };
+        public static implicit operator Eupatorium(object[] NullArray) => new Eupatorium { NullArray = NullArray };
+    }
+
+    public partial struct GryphosaurusElement
+    {
+        public GryphosaurusClass? GryphosaurusClass;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator GryphosaurusElement(GryphosaurusClass GryphosaurusClass) => new GryphosaurusElement { GryphosaurusClass = GryphosaurusClass };
+        public static implicit operator GryphosaurusElement(long[] IntegerArray) => new GryphosaurusElement { IntegerArray = IntegerArray };
+        public static implicit operator GryphosaurusElement(string String) => new GryphosaurusElement { String = String };
+    }
+
+    public partial struct Koryak
+    {
+        public string? String;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Koryak(string String) => new Koryak { String = String };
+        public static implicit operator Koryak(Dictionary<string, long?> UnionMap) => new Koryak { UnionMap = UnionMap };
+    }
+
+    public partial struct LaviniaElement
+    {
+        public LaviniaClass? LaviniaClass;
+        public string? String;
+
+        public static implicit operator LaviniaElement(LaviniaClass LaviniaClass) => new LaviniaElement { LaviniaClass = LaviniaClass };
+        public static implicit operator LaviniaElement(string String) => new LaviniaElement { String = String };
+    }
+
+    public partial struct OskarElement
+    {
+        public long[]? IntegerArray;
+        public OskarClass? OskarClass;
+
+        public static implicit operator OskarElement(long[] IntegerArray) => new OskarElement { IntegerArray = IntegerArray };
+        public static implicit operator OskarElement(OskarClass OskarClass) => new OskarElement { OskarClass = OskarClass };
+    }
+
+    public partial struct RebeccaElement
+    {
+        public long? Integer;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator RebeccaElement(long Integer) => new RebeccaElement { Integer = Integer };
+        public static implicit operator RebeccaElement(Rebecca Rebecca) => new RebeccaElement { Rebecca = Rebecca };
+        public static implicit operator RebeccaElement(string String) => new RebeccaElement { String = String };
+    }
+
+    public partial struct Rhomboganoidei
+    {
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Rhomboganoidei(long[] IntegerArray) => new Rhomboganoidei { IntegerArray = IntegerArray };
+        public static implicit operator Rhomboganoidei(Rebecca Rebecca) => new Rhomboganoidei { Rebecca = Rebecca };
+        public static implicit operator Rhomboganoidei(string String) => new Rhomboganoidei { String = String };
+    }
+
+    public partial struct Ruellia
+    {
+        public bool? Bool;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Ruellia(bool Bool) => new Ruellia { Bool = Bool };
+        public static implicit operator Ruellia(Rebecca Rebecca) => new Ruellia { Rebecca = Rebecca };
+        public static implicit operator Ruellia(string String) => new Ruellia { String = String };
+    }
+
+    public partial struct School
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator School(long Integer) => new School { Integer = Integer };
+        public static implicit operator School(Dictionary<string, long> IntegerMap) => new School { IntegerMap = IntegerMap };
+        public bool IsNull => Integer == null && IntegerMap == null;
+    }
+
+    public partial struct Shakespearolater
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Shakespearolater(double Double) => new Shakespearolater { Double = Double };
+        public static implicit operator Shakespearolater(long[] IntegerArray) => new Shakespearolater { IntegerArray = IntegerArray };
+        public static implicit operator Shakespearolater(string String) => new Shakespearolater { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                AbranchiataConverter.Singleton,
+                AnsarieElementConverter.Singleton,
+                ChytridiaceaeElementConverter.Singleton,
+                DiscordiaElementConverter.Singleton,
+                EndomyceConverter.Singleton,
+                EpinephelidaeConverter.Singleton,
+                EupatoriumConverter.Singleton,
+                GryphosaurusElementConverter.Singleton,
+                KoryakConverter.Singleton,
+                LaviniaElementConverter.Singleton,
+                OskarElementConverter.Singleton,
+                RebeccaElementConverter.Singleton,
+                RhomboganoideiConverter.Singleton,
+                RuelliaConverter.Singleton,
+                SchoolConverter.Singleton,
+                ShakespearolaterConverter.Singleton,
+                AcademeConverter.Singleton,
+                AcquirableConverter.Singleton,
+                AerometryConverter.Singleton,
+                AlexinConverter.Singleton,
+                AlleviateElementConverter.Singleton,
+                AmaaConverter.Singleton,
+                AmbassageConverter.Singleton,
+                AnkeeElementConverter.Singleton,
+                AphasiaConverter.Singleton,
+                AsprawlConverter.Singleton,
+                BedesmanConverter.Singleton,
+                BelardConverter.Singleton,
+                BockingConverter.Singleton,
+                BrawlinglyConverter.Singleton,
+                BrookieConverter.Singleton,
+                BumboatmanConverter.Singleton,
+                CalaveriteConverter.Singleton,
+                CatallacticConverter.Singleton,
+                CementalConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class AbranchiataConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Abranchiata) || t == typeof(Abranchiata?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Abranchiata { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Abranchiata { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Abranchiata { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Abranchiata");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Abranchiata)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Abranchiata");
+        }
+
+        public static readonly AbranchiataConverter Singleton = new AbranchiataConverter();
+    }
+
+    internal class AnsarieElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnsarieElement) || t == typeof(AnsarieElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new AnsarieElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnsarieClass>(reader);
+                    return new AnsarieElement { AnsarieClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnsarieElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnsarieElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnsarieElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnsarieClass != null)
+            {
+                serializer.Serialize(writer, value.AnsarieClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnsarieElement");
+        }
+
+        public static readonly AnsarieElementConverter Singleton = new AnsarieElementConverter();
+    }
+
+    internal class ChytridiaceaeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChytridiaceaeElement) || t == typeof(ChytridiaceaeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new ChytridiaceaeElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new ChytridiaceaeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChytridiaceaeClass>(reader);
+                    return new ChytridiaceaeElement { ChytridiaceaeClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChytridiaceaeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChytridiaceaeElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.ChytridiaceaeClass != null)
+            {
+                serializer.Serialize(writer, value.ChytridiaceaeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChytridiaceaeElement");
+        }
+
+        public static readonly ChytridiaceaeElementConverter Singleton = new ChytridiaceaeElementConverter();
+    }
+
+    internal class DiscordiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiscordiaElement) || t == typeof(DiscordiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiscordiaClass>(reader);
+                    return new DiscordiaElement { DiscordiaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiscordiaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiscordiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiscordiaElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiscordiaClass != null)
+            {
+                serializer.Serialize(writer, value.DiscordiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiscordiaElement");
+        }
+
+        public static readonly DiscordiaElementConverter Singleton = new DiscordiaElementConverter();
+    }
+
+    internal class EndomyceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Endomyce) || t == typeof(Endomyce?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Endomyce { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Endomyce { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Endomyce");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Endomyce)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Endomyce");
+        }
+
+        public static readonly EndomyceConverter Singleton = new EndomyceConverter();
+    }
+
+    internal class EpinephelidaeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epinephelidae) || t == typeof(Epinephelidae?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Epinephelidae { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Epinephelidae { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Epinephelidae { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Epinephelidae");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epinephelidae)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epinephelidae");
+        }
+
+        public static readonly EpinephelidaeConverter Singleton = new EpinephelidaeConverter();
+    }
+
+    internal class EupatoriumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eupatorium) || t == typeof(Eupatorium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eupatorium { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Eupatorium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Eupatorium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eupatorium)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eupatorium");
+        }
+
+        public static readonly EupatoriumConverter Singleton = new EupatoriumConverter();
+    }
+
+    internal class GryphosaurusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GryphosaurusElement) || t == typeof(GryphosaurusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new GryphosaurusElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<GryphosaurusClass>(reader);
+                    return new GryphosaurusElement { GryphosaurusClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new GryphosaurusElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type GryphosaurusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (GryphosaurusElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.GryphosaurusClass != null)
+            {
+                serializer.Serialize(writer, value.GryphosaurusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type GryphosaurusElement");
+        }
+
+        public static readonly GryphosaurusElementConverter Singleton = new GryphosaurusElementConverter();
+    }
+
+    internal class KoryakConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Koryak) || t == typeof(Koryak?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Koryak { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Koryak { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Koryak");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Koryak)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Koryak");
+        }
+
+        public static readonly KoryakConverter Singleton = new KoryakConverter();
+    }
+
+    internal class LaviniaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LaviniaElement) || t == typeof(LaviniaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LaviniaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LaviniaClass>(reader);
+                    return new LaviniaElement { LaviniaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LaviniaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LaviniaElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LaviniaClass != null)
+            {
+                serializer.Serialize(writer, value.LaviniaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LaviniaElement");
+        }
+
+        public static readonly LaviniaElementConverter Singleton = new LaviniaElementConverter();
+    }
+
+    internal class OskarElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OskarElement) || t == typeof(OskarElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OskarClass>(reader);
+                    return new OskarElement { OskarClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new OskarElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OskarElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OskarElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.OskarClass != null)
+            {
+                serializer.Serialize(writer, value.OskarClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OskarElement");
+        }
+
+        public static readonly OskarElementConverter Singleton = new OskarElementConverter();
+    }
+
+    internal class RebeccaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RebeccaElement) || t == typeof(RebeccaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new RebeccaElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new RebeccaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new RebeccaElement { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type RebeccaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RebeccaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type RebeccaElement");
+        }
+
+        public static readonly RebeccaElementConverter Singleton = new RebeccaElementConverter();
+    }
+
+    internal class RhomboganoideiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rhomboganoidei) || t == typeof(Rhomboganoidei?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Rhomboganoidei { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Rhomboganoidei { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rhomboganoidei { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rhomboganoidei");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rhomboganoidei)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rhomboganoidei");
+        }
+
+        public static readonly RhomboganoideiConverter Singleton = new RhomboganoideiConverter();
+    }
+
+    internal class RuelliaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ruellia) || t == typeof(Ruellia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Ruellia { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ruellia { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Ruellia { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Ruellia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ruellia)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ruellia");
+        }
+
+        public static readonly RuelliaConverter Singleton = new RuelliaConverter();
+    }
+
+    internal class SchoolConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(School) || t == typeof(School?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new School { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new School { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new School { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type School");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (School)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type School");
+        }
+
+        public static readonly SchoolConverter Singleton = new SchoolConverter();
+    }
+
+    internal class ShakespearolaterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shakespearolater) || t == typeof(Shakespearolater?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Shakespearolater { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Shakespearolater { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Shakespearolater { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shakespearolater");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shakespearolater)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shakespearolater");
+        }
+
+        public static readonly ShakespearolaterConverter Singleton = new ShakespearolaterConverter();
+    }
+
+    internal class AcademeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Academe) || t == typeof(Academe?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Academe { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Academe { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Academe { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Academe");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Academe)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Academe");
+        }
+
+        public static readonly AcademeConverter Singleton = new AcademeConverter();
+    }
+
+    internal class AcquirableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Acquirable) || t == typeof(Acquirable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Acquirable { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Acquirable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Acquirable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Acquirable)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Acquirable");
+        }
+
+        public static readonly AcquirableConverter Singleton = new AcquirableConverter();
+    }
+
+    internal class AerometryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aerometry) || t == typeof(Aerometry?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Aerometry { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Aerometry { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Aerometry");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aerometry)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aerometry");
+        }
+
+        public static readonly AerometryConverter Singleton = new AerometryConverter();
+    }
+
+    internal class AlexinConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Alexin) || t == typeof(Alexin?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Alexin { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Alexin { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Alexin");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Alexin)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Alexin");
+        }
+
+        public static readonly AlexinConverter Singleton = new AlexinConverter();
+    }
+
+    internal class AlleviateElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AlleviateElement) || t == typeof(AlleviateElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AlleviateClass>(reader);
+                    return new AlleviateElement { AlleviateClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new AlleviateElement { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AlleviateElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AlleviateElement)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.AlleviateClass != null)
+            {
+                serializer.Serialize(writer, value.AlleviateClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AlleviateElement");
+        }
+
+        public static readonly AlleviateElementConverter Singleton = new AlleviateElementConverter();
+    }
+
+    internal class AmaaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Amaa) || t == typeof(Amaa?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Amaa { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Amaa { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Amaa { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Amaa");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Amaa)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Amaa");
+        }
+
+        public static readonly AmaaConverter Singleton = new AmaaConverter();
+    }
+
+    internal class AmbassageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ambassage) || t == typeof(Ambassage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ambassage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Ambassage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Ambassage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ambassage)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ambassage");
+        }
+
+        public static readonly AmbassageConverter Singleton = new AmbassageConverter();
+    }
+
+    internal class AnkeeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnkeeElement) || t == typeof(AnkeeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new AnkeeElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnkeeClass>(reader);
+                    return new AnkeeElement { AnkeeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnkeeElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnkeeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnkeeElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnkeeClass != null)
+            {
+                serializer.Serialize(writer, value.AnkeeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnkeeElement");
+        }
+
+        public static readonly AnkeeElementConverter Singleton = new AnkeeElementConverter();
+    }
+
+    internal class AphasiaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aphasia) || t == typeof(Aphasia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Aphasia { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Aphasia { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Aphasia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aphasia)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aphasia");
+        }
+
+        public static readonly AphasiaConverter Singleton = new AphasiaConverter();
+    }
+
+    internal class AsprawlConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Asprawl) || t == typeof(Asprawl?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Asprawl { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Asprawl { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Asprawl");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Asprawl)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Asprawl");
+        }
+
+        public static readonly AsprawlConverter Singleton = new AsprawlConverter();
+    }
+
+    internal class BedesmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bedesman) || t == typeof(Bedesman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Bedesman { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bedesman { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bedesman { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Bedesman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bedesman)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bedesman");
+        }
+
+        public static readonly BedesmanConverter Singleton = new BedesmanConverter();
+    }
+
+    internal class BelardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Belard) || t == typeof(Belard?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Belard { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Belard { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Belard { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Belard");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Belard)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Belard");
+        }
+
+        public static readonly BelardConverter Singleton = new BelardConverter();
+    }
+
+    internal class BockingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bocking) || t == typeof(Bocking?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bocking { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Bocking { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Bocking { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bocking");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bocking)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bocking");
+        }
+
+        public static readonly BockingConverter Singleton = new BockingConverter();
+    }
+
+    internal class BrawlinglyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brawlingly) || t == typeof(Brawlingly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Brawlingly { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Brawlingly { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brawlingly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brawlingly)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brawlingly");
+        }
+
+        public static readonly BrawlinglyConverter Singleton = new BrawlinglyConverter();
+    }
+
+    internal class BrookieConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brookie) || t == typeof(Brookie?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Brookie { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Brookie { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brookie");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brookie)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brookie");
+        }
+
+        public static readonly BrookieConverter Singleton = new BrookieConverter();
+    }
+
+    internal class BumboatmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bumboatman) || t == typeof(Bumboatman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Bumboatman { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bumboatman { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Bumboatman { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bumboatman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bumboatman)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bumboatman");
+        }
+
+        public static readonly BumboatmanConverter Singleton = new BumboatmanConverter();
+    }
+
+    internal class CalaveriteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Calaverite) || t == typeof(Calaverite?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Calaverite { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Calaverite { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Calaverite");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Calaverite)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Calaverite");
+        }
+
+        public static readonly CalaveriteConverter Singleton = new CalaveriteConverter();
+    }
+
+    internal class CatallacticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Catallactic) || t == typeof(Catallactic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Catallactic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Catallactic { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Catallactic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Catallactic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Catallactic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Catallactic");
+        }
+
+        public static readonly CatallacticConverter Singleton = new CatallacticConverter();
+    }
+
+    internal class CementalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Cemental) || t == typeof(Cemental?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Cemental { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Cemental { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Cemental { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Cemental");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Cemental)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Cemental");
+        }
+
+        public static readonly CementalConverter Singleton = new CementalConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations2.json/number-type-decimal--20a123601b5a/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations2.json/number-type-decimal--20a123601b5a/QuickType.cs
new file mode 100644
index 0000000..000a2d0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations2.json/number-type-decimal--20a123601b5a/QuickType.cs
@@ -0,0 +1,2668 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("Abranchiata", Required = Required.Always)]
+        public Abranchiata[] Abranchiata { get; set; }
+
+        [JsonProperty("academe", Required = Required.Always)]
+        public Academe[] Academe { get; set; }
+
+        [JsonProperty("acquirable", Required = Required.Always)]
+        public Acquirable[] Acquirable { get; set; }
+
+        [JsonProperty("aerometry", Required = Required.Always)]
+        public Aerometry[] Aerometry { get; set; }
+
+        [JsonProperty("alexin", Required = Required.Always)]
+        public Alexin[] Alexin { get; set; }
+
+        [JsonProperty("alleviate", Required = Required.Always)]
+        public AlleviateElement[] Alleviate { get; set; }
+
+        [JsonProperty("amaas", Required = Required.Always)]
+        public Amaa[] Amaas { get; set; }
+
+        [JsonProperty("ambassage", Required = Required.Always)]
+        public Ambassage[] Ambassage { get; set; }
+
+        [JsonProperty("amphithyron", Required = Required.Always)]
+        public Amphithyron?[] Amphithyron { get; set; }
+
+        [JsonProperty("Andriana", Required = Required.Always)]
+        public string?[] Andriana { get; set; }
+
+        [JsonProperty("ankee", Required = Required.Always)]
+        public AnkeeElement[] Ankee { get; set; }
+
+        [JsonProperty("annihilator", Required = Required.Always)]
+        public Dictionary<string, long?>?[] Annihilator { get; set; }
+
+        [JsonProperty("annulose", Required = Required.AllowNull)]
+        public object Annulose { get; set; }
+
+        [JsonProperty("Ansarie", Required = Required.Always)]
+        public AnsarieElement[] Ansarie { get; set; }
+
+        [JsonProperty("aphasia", Required = Required.Always)]
+        public Aphasia[] Aphasia { get; set; }
+
+        [JsonProperty("asprawl", Required = Required.Always)]
+        public Asprawl[] Asprawl { get; set; }
+
+        [JsonProperty("attractive", Required = Required.Always)]
+        public bool?[] Attractive { get; set; }
+
+        [JsonProperty("barksome", Required = Required.Always)]
+        public Dictionary<string, long> Barksome { get; set; }
+
+        [JsonProperty("bedesman", Required = Required.Always)]
+        public Bedesman[] Bedesman { get; set; }
+
+        [JsonProperty("belard", Required = Required.Always)]
+        public Belard[] Belard { get; set; }
+
+        [JsonProperty("bocking", Required = Required.Always)]
+        public Bocking[] Bocking { get; set; }
+
+        [JsonProperty("brawlingly", Required = Required.Always)]
+        public Brawlingly[] Brawlingly { get; set; }
+
+        [JsonProperty("brookie", Required = Required.Always)]
+        public Brookie[] Brookie { get; set; }
+
+        [JsonProperty("bumboatman", Required = Required.Always)]
+        public Bumboatman[] Bumboatman { get; set; }
+
+        [JsonProperty("bystreet", Required = Required.Always)]
+        public object[] Bystreet { get; set; }
+
+        [JsonProperty("calaverite", Required = Required.Always)]
+        public Calaverite[] Calaverite { get; set; }
+
+        [JsonProperty("catallactic", Required = Required.Always)]
+        public Catallactic[] Catallactic { get; set; }
+
+        [JsonProperty("cemental", Required = Required.Always)]
+        public Cemental[] Cemental { get; set; }
+
+        [JsonProperty("Chytridiaceae", Required = Required.Always)]
+        public ChytridiaceaeElement[] Chytridiaceae { get; set; }
+
+        [JsonProperty("Discordia", Required = Required.Always)]
+        public DiscordiaElement[] Discordia { get; set; }
+
+        [JsonProperty("Endomyces", Required = Required.Always)]
+        public Endomyce[] Endomyces { get; set; }
+
+        [JsonProperty("Epinephelidae", Required = Required.Always)]
+        public Epinephelidae[] Epinephelidae { get; set; }
+
+        [JsonProperty("Eupatorium", Required = Required.Always)]
+        public Eupatorium[] Eupatorium { get; set; }
+
+        [JsonProperty("Gryphosaurus", Required = Required.Always)]
+        public GryphosaurusElement[] Gryphosaurus { get; set; }
+
+        [JsonProperty("Koryak", Required = Required.Always)]
+        public Koryak[] Koryak { get; set; }
+
+        [JsonProperty("Lavinia", Required = Required.Always)]
+        public LaviniaElement[] Lavinia { get; set; }
+
+        [JsonProperty("Oskar", Required = Required.Always)]
+        public OskarElement[] Oskar { get; set; }
+
+        [JsonProperty("Rebecca", Required = Required.Always)]
+        public RebeccaElement[] Rebecca { get; set; }
+
+        [JsonProperty("Rhomboganoidei", Required = Required.Always)]
+        public Rhomboganoidei[] Rhomboganoidei { get; set; }
+
+        [JsonProperty("Rigsmal", Required = Required.Always)]
+        public bool Rigsmal { get; set; }
+
+        [JsonProperty("Ruellia", Required = Required.Always)]
+        public Ruellia[] Ruellia { get; set; }
+
+        [JsonProperty("School", Required = Required.Always)]
+        public School[] School { get; set; }
+
+        [JsonProperty("Shakespearolater", Required = Required.Always)]
+        public Shakespearolater[] Shakespearolater { get; set; }
+
+        [JsonProperty("Svan", Required = Required.Always)]
+        public decimal[] Svan { get; set; }
+
+        [JsonProperty("Wayao", Required = Required.Always)]
+        public Dictionary<string, decimal> Wayao { get; set; }
+    }
+
+    public partial record AlleviateClass
+    {
+        [JsonProperty("apriori", Required = Required.AllowNull)]
+        public object Apriori { get; set; }
+
+        [JsonProperty("beggarer", Required = Required.AllowNull)]
+        public object Beggarer { get; set; }
+
+        [JsonProperty("brokenheartedly", Required = Required.AllowNull)]
+        public object Brokenheartedly { get; set; }
+
+        [JsonProperty("debilitation", Required = Required.AllowNull)]
+        public object Debilitation { get; set; }
+
+        [JsonProperty("frike", Required = Required.AllowNull)]
+        public object Frike { get; set; }
+
+        [JsonProperty("gastrolith", Required = Required.AllowNull)]
+        public object Gastrolith { get; set; }
+
+        [JsonProperty("Hulsean", Required = Required.AllowNull)]
+        public object Hulsean { get; set; }
+
+        [JsonProperty("orthocentric", Required = Required.AllowNull)]
+        public object Orthocentric { get; set; }
+
+        [JsonProperty("petaly", Required = Required.AllowNull)]
+        public object Petaly { get; set; }
+
+        [JsonProperty("probudgeting", Required = Required.AllowNull)]
+        public object Probudgeting { get; set; }
+
+        [JsonProperty("reacquire", Required = Required.AllowNull)]
+        public object Reacquire { get; set; }
+
+        [JsonProperty("scow", Required = Required.AllowNull)]
+        public object Scow { get; set; }
+
+        [JsonProperty("shutoff", Required = Required.AllowNull)]
+        public object Shutoff { get; set; }
+
+        [JsonProperty("subcontiguous", Required = Required.AllowNull)]
+        public object Subcontiguous { get; set; }
+
+        [JsonProperty("suffumigate", Required = Required.AllowNull)]
+        public object Suffumigate { get; set; }
+
+        [JsonProperty("transformable", Required = Required.AllowNull)]
+        public object Transformable { get; set; }
+
+        [JsonProperty("uncoroneted", Required = Required.AllowNull)]
+        public object Uncoroneted { get; set; }
+
+        [JsonProperty("unparking", Required = Required.AllowNull)]
+        public object Unparking { get; set; }
+
+        [JsonProperty("unvarnishedness", Required = Required.AllowNull)]
+        public object Unvarnishedness { get; set; }
+
+        [JsonProperty("wherewithal", Required = Required.AllowNull)]
+        public object Wherewithal { get; set; }
+    }
+
+    public partial record Rebecca
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public decimal Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Amphithyron
+    {
+        [JsonProperty("akroasis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Akroasis { get; set; }
+
+        [JsonProperty("antiphonical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Antiphonical { get; set; }
+
+        [JsonProperty("basebred", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Basebred { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("conductometric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conductometric { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ensilation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ensilation { get; set; }
+
+        [JsonProperty("eyebolt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Eyebolt { get; set; }
+
+        [JsonProperty("fistulated", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fistulated { get; set; }
+
+        [JsonProperty("heteropod", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Heteropod { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Juniperus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Juniperus { get; set; }
+
+        [JsonProperty("labyrinthically", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Labyrinthically { get; set; }
+
+        [JsonProperty("martyrization", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Martyrization { get; set; }
+
+        [JsonProperty("mispolicy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mispolicy { get; set; }
+
+        [JsonProperty("multipara", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Multipara { get; set; }
+
+        [JsonProperty("Nazirite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nazirite { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("possessorial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Possessorial { get; set; }
+
+        [JsonProperty("shamed", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shamed { get; set; }
+
+        [JsonProperty("shelfworn", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shelfworn { get; set; }
+
+        [JsonProperty("stagnum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stagnum { get; set; }
+
+        [JsonProperty("Those", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Those { get; set; }
+
+        [JsonProperty("undecimal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undecimal { get; set; }
+    }
+
+    public partial record AnkeeClass
+    {
+        [JsonProperty("Anomoean", Required = Required.AllowNull)]
+        public object Anomoean { get; set; }
+
+        [JsonProperty("barleyhood", Required = Required.AllowNull)]
+        public object Barleyhood { get; set; }
+
+        [JsonProperty("befriender", Required = Required.AllowNull)]
+        public object Befriender { get; set; }
+
+        [JsonProperty("brutishness", Required = Required.AllowNull)]
+        public object Brutishness { get; set; }
+
+        [JsonProperty("cephalalgy", Required = Required.AllowNull)]
+        public object Cephalalgy { get; set; }
+
+        [JsonProperty("cirurgian", Required = Required.AllowNull)]
+        public object Cirurgian { get; set; }
+
+        [JsonProperty("conventionally", Required = Required.AllowNull)]
+        public object Conventionally { get; set; }
+
+        [JsonProperty("jackshay", Required = Required.AllowNull)]
+        public object Jackshay { get; set; }
+
+        [JsonProperty("milammeter", Required = Required.AllowNull)]
+        public object Milammeter { get; set; }
+
+        [JsonProperty("Naja", Required = Required.AllowNull)]
+        public object Naja { get; set; }
+
+        [JsonProperty("ombrological", Required = Required.AllowNull)]
+        public object Ombrological { get; set; }
+
+        [JsonProperty("phonasthenia", Required = Required.AllowNull)]
+        public object Phonasthenia { get; set; }
+
+        [JsonProperty("retrievableness", Required = Required.AllowNull)]
+        public object Retrievableness { get; set; }
+
+        [JsonProperty("snakily", Required = Required.AllowNull)]
+        public object Snakily { get; set; }
+
+        [JsonProperty("swot", Required = Required.AllowNull)]
+        public object Swot { get; set; }
+
+        [JsonProperty("tartlet", Required = Required.AllowNull)]
+        public object Tartlet { get; set; }
+
+        [JsonProperty("thiofuran", Required = Required.AllowNull)]
+        public object Thiofuran { get; set; }
+
+        [JsonProperty("tracheophone", Required = Required.AllowNull)]
+        public object Tracheophone { get; set; }
+
+        [JsonProperty("tuglike", Required = Required.AllowNull)]
+        public object Tuglike { get; set; }
+
+        [JsonProperty("unscratchingly", Required = Required.AllowNull)]
+        public object Unscratchingly { get; set; }
+    }
+
+    public partial record AnsarieClass
+    {
+        [JsonProperty("accension", Required = Required.AllowNull)]
+        public object Accension { get; set; }
+
+        [JsonProperty("Alida", Required = Required.AllowNull)]
+        public object Alida { get; set; }
+
+        [JsonProperty("asteria", Required = Required.AllowNull)]
+        public object Asteria { get; set; }
+
+        [JsonProperty("beriberic", Required = Required.AllowNull)]
+        public object Beriberic { get; set; }
+
+        [JsonProperty("edgebone", Required = Required.AllowNull)]
+        public object Edgebone { get; set; }
+
+        [JsonProperty("gastrodialysis", Required = Required.AllowNull)]
+        public object Gastrodialysis { get; set; }
+
+        [JsonProperty("geographic", Required = Required.AllowNull)]
+        public object Geographic { get; set; }
+
+        [JsonProperty("Ictonyx", Required = Required.AllowNull)]
+        public object Ictonyx { get; set; }
+
+        [JsonProperty("metrocele", Required = Required.AllowNull)]
+        public object Metrocele { get; set; }
+
+        [JsonProperty("misgraft", Required = Required.AllowNull)]
+        public object Misgraft { get; set; }
+
+        [JsonProperty("monteith", Required = Required.AllowNull)]
+        public object Monteith { get; set; }
+
+        [JsonProperty("notcher", Required = Required.AllowNull)]
+        public object Notcher { get; set; }
+
+        [JsonProperty("prorestriction", Required = Required.AllowNull)]
+        public object Prorestriction { get; set; }
+
+        [JsonProperty("Ramist", Required = Required.AllowNull)]
+        public object Ramist { get; set; }
+
+        [JsonProperty("throatlet", Required = Required.AllowNull)]
+        public object Throatlet { get; set; }
+
+        [JsonProperty("unfair", Required = Required.AllowNull)]
+        public object Unfair { get; set; }
+
+        [JsonProperty("unsynonymous", Required = Required.AllowNull)]
+        public object Unsynonymous { get; set; }
+
+        [JsonProperty("water", Required = Required.AllowNull)]
+        public object Water { get; set; }
+
+        [JsonProperty("zestfully", Required = Required.AllowNull)]
+        public object Zestfully { get; set; }
+
+        [JsonProperty("zincic", Required = Required.AllowNull)]
+        public object Zincic { get; set; }
+    }
+
+    public partial record ChytridiaceaeClass
+    {
+        [JsonProperty("Batidaceae", Required = Required.AllowNull)]
+        public object Batidaceae { get; set; }
+
+        [JsonProperty("Brechites", Required = Required.AllowNull)]
+        public object Brechites { get; set; }
+
+        [JsonProperty("codespairer", Required = Required.AllowNull)]
+        public object Codespairer { get; set; }
+
+        [JsonProperty("Emery", Required = Required.AllowNull)]
+        public object Emery { get; set; }
+
+        [JsonProperty("enervative", Required = Required.AllowNull)]
+        public object Enervative { get; set; }
+
+        [JsonProperty("excriminate", Required = Required.AllowNull)]
+        public object Excriminate { get; set; }
+
+        [JsonProperty("goshenite", Required = Required.AllowNull)]
+        public object Goshenite { get; set; }
+
+        [JsonProperty("grime", Required = Required.AllowNull)]
+        public object Grime { get; set; }
+
+        [JsonProperty("gritten", Required = Required.AllowNull)]
+        public object Gritten { get; set; }
+
+        [JsonProperty("hectorly", Required = Required.AllowNull)]
+        public object Hectorly { get; set; }
+
+        [JsonProperty("intermediation", Required = Required.AllowNull)]
+        public object Intermediation { get; set; }
+
+        [JsonProperty("meeterly", Required = Required.AllowNull)]
+        public object Meeterly { get; set; }
+
+        [JsonProperty("Narraganset", Required = Required.AllowNull)]
+        public object Narraganset { get; set; }
+
+        [JsonProperty("onymatic", Required = Required.AllowNull)]
+        public object Onymatic { get; set; }
+
+        [JsonProperty("paddlecock", Required = Required.AllowNull)]
+        public object Paddlecock { get; set; }
+
+        [JsonProperty("thana", Required = Required.AllowNull)]
+        public object Thana { get; set; }
+
+        [JsonProperty("thornily", Required = Required.AllowNull)]
+        public object Thornily { get; set; }
+
+        [JsonProperty("uckia", Required = Required.AllowNull)]
+        public object Uckia { get; set; }
+
+        [JsonProperty("unmettle", Required = Required.AllowNull)]
+        public object Unmettle { get; set; }
+
+        [JsonProperty("vorticellid", Required = Required.AllowNull)]
+        public object Vorticellid { get; set; }
+    }
+
+    public partial record DiscordiaClass
+    {
+        [JsonProperty("Altaic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Altaic { get; set; }
+
+        [JsonProperty("amoristic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amoristic { get; set; }
+
+        [JsonProperty("blennophthalmia", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Blennophthalmia { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disciplinability", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Disciplinability { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("goofer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goofer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("laryngograph", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Laryngograph { get; set; }
+
+        [JsonProperty("leucitis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Leucitis { get; set; }
+
+        [JsonProperty("lymphocyst", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lymphocyst { get; set; }
+
+        [JsonProperty("microcosmology", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Microcosmology { get; set; }
+
+        [JsonProperty("nauseation", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Nauseation { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("Patarin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Patarin { get; set; }
+
+        [JsonProperty("preliberal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preliberal { get; set; }
+
+        [JsonProperty("prettifier", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Prettifier { get; set; }
+
+        [JsonProperty("rangework", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rangework { get; set; }
+
+        [JsonProperty("redient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Redient { get; set; }
+
+        [JsonProperty("subfusiform", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subfusiform { get; set; }
+
+        [JsonProperty("suicidical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Suicidical { get; set; }
+
+        [JsonProperty("swow", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Swow { get; set; }
+
+        [JsonProperty("wastrel", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wastrel { get; set; }
+
+        [JsonProperty("wingle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Wingle { get; set; }
+    }
+
+    public partial record GryphosaurusClass
+    {
+        [JsonProperty("amissibility", Required = Required.AllowNull)]
+        public object Amissibility { get; set; }
+
+        [JsonProperty("Burushaski", Required = Required.AllowNull)]
+        public object Burushaski { get; set; }
+
+        [JsonProperty("citronin", Required = Required.AllowNull)]
+        public object Citronin { get; set; }
+
+        [JsonProperty("coplaintiff", Required = Required.AllowNull)]
+        public object Coplaintiff { get; set; }
+
+        [JsonProperty("disquisitionary", Required = Required.AllowNull)]
+        public object Disquisitionary { get; set; }
+
+        [JsonProperty("enoplan", Required = Required.AllowNull)]
+        public object Enoplan { get; set; }
+
+        [JsonProperty("faintness", Required = Required.AllowNull)]
+        public object Faintness { get; set; }
+
+        [JsonProperty("hebetomy", Required = Required.AllowNull)]
+        public object Hebetomy { get; set; }
+
+        [JsonProperty("islandry", Required = Required.AllowNull)]
+        public object Islandry { get; set; }
+
+        [JsonProperty("lameduck", Required = Required.AllowNull)]
+        public object Lameduck { get; set; }
+
+        [JsonProperty("overbattle", Required = Required.AllowNull)]
+        public object Overbattle { get; set; }
+
+        [JsonProperty("overinterested", Required = Required.AllowNull)]
+        public object Overinterested { get; set; }
+
+        [JsonProperty("phrenologic", Required = Required.AllowNull)]
+        public object Phrenologic { get; set; }
+
+        [JsonProperty("rainband", Required = Required.AllowNull)]
+        public object Rainband { get; set; }
+
+        [JsonProperty("shiningly", Required = Required.AllowNull)]
+        public object Shiningly { get; set; }
+
+        [JsonProperty("stamineous", Required = Required.AllowNull)]
+        public object Stamineous { get; set; }
+
+        [JsonProperty("subscapularis", Required = Required.AllowNull)]
+        public object Subscapularis { get; set; }
+
+        [JsonProperty("Tahami", Required = Required.AllowNull)]
+        public object Tahami { get; set; }
+
+        [JsonProperty("undaubed", Required = Required.AllowNull)]
+        public object Undaubed { get; set; }
+
+        [JsonProperty("underntime", Required = Required.AllowNull)]
+        public object Underntime { get; set; }
+    }
+
+    public partial record LaviniaClass
+    {
+        [JsonProperty("agitable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Agitable { get; set; }
+
+        [JsonProperty("asininity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Asininity { get; set; }
+
+        [JsonProperty("benefiter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Benefiter { get; set; }
+
+        [JsonProperty("bronzelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bronzelike { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cholesteatomatous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cholesteatomatous { get; set; }
+
+        [JsonProperty("deprivement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Deprivement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("flippantness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Flippantness { get; set; }
+
+        [JsonProperty("fogproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fogproof { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("merrymeeting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Merrymeeting { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("overcareful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overcareful { get; set; }
+
+        [JsonProperty("panaris", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Panaris { get; set; }
+
+        [JsonProperty("preacceptance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preacceptance { get; set; }
+
+        [JsonProperty("quinoxaline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quinoxaline { get; set; }
+
+        [JsonProperty("sig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sig { get; set; }
+
+        [JsonProperty("superconfusion", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Superconfusion { get; set; }
+
+        [JsonProperty("Tacana", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tacana { get; set; }
+
+        [JsonProperty("tillotter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tillotter { get; set; }
+
+        [JsonProperty("tranquillize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tranquillize { get; set; }
+
+        [JsonProperty("unquestionable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unquestionable { get; set; }
+
+        [JsonProperty("uproute", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Uproute { get; set; }
+    }
+
+    public partial record OskarClass
+    {
+        [JsonProperty("Acrobates", Required = Required.AllowNull)]
+        public object Acrobates { get; set; }
+
+        [JsonProperty("beanshooter", Required = Required.AllowNull)]
+        public object Beanshooter { get; set; }
+
+        [JsonProperty("bearhound", Required = Required.AllowNull)]
+        public object Bearhound { get; set; }
+
+        [JsonProperty("Cayuga", Required = Required.AllowNull)]
+        public object Cayuga { get; set; }
+
+        [JsonProperty("guarneri", Required = Required.AllowNull)]
+        public object Guarneri { get; set; }
+
+        [JsonProperty("hypochondriacism", Required = Required.AllowNull)]
+        public object Hypochondriacism { get; set; }
+
+        [JsonProperty("indication", Required = Required.AllowNull)]
+        public object Indication { get; set; }
+
+        [JsonProperty("jaculative", Required = Required.AllowNull)]
+        public object Jaculative { get; set; }
+
+        [JsonProperty("nagana", Required = Required.AllowNull)]
+        public object Nagana { get; set; }
+
+        [JsonProperty("Netherlandish", Required = Required.AllowNull)]
+        public object Netherlandish { get; set; }
+
+        [JsonProperty("noctivagous", Required = Required.AllowNull)]
+        public object Noctivagous { get; set; }
+
+        [JsonProperty("nonphysiological", Required = Required.AllowNull)]
+        public object Nonphysiological { get; set; }
+
+        [JsonProperty("praxis", Required = Required.AllowNull)]
+        public object Praxis { get; set; }
+
+        [JsonProperty("provision", Required = Required.AllowNull)]
+        public object Provision { get; set; }
+
+        [JsonProperty("subterhuman", Required = Required.AllowNull)]
+        public object Subterhuman { get; set; }
+
+        [JsonProperty("sunlit", Required = Required.AllowNull)]
+        public object Sunlit { get; set; }
+
+        [JsonProperty("syncraniate", Required = Required.AllowNull)]
+        public object Syncraniate { get; set; }
+
+        [JsonProperty("teachment", Required = Required.AllowNull)]
+        public object Teachment { get; set; }
+
+        [JsonProperty("unmutinous", Required = Required.AllowNull)]
+        public object Unmutinous { get; set; }
+
+        [JsonProperty("unstoppable", Required = Required.AllowNull)]
+        public object Unstoppable { get; set; }
+    }
+
+    public partial struct Abranchiata
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Abranchiata(long Integer) => new Abranchiata { Integer = Integer };
+        public static implicit operator Abranchiata(long[] IntegerArray) => new Abranchiata { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Integer == null;
+    }
+
+    public partial struct Academe
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Academe(long Integer) => new Academe { Integer = Integer };
+        public static implicit operator Academe(long[] IntegerArray) => new Academe { IntegerArray = IntegerArray };
+        public static implicit operator Academe(Dictionary<string, long> IntegerMap) => new Academe { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Acquirable
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public long?[]? UnionArray;
+
+        public static implicit operator Acquirable(Dictionary<string, long> IntegerMap) => new Acquirable { IntegerMap = IntegerMap };
+        public static implicit operator Acquirable(long?[] UnionArray) => new Acquirable { UnionArray = UnionArray };
+    }
+
+    public partial struct Aerometry
+    {
+        public bool? Bool;
+        public decimal? Double;
+
+        public static implicit operator Aerometry(bool Bool) => new Aerometry { Bool = Bool };
+        public static implicit operator Aerometry(decimal Double) => new Aerometry { Double = Double };
+    }
+
+    public partial struct Alexin
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+
+        public static implicit operator Alexin(bool Bool) => new Alexin { Bool = Bool };
+        public static implicit operator Alexin(long[] IntegerArray) => new Alexin { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AlleviateElement
+    {
+        public AlleviateClass? AlleviateClass;
+        public long?[]? UnionArray;
+
+        public static implicit operator AlleviateElement(AlleviateClass AlleviateClass) => new AlleviateElement { AlleviateClass = AlleviateClass };
+        public static implicit operator AlleviateElement(long?[] UnionArray) => new AlleviateElement { UnionArray = UnionArray };
+    }
+
+    public partial struct Amaa
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Amaa(bool Bool) => new Amaa { Bool = Bool };
+        public static implicit operator Amaa(long Integer) => new Amaa { Integer = Integer };
+        public static implicit operator Amaa(Rebecca Rebecca) => new Amaa { Rebecca = Rebecca };
+    }
+
+    public partial struct Ambassage
+    {
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Ambassage(object[] NullArray) => new Ambassage { NullArray = NullArray };
+        public static implicit operator Ambassage(string String) => new Ambassage { String = String };
+    }
+
+    public partial struct AnkeeElement
+    {
+        public AnkeeClass? AnkeeClass;
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator AnkeeElement(AnkeeClass AnkeeClass) => new AnkeeElement { AnkeeClass = AnkeeClass };
+        public static implicit operator AnkeeElement(long Integer) => new AnkeeElement { Integer = Integer };
+        public static implicit operator AnkeeElement(long[] IntegerArray) => new AnkeeElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct AnsarieElement
+    {
+        public AnsarieClass? AnsarieClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator AnsarieElement(AnsarieClass AnsarieClass) => new AnsarieElement { AnsarieClass = AnsarieClass };
+        public static implicit operator AnsarieElement(long[] IntegerArray) => new AnsarieElement { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && AnsarieClass == null;
+    }
+
+    public partial struct Aphasia
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Aphasia(long Integer) => new Aphasia { Integer = Integer };
+        public static implicit operator Aphasia(long[] IntegerArray) => new Aphasia { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Asprawl
+    {
+        public decimal? Double;
+        public string? String;
+
+        public static implicit operator Asprawl(decimal Double) => new Asprawl { Double = Double };
+        public static implicit operator Asprawl(string String) => new Asprawl { String = String };
+    }
+
+    public partial struct Bedesman
+    {
+        public bool? Bool;
+        public decimal? Double;
+        public string? String;
+
+        public static implicit operator Bedesman(bool Bool) => new Bedesman { Bool = Bool };
+        public static implicit operator Bedesman(decimal Double) => new Bedesman { Double = Double };
+        public static implicit operator Bedesman(string String) => new Bedesman { String = String };
+    }
+
+    public partial struct Belard
+    {
+        public decimal? Double;
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Belard(decimal Double) => new Belard { Double = Double };
+        public static implicit operator Belard(long[] IntegerArray) => new Belard { IntegerArray = IntegerArray };
+        public static implicit operator Belard(Rebecca Rebecca) => new Belard { Rebecca = Rebecca };
+    }
+
+    public partial struct Bocking
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Bocking(bool Bool) => new Bocking { Bool = Bool };
+        public static implicit operator Bocking(long[] IntegerArray) => new Bocking { IntegerArray = IntegerArray };
+        public static implicit operator Bocking(Dictionary<string, long> IntegerMap) => new Bocking { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Brawlingly
+    {
+        public object[]? NullArray;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Brawlingly(object[] NullArray) => new Brawlingly { NullArray = NullArray };
+        public static implicit operator Brawlingly(Dictionary<string, long?> UnionMap) => new Brawlingly { UnionMap = UnionMap };
+    }
+
+    public partial struct Brookie
+    {
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+
+        public static implicit operator Brookie(long[] IntegerArray) => new Brookie { IntegerArray = IntegerArray };
+        public static implicit operator Brookie(Rebecca Rebecca) => new Brookie { Rebecca = Rebecca };
+    }
+
+    public partial struct Bumboatman
+    {
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Bumboatman(object[] NullArray) => new Bumboatman { NullArray = NullArray };
+        public static implicit operator Bumboatman(string String) => new Bumboatman { String = String };
+        public bool IsNull => NullArray == null && String == null;
+    }
+
+    public partial struct Calaverite
+    {
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Calaverite(long[] IntegerArray) => new Calaverite { IntegerArray = IntegerArray };
+        public static implicit operator Calaverite(string String) => new Calaverite { String = String };
+    }
+
+    public partial struct Catallactic
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Catallactic(bool Bool) => new Catallactic { Bool = Bool };
+        public static implicit operator Catallactic(Dictionary<string, long> IntegerMap) => new Catallactic { IntegerMap = IntegerMap };
+        public static implicit operator Catallactic(object[] NullArray) => new Catallactic { NullArray = NullArray };
+    }
+
+    public partial struct Cemental
+    {
+        public decimal? Double;
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Cemental(decimal Double) => new Cemental { Double = Double };
+        public static implicit operator Cemental(long[] IntegerArray) => new Cemental { IntegerArray = IntegerArray };
+        public static implicit operator Cemental(Dictionary<string, long> IntegerMap) => new Cemental { IntegerMap = IntegerMap };
+    }
+
+    public partial struct ChytridiaceaeElement
+    {
+        public bool? Bool;
+        public ChytridiaceaeClass? ChytridiaceaeClass;
+
+        public static implicit operator ChytridiaceaeElement(bool Bool) => new ChytridiaceaeElement { Bool = Bool };
+        public static implicit operator ChytridiaceaeElement(ChytridiaceaeClass ChytridiaceaeClass) => new ChytridiaceaeElement { ChytridiaceaeClass = ChytridiaceaeClass };
+        public bool IsNull => Bool == null && ChytridiaceaeClass == null;
+    }
+
+    public partial struct DiscordiaElement
+    {
+        public DiscordiaClass? DiscordiaClass;
+        public long[]? IntegerArray;
+
+        public static implicit operator DiscordiaElement(DiscordiaClass DiscordiaClass) => new DiscordiaElement { DiscordiaClass = DiscordiaClass };
+        public static implicit operator DiscordiaElement(long[] IntegerArray) => new DiscordiaElement { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Endomyce
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Endomyce(long Integer) => new Endomyce { Integer = Integer };
+        public static implicit operator Endomyce(string String) => new Endomyce { String = String };
+    }
+
+    public partial struct Epinephelidae
+    {
+        public bool? Bool;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Epinephelidae(bool Bool) => new Epinephelidae { Bool = Bool };
+        public static implicit operator Epinephelidae(long Integer) => new Epinephelidae { Integer = Integer };
+        public static implicit operator Epinephelidae(string String) => new Epinephelidae { String = String };
+    }
+
+    public partial struct Eupatorium
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Eupatorium(Dictionary<string, long> IntegerMap) => new Eupatorium { IntegerMap = IntegerMap };
+        public static implicit operator Eupatorium(object[] NullArray) => new Eupatorium { NullArray = NullArray };
+    }
+
+    public partial struct GryphosaurusElement
+    {
+        public GryphosaurusClass? GryphosaurusClass;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator GryphosaurusElement(GryphosaurusClass GryphosaurusClass) => new GryphosaurusElement { GryphosaurusClass = GryphosaurusClass };
+        public static implicit operator GryphosaurusElement(long[] IntegerArray) => new GryphosaurusElement { IntegerArray = IntegerArray };
+        public static implicit operator GryphosaurusElement(string String) => new GryphosaurusElement { String = String };
+    }
+
+    public partial struct Koryak
+    {
+        public string? String;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Koryak(string String) => new Koryak { String = String };
+        public static implicit operator Koryak(Dictionary<string, long?> UnionMap) => new Koryak { UnionMap = UnionMap };
+    }
+
+    public partial struct LaviniaElement
+    {
+        public LaviniaClass? LaviniaClass;
+        public string? String;
+
+        public static implicit operator LaviniaElement(LaviniaClass LaviniaClass) => new LaviniaElement { LaviniaClass = LaviniaClass };
+        public static implicit operator LaviniaElement(string String) => new LaviniaElement { String = String };
+    }
+
+    public partial struct OskarElement
+    {
+        public long[]? IntegerArray;
+        public OskarClass? OskarClass;
+
+        public static implicit operator OskarElement(long[] IntegerArray) => new OskarElement { IntegerArray = IntegerArray };
+        public static implicit operator OskarElement(OskarClass OskarClass) => new OskarElement { OskarClass = OskarClass };
+    }
+
+    public partial struct RebeccaElement
+    {
+        public long? Integer;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator RebeccaElement(long Integer) => new RebeccaElement { Integer = Integer };
+        public static implicit operator RebeccaElement(Rebecca Rebecca) => new RebeccaElement { Rebecca = Rebecca };
+        public static implicit operator RebeccaElement(string String) => new RebeccaElement { String = String };
+    }
+
+    public partial struct Rhomboganoidei
+    {
+        public long[]? IntegerArray;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Rhomboganoidei(long[] IntegerArray) => new Rhomboganoidei { IntegerArray = IntegerArray };
+        public static implicit operator Rhomboganoidei(Rebecca Rebecca) => new Rhomboganoidei { Rebecca = Rebecca };
+        public static implicit operator Rhomboganoidei(string String) => new Rhomboganoidei { String = String };
+    }
+
+    public partial struct Ruellia
+    {
+        public bool? Bool;
+        public Rebecca? Rebecca;
+        public string? String;
+
+        public static implicit operator Ruellia(bool Bool) => new Ruellia { Bool = Bool };
+        public static implicit operator Ruellia(Rebecca Rebecca) => new Ruellia { Rebecca = Rebecca };
+        public static implicit operator Ruellia(string String) => new Ruellia { String = String };
+    }
+
+    public partial struct School
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator School(long Integer) => new School { Integer = Integer };
+        public static implicit operator School(Dictionary<string, long> IntegerMap) => new School { IntegerMap = IntegerMap };
+        public bool IsNull => Integer == null && IntegerMap == null;
+    }
+
+    public partial struct Shakespearolater
+    {
+        public decimal? Double;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Shakespearolater(decimal Double) => new Shakespearolater { Double = Double };
+        public static implicit operator Shakespearolater(long[] IntegerArray) => new Shakespearolater { IntegerArray = IntegerArray };
+        public static implicit operator Shakespearolater(string String) => new Shakespearolater { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                AbranchiataConverter.Singleton,
+                AnsarieElementConverter.Singleton,
+                ChytridiaceaeElementConverter.Singleton,
+                DiscordiaElementConverter.Singleton,
+                EndomyceConverter.Singleton,
+                EpinephelidaeConverter.Singleton,
+                EupatoriumConverter.Singleton,
+                GryphosaurusElementConverter.Singleton,
+                KoryakConverter.Singleton,
+                LaviniaElementConverter.Singleton,
+                OskarElementConverter.Singleton,
+                RebeccaElementConverter.Singleton,
+                RhomboganoideiConverter.Singleton,
+                RuelliaConverter.Singleton,
+                SchoolConverter.Singleton,
+                ShakespearolaterConverter.Singleton,
+                AcademeConverter.Singleton,
+                AcquirableConverter.Singleton,
+                AerometryConverter.Singleton,
+                AlexinConverter.Singleton,
+                AlleviateElementConverter.Singleton,
+                AmaaConverter.Singleton,
+                AmbassageConverter.Singleton,
+                AnkeeElementConverter.Singleton,
+                AphasiaConverter.Singleton,
+                AsprawlConverter.Singleton,
+                BedesmanConverter.Singleton,
+                BelardConverter.Singleton,
+                BockingConverter.Singleton,
+                BrawlinglyConverter.Singleton,
+                BrookieConverter.Singleton,
+                BumboatmanConverter.Singleton,
+                CalaveriteConverter.Singleton,
+                CatallacticConverter.Singleton,
+                CementalConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class AbranchiataConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Abranchiata) || t == typeof(Abranchiata?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Abranchiata { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Abranchiata { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Abranchiata { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Abranchiata");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Abranchiata)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Abranchiata");
+        }
+
+        public static readonly AbranchiataConverter Singleton = new AbranchiataConverter();
+    }
+
+    internal class AnsarieElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnsarieElement) || t == typeof(AnsarieElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new AnsarieElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnsarieClass>(reader);
+                    return new AnsarieElement { AnsarieClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnsarieElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnsarieElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnsarieElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnsarieClass != null)
+            {
+                serializer.Serialize(writer, value.AnsarieClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnsarieElement");
+        }
+
+        public static readonly AnsarieElementConverter Singleton = new AnsarieElementConverter();
+    }
+
+    internal class ChytridiaceaeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ChytridiaceaeElement) || t == typeof(ChytridiaceaeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new ChytridiaceaeElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new ChytridiaceaeElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ChytridiaceaeClass>(reader);
+                    return new ChytridiaceaeElement { ChytridiaceaeClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ChytridiaceaeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ChytridiaceaeElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.ChytridiaceaeClass != null)
+            {
+                serializer.Serialize(writer, value.ChytridiaceaeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ChytridiaceaeElement");
+        }
+
+        public static readonly ChytridiaceaeElementConverter Singleton = new ChytridiaceaeElementConverter();
+    }
+
+    internal class DiscordiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DiscordiaElement) || t == typeof(DiscordiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DiscordiaClass>(reader);
+                    return new DiscordiaElement { DiscordiaClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new DiscordiaElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DiscordiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DiscordiaElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.DiscordiaClass != null)
+            {
+                serializer.Serialize(writer, value.DiscordiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DiscordiaElement");
+        }
+
+        public static readonly DiscordiaElementConverter Singleton = new DiscordiaElementConverter();
+    }
+
+    internal class EndomyceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Endomyce) || t == typeof(Endomyce?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Endomyce { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Endomyce { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Endomyce");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Endomyce)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Endomyce");
+        }
+
+        public static readonly EndomyceConverter Singleton = new EndomyceConverter();
+    }
+
+    internal class EpinephelidaeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Epinephelidae) || t == typeof(Epinephelidae?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Epinephelidae { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Epinephelidae { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Epinephelidae { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Epinephelidae");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Epinephelidae)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Epinephelidae");
+        }
+
+        public static readonly EpinephelidaeConverter Singleton = new EpinephelidaeConverter();
+    }
+
+    internal class EupatoriumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Eupatorium) || t == typeof(Eupatorium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Eupatorium { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Eupatorium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Eupatorium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Eupatorium)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Eupatorium");
+        }
+
+        public static readonly EupatoriumConverter Singleton = new EupatoriumConverter();
+    }
+
+    internal class GryphosaurusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GryphosaurusElement) || t == typeof(GryphosaurusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new GryphosaurusElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<GryphosaurusClass>(reader);
+                    return new GryphosaurusElement { GryphosaurusClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new GryphosaurusElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type GryphosaurusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (GryphosaurusElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.GryphosaurusClass != null)
+            {
+                serializer.Serialize(writer, value.GryphosaurusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type GryphosaurusElement");
+        }
+
+        public static readonly GryphosaurusElementConverter Singleton = new GryphosaurusElementConverter();
+    }
+
+    internal class KoryakConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Koryak) || t == typeof(Koryak?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Koryak { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Koryak { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Koryak");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Koryak)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Koryak");
+        }
+
+        public static readonly KoryakConverter Singleton = new KoryakConverter();
+    }
+
+    internal class LaviniaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LaviniaElement) || t == typeof(LaviniaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LaviniaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LaviniaClass>(reader);
+                    return new LaviniaElement { LaviniaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LaviniaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LaviniaElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LaviniaClass != null)
+            {
+                serializer.Serialize(writer, value.LaviniaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LaviniaElement");
+        }
+
+        public static readonly LaviniaElementConverter Singleton = new LaviniaElementConverter();
+    }
+
+    internal class OskarElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OskarElement) || t == typeof(OskarElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OskarClass>(reader);
+                    return new OskarElement { OskarClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new OskarElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OskarElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OskarElement)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.OskarClass != null)
+            {
+                serializer.Serialize(writer, value.OskarClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OskarElement");
+        }
+
+        public static readonly OskarElementConverter Singleton = new OskarElementConverter();
+    }
+
+    internal class RebeccaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RebeccaElement) || t == typeof(RebeccaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new RebeccaElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new RebeccaElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new RebeccaElement { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type RebeccaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RebeccaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type RebeccaElement");
+        }
+
+        public static readonly RebeccaElementConverter Singleton = new RebeccaElementConverter();
+    }
+
+    internal class RhomboganoideiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rhomboganoidei) || t == typeof(Rhomboganoidei?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Rhomboganoidei { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Rhomboganoidei { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rhomboganoidei { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rhomboganoidei");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rhomboganoidei)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rhomboganoidei");
+        }
+
+        public static readonly RhomboganoideiConverter Singleton = new RhomboganoideiConverter();
+    }
+
+    internal class RuelliaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ruellia) || t == typeof(Ruellia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Ruellia { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ruellia { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Ruellia { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Ruellia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ruellia)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ruellia");
+        }
+
+        public static readonly RuelliaConverter Singleton = new RuelliaConverter();
+    }
+
+    internal class SchoolConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(School) || t == typeof(School?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new School { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new School { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new School { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type School");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (School)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type School");
+        }
+
+        public static readonly SchoolConverter Singleton = new SchoolConverter();
+    }
+
+    internal class ShakespearolaterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shakespearolater) || t == typeof(Shakespearolater?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Shakespearolater { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Shakespearolater { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Shakespearolater { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shakespearolater");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shakespearolater)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shakespearolater");
+        }
+
+        public static readonly ShakespearolaterConverter Singleton = new ShakespearolaterConverter();
+    }
+
+    internal class AcademeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Academe) || t == typeof(Academe?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Academe { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Academe { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Academe { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Academe");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Academe)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Academe");
+        }
+
+        public static readonly AcademeConverter Singleton = new AcademeConverter();
+    }
+
+    internal class AcquirableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Acquirable) || t == typeof(Acquirable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Acquirable { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Acquirable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Acquirable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Acquirable)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Acquirable");
+        }
+
+        public static readonly AcquirableConverter Singleton = new AcquirableConverter();
+    }
+
+    internal class AerometryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aerometry) || t == typeof(Aerometry?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Aerometry { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Aerometry { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Aerometry");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aerometry)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aerometry");
+        }
+
+        public static readonly AerometryConverter Singleton = new AerometryConverter();
+    }
+
+    internal class AlexinConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Alexin) || t == typeof(Alexin?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Alexin { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Alexin { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Alexin");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Alexin)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Alexin");
+        }
+
+        public static readonly AlexinConverter Singleton = new AlexinConverter();
+    }
+
+    internal class AlleviateElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AlleviateElement) || t == typeof(AlleviateElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AlleviateClass>(reader);
+                    return new AlleviateElement { AlleviateClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new AlleviateElement { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AlleviateElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AlleviateElement)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.AlleviateClass != null)
+            {
+                serializer.Serialize(writer, value.AlleviateClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AlleviateElement");
+        }
+
+        public static readonly AlleviateElementConverter Singleton = new AlleviateElementConverter();
+    }
+
+    internal class AmaaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Amaa) || t == typeof(Amaa?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Amaa { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Amaa { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Amaa { Rebecca = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Amaa");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Amaa)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Amaa");
+        }
+
+        public static readonly AmaaConverter Singleton = new AmaaConverter();
+    }
+
+    internal class AmbassageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Ambassage) || t == typeof(Ambassage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Ambassage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Ambassage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Ambassage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Ambassage)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Ambassage");
+        }
+
+        public static readonly AmbassageConverter Singleton = new AmbassageConverter();
+    }
+
+    internal class AnkeeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnkeeElement) || t == typeof(AnkeeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new AnkeeElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnkeeClass>(reader);
+                    return new AnkeeElement { AnkeeClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new AnkeeElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type AnkeeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnkeeElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.AnkeeClass != null)
+            {
+                serializer.Serialize(writer, value.AnkeeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnkeeElement");
+        }
+
+        public static readonly AnkeeElementConverter Singleton = new AnkeeElementConverter();
+    }
+
+    internal class AphasiaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Aphasia) || t == typeof(Aphasia?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Aphasia { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Aphasia { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Aphasia");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Aphasia)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Aphasia");
+        }
+
+        public static readonly AphasiaConverter Singleton = new AphasiaConverter();
+    }
+
+    internal class AsprawlConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Asprawl) || t == typeof(Asprawl?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Asprawl { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Asprawl { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Asprawl");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Asprawl)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Asprawl");
+        }
+
+        public static readonly AsprawlConverter Singleton = new AsprawlConverter();
+    }
+
+    internal class BedesmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bedesman) || t == typeof(Bedesman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Bedesman { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bedesman { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bedesman { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Bedesman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bedesman)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bedesman");
+        }
+
+        public static readonly BedesmanConverter Singleton = new BedesmanConverter();
+    }
+
+    internal class BelardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Belard) || t == typeof(Belard?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Belard { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Belard { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Belard { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Belard");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Belard)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Belard");
+        }
+
+        public static readonly BelardConverter Singleton = new BelardConverter();
+    }
+
+    internal class BockingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bocking) || t == typeof(Bocking?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bocking { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Bocking { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Bocking { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bocking");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bocking)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bocking");
+        }
+
+        public static readonly BockingConverter Singleton = new BockingConverter();
+    }
+
+    internal class BrawlinglyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brawlingly) || t == typeof(Brawlingly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Brawlingly { UnionMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Brawlingly { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brawlingly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brawlingly)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brawlingly");
+        }
+
+        public static readonly BrawlinglyConverter Singleton = new BrawlinglyConverter();
+    }
+
+    internal class BrookieConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Brookie) || t == typeof(Brookie?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rebecca>(reader);
+                    return new Brookie { Rebecca = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Brookie { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Brookie");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Brookie)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.Rebecca != null)
+            {
+                serializer.Serialize(writer, value.Rebecca);
+                return;
+            }
+            throw new Exception("Cannot marshal type Brookie");
+        }
+
+        public static readonly BrookieConverter Singleton = new BrookieConverter();
+    }
+
+    internal class BumboatmanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bumboatman) || t == typeof(Bumboatman?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Bumboatman { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Bumboatman { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Bumboatman { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Bumboatman");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bumboatman)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bumboatman");
+        }
+
+        public static readonly BumboatmanConverter Singleton = new BumboatmanConverter();
+    }
+
+    internal class CalaveriteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Calaverite) || t == typeof(Calaverite?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Calaverite { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Calaverite { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Calaverite");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Calaverite)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Calaverite");
+        }
+
+        public static readonly CalaveriteConverter Singleton = new CalaveriteConverter();
+    }
+
+    internal class CatallacticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Catallactic) || t == typeof(Catallactic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Catallactic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Catallactic { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Catallactic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Catallactic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Catallactic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Catallactic");
+        }
+
+        public static readonly CatallacticConverter Singleton = new CatallacticConverter();
+    }
+
+    internal class CementalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Cemental) || t == typeof(Cemental?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Cemental { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Cemental { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Cemental { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Cemental");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Cemental)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Cemental");
+        }
+
+        public static readonly CementalConverter Singleton = new CementalConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations3.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations3.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs
new file mode 100644
index 0000000..b9e42e5
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations3.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs
@@ -0,0 +1,2957 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("juror", Required = Required.Always)]
+        public JurorElement[] Juror { get; set; }
+
+        [JsonProperty("kongoni", Required = Required.Always)]
+        public Kongoni[] Kongoni { get; set; }
+
+        [JsonProperty("ladronism", Required = Required.Always)]
+        public LadronismElement[] Ladronism { get; set; }
+
+        [JsonProperty("landlubberly", Required = Required.Always)]
+        public LandlubberlyElement[] Landlubberly { get; set; }
+
+        [JsonProperty("listener", Required = Required.Always)]
+        public Listener[] Listener { get; set; }
+
+        [JsonProperty("lupus", Required = Required.Always)]
+        public LupusElement[] Lupus { get; set; }
+
+        [JsonProperty("maslin", Required = Required.Always)]
+        public Maslin[] Maslin { get; set; }
+
+        [JsonProperty("monazite", Required = Required.Always)]
+        public MonaziteElement[] Monazite { get; set; }
+
+        [JsonProperty("monoliteral", Required = Required.Always)]
+        public Monoliteral[] Monoliteral { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.Always)]
+        public MonotheisticallyElement[] Monotheistically { get; set; }
+
+        [JsonProperty("montage", Required = Required.Always)]
+        public Montage[] Montage { get; set; }
+
+        [JsonProperty("moralness", Required = Required.Always)]
+        public Moralness[] Moralness { get; set; }
+
+        [JsonProperty("mowra", Required = Required.Always)]
+        public MonaziteClass?[] Mowra { get; set; }
+
+        [JsonProperty("mulishly", Required = Required.Always)]
+        public Mulishly[] Mulishly { get; set; }
+
+        [JsonProperty("myoscope", Required = Required.Always)]
+        public Myoscope[] Myoscope { get; set; }
+
+        [JsonProperty("nach", Required = Required.Always)]
+        public long?[]?[] Nach { get; set; }
+
+        [JsonProperty("neuromastic", Required = Required.Always)]
+        public Neuromastic[] Neuromastic { get; set; }
+
+        [JsonProperty("noncontributing", Required = Required.Always)]
+        public Noncontributing[] Noncontributing { get; set; }
+
+        [JsonProperty("nonnervous", Required = Required.Always)]
+        public Nonnervous[] Nonnervous { get; set; }
+
+        [JsonProperty("nonvaluation", Required = Required.Always)]
+        public Nonvaluation[] Nonvaluation { get; set; }
+
+        [JsonProperty("occupationalist", Required = Required.Always)]
+        public OccupationalistElement[] Occupationalist { get; set; }
+
+        [JsonProperty("outrival", Required = Required.Always)]
+        public OutrivalElement[] Outrival { get; set; }
+
+        [JsonProperty("paleographically", Required = Required.Always)]
+        public Paleographically[] Paleographically { get; set; }
+
+        [JsonProperty("pamphletwise", Required = Required.Always)]
+        public Pamphletwise[] Pamphletwise { get; set; }
+
+        [JsonProperty("pediatrics", Required = Required.Always)]
+        public Pediatric[] Pediatrics { get; set; }
+
+        [JsonProperty("perceptive", Required = Required.Always)]
+        public bool[] Perceptive { get; set; }
+
+        [JsonProperty("piaculum", Required = Required.Always)]
+        public PiaculumElement[] Piaculum { get; set; }
+
+        [JsonProperty("piccadilly", Required = Required.Always)]
+        public Piccadilly[] Piccadilly { get; set; }
+
+        [JsonProperty("piffler", Required = Required.Always)]
+        public Piffler[] Piffler { get; set; }
+
+        [JsonProperty("pithful", Required = Required.Always)]
+        public Pithful[] Pithful { get; set; }
+
+        [JsonProperty("placuntitis", Required = Required.Always)]
+        public Placuntiti[] Placuntitis { get; set; }
+
+        [JsonProperty("plectopterous", Required = Required.Always)]
+        public Plectopterous[] Plectopterous { get; set; }
+
+        [JsonProperty("pneumocele", Required = Required.Always)]
+        public Pneumocele?[] Pneumocele { get; set; }
+
+        [JsonProperty("poliorcetic", Required = Required.Always)]
+        public Poliorcetic[] Poliorcetic { get; set; }
+
+        [JsonProperty("poormaster", Required = Required.Always)]
+        public Poormaster[] Poormaster { get; set; }
+
+        [JsonProperty("potwhisky", Required = Required.Always)]
+        public PotwhiskyElement[] Potwhisky { get; set; }
+
+        [JsonProperty("practicalizer", Required = Required.Always)]
+        public Practicalizer[] Practicalizer { get; set; }
+
+        [JsonProperty("prefreshman", Required = Required.Always)]
+        public PrefreshmanElement[] Prefreshman { get; set; }
+
+        [JsonProperty("prehensility", Required = Required.Always)]
+        public Prehensility[] Prehensility { get; set; }
+
+        [JsonProperty("prevoidance", Required = Required.Always)]
+        public Prevoidance[] Prevoidance { get; set; }
+
+        [JsonProperty("probant", Required = Required.Always)]
+        public Dictionary<string, long?>[] Probant { get; set; }
+
+        [JsonProperty("protext", Required = Required.Always)]
+        public Protext[] Protext { get; set; }
+    }
+
+    public partial record JurorClass
+    {
+        [JsonProperty("adipsy", Required = Required.AllowNull)]
+        public dynamic Adipsy { get; set; }
+
+        [JsonProperty("auxiliator", Required = Required.AllowNull)]
+        public dynamic Auxiliator { get; set; }
+
+        [JsonProperty("benda", Required = Required.AllowNull)]
+        public dynamic Benda { get; set; }
+
+        [JsonProperty("benjamin", Required = Required.AllowNull)]
+        public dynamic Benjamin { get; set; }
+
+        [JsonProperty("brandling", Required = Required.AllowNull)]
+        public dynamic Brandling { get; set; }
+
+        [JsonProperty("epicurishly", Required = Required.AllowNull)]
+        public dynamic Epicurishly { get; set; }
+
+        [JsonProperty("eremochaetous", Required = Required.AllowNull)]
+        public dynamic Eremochaetous { get; set; }
+
+        [JsonProperty("marten", Required = Required.AllowNull)]
+        public dynamic Marten { get; set; }
+
+        [JsonProperty("monocline", Required = Required.AllowNull)]
+        public dynamic Monocline { get; set; }
+
+        [JsonProperty("Olea", Required = Required.AllowNull)]
+        public dynamic Olea { get; set; }
+
+        [JsonProperty("palgat", Required = Required.AllowNull)]
+        public dynamic Palgat { get; set; }
+
+        [JsonProperty("pennyworth", Required = Required.AllowNull)]
+        public dynamic Pennyworth { get; set; }
+
+        [JsonProperty("pioury", Required = Required.AllowNull)]
+        public dynamic Pioury { get; set; }
+
+        [JsonProperty("pragmatistic", Required = Required.AllowNull)]
+        public dynamic Pragmatistic { get; set; }
+
+        [JsonProperty("stylelessness", Required = Required.AllowNull)]
+        public dynamic Stylelessness { get; set; }
+
+        [JsonProperty("systematical", Required = Required.AllowNull)]
+        public dynamic Systematical { get; set; }
+
+        [JsonProperty("thready", Required = Required.AllowNull)]
+        public dynamic Thready { get; set; }
+
+        [JsonProperty("uncontemporary", Required = Required.AllowNull)]
+        public dynamic Uncontemporary { get; set; }
+
+        [JsonProperty("uncouched", Required = Required.AllowNull)]
+        public dynamic Uncouched { get; set; }
+
+        [JsonProperty("uninhabitedness", Required = Required.AllowNull)]
+        public dynamic Uninhabitedness { get; set; }
+    }
+
+    public partial record LadronismClass
+    {
+        [JsonProperty("acclaimer", Required = Required.AllowNull)]
+        public dynamic Acclaimer { get; set; }
+
+        [JsonProperty("achree", Required = Required.AllowNull)]
+        public dynamic Achree { get; set; }
+
+        [JsonProperty("base", Required = Required.AllowNull)]
+        public dynamic Base { get; set; }
+
+        [JsonProperty("conundrumize", Required = Required.AllowNull)]
+        public dynamic Conundrumize { get; set; }
+
+        [JsonProperty("degerminator", Required = Required.AllowNull)]
+        public dynamic Degerminator { get; set; }
+
+        [JsonProperty("describable", Required = Required.AllowNull)]
+        public dynamic Describable { get; set; }
+
+        [JsonProperty("exasperatedly", Required = Required.AllowNull)]
+        public dynamic Exasperatedly { get; set; }
+
+        [JsonProperty("heroine", Required = Required.AllowNull)]
+        public dynamic Heroine { get; set; }
+
+        [JsonProperty("indazin", Required = Required.AllowNull)]
+        public dynamic Indazin { get; set; }
+
+        [JsonProperty("luteous", Required = Required.AllowNull)]
+        public dynamic Luteous { get; set; }
+
+        [JsonProperty("papular", Required = Required.AllowNull)]
+        public dynamic Papular { get; set; }
+
+        [JsonProperty("pritch", Required = Required.AllowNull)]
+        public dynamic Pritch { get; set; }
+
+        [JsonProperty("Prodenia", Required = Required.AllowNull)]
+        public dynamic Prodenia { get; set; }
+
+        [JsonProperty("seege", Required = Required.AllowNull)]
+        public dynamic Seege { get; set; }
+
+        [JsonProperty("shopgirl", Required = Required.AllowNull)]
+        public dynamic Shopgirl { get; set; }
+
+        [JsonProperty("tragedietta", Required = Required.AllowNull)]
+        public dynamic Tragedietta { get; set; }
+
+        [JsonProperty("unsparse", Required = Required.AllowNull)]
+        public dynamic Unsparse { get; set; }
+
+        [JsonProperty("uplook", Required = Required.AllowNull)]
+        public dynamic Uplook { get; set; }
+
+        [JsonProperty("vermiformis", Required = Required.AllowNull)]
+        public dynamic Vermiformis { get; set; }
+
+        [JsonProperty("whafabout", Required = Required.AllowNull)]
+        public dynamic Whafabout { get; set; }
+    }
+
+    public partial record LandlubberlyClass
+    {
+        [JsonProperty("acropoleis", Required = Required.AllowNull)]
+        public dynamic Acropoleis { get; set; }
+
+        [JsonProperty("aminate", Required = Required.AllowNull)]
+        public dynamic Aminate { get; set; }
+
+        [JsonProperty("Amyraldism", Required = Required.AllowNull)]
+        public dynamic Amyraldism { get; set; }
+
+        [JsonProperty("bipenniform", Required = Required.AllowNull)]
+        public dynamic Bipenniform { get; set; }
+
+        [JsonProperty("bugre", Required = Required.AllowNull)]
+        public dynamic Bugre { get; set; }
+
+        [JsonProperty("calycule", Required = Required.AllowNull)]
+        public dynamic Calycule { get; set; }
+
+        [JsonProperty("caoutchouc", Required = Required.AllowNull)]
+        public dynamic Caoutchouc { get; set; }
+
+        [JsonProperty("disprover", Required = Required.AllowNull)]
+        public dynamic Disprover { get; set; }
+
+        [JsonProperty("fitroot", Required = Required.AllowNull)]
+        public dynamic Fitroot { get; set; }
+
+        [JsonProperty("fulgently", Required = Required.AllowNull)]
+        public dynamic Fulgently { get; set; }
+
+        [JsonProperty("kickup", Required = Required.AllowNull)]
+        public dynamic Kickup { get; set; }
+
+        [JsonProperty("laevoversion", Required = Required.AllowNull)]
+        public dynamic Laevoversion { get; set; }
+
+        [JsonProperty("moter", Required = Required.AllowNull)]
+        public dynamic Moter { get; set; }
+
+        [JsonProperty("objectivity", Required = Required.AllowNull)]
+        public dynamic Objectivity { get; set; }
+
+        [JsonProperty("posterity", Required = Required.AllowNull)]
+        public dynamic Posterity { get; set; }
+
+        [JsonProperty("postnuptial", Required = Required.AllowNull)]
+        public dynamic Postnuptial { get; set; }
+
+        [JsonProperty("precedentary", Required = Required.AllowNull)]
+        public dynamic Precedentary { get; set; }
+
+        [JsonProperty("saddling", Required = Required.AllowNull)]
+        public dynamic Saddling { get; set; }
+
+        [JsonProperty("subcurrent", Required = Required.AllowNull)]
+        public dynamic Subcurrent { get; set; }
+
+        [JsonProperty("unrecriminative", Required = Required.AllowNull)]
+        public dynamic Unrecriminative { get; set; }
+    }
+
+    public partial record LupusClass
+    {
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("Chlorioninae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorioninae { get; set; }
+
+        [JsonProperty("Corvinae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Corvinae { get; set; }
+
+        [JsonProperty("Crassina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crassina { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("exiguity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Exiguity { get; set; }
+
+        [JsonProperty("farcist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Farcist { get; set; }
+
+        [JsonProperty("holographical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Holographical { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("ichthyophagan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ichthyophagan { get; set; }
+
+        [JsonProperty("implacable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Implacable { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("outshiner", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Outshiner { get; set; }
+
+        [JsonProperty("overweather", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overweather { get; set; }
+
+        [JsonProperty("protonegroid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Protonegroid { get; set; }
+
+        [JsonProperty("shallowish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shallowish { get; set; }
+
+        [JsonProperty("snoke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snoke { get; set; }
+
+        [JsonProperty("snout", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snout { get; set; }
+
+        [JsonProperty("surveillance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Surveillance { get; set; }
+
+        [JsonProperty("threshingtime", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Threshingtime { get; set; }
+
+        [JsonProperty("Thysanocarpus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thysanocarpus { get; set; }
+
+        [JsonProperty("unsignificantly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsignificantly { get; set; }
+
+        [JsonProperty("unsnap", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsnap { get; set; }
+
+        [JsonProperty("vendible", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Vendible { get; set; }
+    }
+
+    public partial record Maslin
+    {
+        [JsonProperty("Alicant", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alicant { get; set; }
+
+        [JsonProperty("antiatonement")]
+        public dynamic? Antiatonement { get; set; }
+
+        [JsonProperty("anticorrosive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Anticorrosive { get; set; }
+
+        [JsonProperty("aphidozer")]
+        public dynamic? Aphidozer { get; set; }
+
+        [JsonProperty("Bakuninist")]
+        public dynamic? Bakuninist { get; set; }
+
+        [JsonProperty("be", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Be { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chub", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chub { get; set; }
+
+        [JsonProperty("cuprosilicon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cuprosilicon { get; set; }
+
+        [JsonProperty("curtailedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Curtailedly { get; set; }
+
+        [JsonProperty("dellenite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dellenite { get; set; }
+
+        [JsonProperty("Dimitry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dimitry { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("edifying")]
+        public dynamic? Edifying { get; set; }
+
+        [JsonProperty("ethmoiditis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ethmoiditis { get; set; }
+
+        [JsonProperty("gastralgy")]
+        public dynamic? Gastralgy { get; set; }
+
+        [JsonProperty("goatherd", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goatherd { get; set; }
+
+        [JsonProperty("hammerdress", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hammerdress { get; set; }
+
+        [JsonProperty("hangfire")]
+        public dynamic? Hangfire { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lacunosity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lacunosity { get; set; }
+
+        [JsonProperty("longiloquence")]
+        public dynamic? Longiloquence { get; set; }
+
+        [JsonProperty("mameliere", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mameliere { get; set; }
+
+        [JsonProperty("motherless")]
+        public dynamic? Motherless { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("noncorrodible")]
+        public dynamic? Noncorrodible { get; set; }
+
+        [JsonProperty("nonsensicality")]
+        public dynamic? Nonsensicality { get; set; }
+
+        [JsonProperty("oafishly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Oafishly { get; set; }
+
+        [JsonProperty("pfund")]
+        public dynamic? Pfund { get; set; }
+
+        [JsonProperty("preadvisory")]
+        public dynamic? Preadvisory { get; set; }
+
+        [JsonProperty("retroflexed")]
+        public dynamic? Retroflexed { get; set; }
+
+        [JsonProperty("saccharulmic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Saccharulmic { get; set; }
+
+        [JsonProperty("scowlful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scowlful { get; set; }
+
+        [JsonProperty("secluded")]
+        public dynamic? Secluded { get; set; }
+
+        [JsonProperty("slackage")]
+        public dynamic? Slackage { get; set; }
+
+        [JsonProperty("sphaeridial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sphaeridial { get; set; }
+
+        [JsonProperty("spondulics")]
+        public dynamic? Spondulics { get; set; }
+
+        [JsonProperty("subsecive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subsecive { get; set; }
+
+        [JsonProperty("swellmobsman")]
+        public dynamic? Swellmobsman { get; set; }
+
+        [JsonProperty("trachyglossate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trachyglossate { get; set; }
+
+        [JsonProperty("trialogue")]
+        public dynamic? Trialogue { get; set; }
+
+        [JsonProperty("unassuaged", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unassuaged { get; set; }
+
+        [JsonProperty("ungross")]
+        public dynamic? Ungross { get; set; }
+
+        [JsonProperty("unjudiciously")]
+        public dynamic? Unjudiciously { get; set; }
+    }
+
+    public partial record MonaziteClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public dynamic Nonbookish { get; set; }
+    }
+
+    public partial record MonotheisticallyClass
+    {
+        [JsonProperty("blaspheme")]
+        public dynamic? Blaspheme { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("celiosalpingectomy")]
+        public dynamic? Celiosalpingectomy { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("consummativeness")]
+        public dynamic? Consummativeness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("egestive")]
+        public dynamic? Egestive { get; set; }
+
+        [JsonProperty("enchylema")]
+        public dynamic? Enchylema { get; set; }
+
+        [JsonProperty("gasconade")]
+        public dynamic? Gasconade { get; set; }
+
+        [JsonProperty("holidayer")]
+        public dynamic? Holidayer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("intuitionalism")]
+        public dynamic? Intuitionalism { get; set; }
+
+        [JsonProperty("lophiostomate")]
+        public dynamic? Lophiostomate { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("nonvolition")]
+        public dynamic? Nonvolition { get; set; }
+
+        [JsonProperty("palatableness")]
+        public dynamic? Palatableness { get; set; }
+
+        [JsonProperty("pimpery")]
+        public dynamic? Pimpery { get; set; }
+
+        [JsonProperty("previolation")]
+        public dynamic? Previolation { get; set; }
+
+        [JsonProperty("reconveyance")]
+        public dynamic? Reconveyance { get; set; }
+
+        [JsonProperty("registership")]
+        public dynamic? Registership { get; set; }
+
+        [JsonProperty("rhyacolite")]
+        public dynamic? Rhyacolite { get; set; }
+
+        [JsonProperty("smithereens")]
+        public dynamic? Smithereens { get; set; }
+
+        [JsonProperty("superedification")]
+        public dynamic? Superedification { get; set; }
+
+        [JsonProperty("trust")]
+        public dynamic? Trust { get; set; }
+
+        [JsonProperty("whitestone")]
+        public dynamic? Whitestone { get; set; }
+    }
+
+    public partial record Noncontributing
+    {
+        [JsonProperty("estevin", Required = Required.Always)]
+        public string Estevin { get; set; }
+
+        [JsonProperty("jolterhead", Required = Required.Always)]
+        public double Jolterhead { get; set; }
+
+        [JsonProperty("sauternes", Required = Required.Always)]
+        public long Sauternes { get; set; }
+
+        [JsonProperty("sparsely", Required = Required.Always)]
+        public bool Sparsely { get; set; }
+
+        [JsonProperty("unrequested", Required = Required.AllowNull)]
+        public dynamic Unrequested { get; set; }
+    }
+
+    public partial record OccupationalistClass
+    {
+        [JsonProperty("beholdable", Required = Required.AllowNull)]
+        public dynamic Beholdable { get; set; }
+
+        [JsonProperty("brotuliform", Required = Required.AllowNull)]
+        public dynamic Brotuliform { get; set; }
+
+        [JsonProperty("Chimakum", Required = Required.AllowNull)]
+        public dynamic Chimakum { get; set; }
+
+        [JsonProperty("doodler", Required = Required.AllowNull)]
+        public dynamic Doodler { get; set; }
+
+        [JsonProperty("emulsin", Required = Required.AllowNull)]
+        public dynamic Emulsin { get; set; }
+
+        [JsonProperty("Fin", Required = Required.AllowNull)]
+        public dynamic Fin { get; set; }
+
+        [JsonProperty("flourishing", Required = Required.AllowNull)]
+        public dynamic Flourishing { get; set; }
+
+        [JsonProperty("flueless", Required = Required.AllowNull)]
+        public dynamic Flueless { get; set; }
+
+        [JsonProperty("furtively", Required = Required.AllowNull)]
+        public dynamic Furtively { get; set; }
+
+        [JsonProperty("gritter", Required = Required.AllowNull)]
+        public dynamic Gritter { get; set; }
+
+        [JsonProperty("interwish", Required = Required.AllowNull)]
+        public dynamic Interwish { get; set; }
+
+        [JsonProperty("monoxylic", Required = Required.AllowNull)]
+        public dynamic Monoxylic { get; set; }
+
+        [JsonProperty("myristic", Required = Required.AllowNull)]
+        public dynamic Myristic { get; set; }
+
+        [JsonProperty("nightwear", Required = Required.AllowNull)]
+        public dynamic Nightwear { get; set; }
+
+        [JsonProperty("peruser", Required = Required.AllowNull)]
+        public dynamic Peruser { get; set; }
+
+        [JsonProperty("theoastrological", Required = Required.AllowNull)]
+        public dynamic Theoastrological { get; set; }
+
+        [JsonProperty("thumby", Required = Required.AllowNull)]
+        public dynamic Thumby { get; set; }
+
+        [JsonProperty("tingitid", Required = Required.AllowNull)]
+        public dynamic Tingitid { get; set; }
+
+        [JsonProperty("trailless", Required = Required.AllowNull)]
+        public dynamic Trailless { get; set; }
+
+        [JsonProperty("unpocketed", Required = Required.AllowNull)]
+        public dynamic Unpocketed { get; set; }
+    }
+
+    public partial record OutrivalClass
+    {
+        [JsonProperty("adroitly", Required = Required.AllowNull)]
+        public dynamic Adroitly { get; set; }
+
+        [JsonProperty("bridehood", Required = Required.AllowNull)]
+        public dynamic Bridehood { get; set; }
+
+        [JsonProperty("Castoroides", Required = Required.AllowNull)]
+        public dynamic Castoroides { get; set; }
+
+        [JsonProperty("Czechoslovak", Required = Required.AllowNull)]
+        public dynamic Czechoslovak { get; set; }
+
+        [JsonProperty("diagenesis", Required = Required.AllowNull)]
+        public dynamic Diagenesis { get; set; }
+
+        [JsonProperty("dihexahedron", Required = Required.AllowNull)]
+        public dynamic Dihexahedron { get; set; }
+
+        [JsonProperty("dopester", Required = Required.AllowNull)]
+        public dynamic Dopester { get; set; }
+
+        [JsonProperty("eumerism", Required = Required.AllowNull)]
+        public dynamic Eumerism { get; set; }
+
+        [JsonProperty("flyness", Required = Required.AllowNull)]
+        public dynamic Flyness { get; set; }
+
+        [JsonProperty("fouler", Required = Required.AllowNull)]
+        public dynamic Fouler { get; set; }
+
+        [JsonProperty("laudanosine", Required = Required.AllowNull)]
+        public dynamic Laudanosine { get; set; }
+
+        [JsonProperty("Lingulidae", Required = Required.AllowNull)]
+        public dynamic Lingulidae { get; set; }
+
+        [JsonProperty("minutary", Required = Required.AllowNull)]
+        public dynamic Minutary { get; set; }
+
+        [JsonProperty("mitra", Required = Required.AllowNull)]
+        public dynamic Mitra { get; set; }
+
+        [JsonProperty("opisthorchiasis", Required = Required.AllowNull)]
+        public dynamic Opisthorchiasis { get; set; }
+
+        [JsonProperty("pensively", Required = Required.AllowNull)]
+        public dynamic Pensively { get; set; }
+
+        [JsonProperty("pubigerous", Required = Required.AllowNull)]
+        public dynamic Pubigerous { get; set; }
+
+        [JsonProperty("rebellious", Required = Required.AllowNull)]
+        public dynamic Rebellious { get; set; }
+
+        [JsonProperty("recodify", Required = Required.AllowNull)]
+        public dynamic Recodify { get; set; }
+
+        [JsonProperty("unpaced", Required = Required.AllowNull)]
+        public dynamic Unpaced { get; set; }
+    }
+
+    public partial record PiaculumClass
+    {
+        [JsonProperty("alada", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alada { get; set; }
+
+        [JsonProperty("amphistomous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amphistomous { get; set; }
+
+        [JsonProperty("boysenberry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Boysenberry { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("decardinalize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Decardinalize { get; set; }
+
+        [JsonProperty("discouragement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Discouragement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("doitrified", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Doitrified { get; set; }
+
+        [JsonProperty("hexaspermous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hexaspermous { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("insinking", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Insinking { get; set; }
+
+        [JsonProperty("loathfulness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loathfulness { get; set; }
+
+        [JsonProperty("miasmatical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Miasmatical { get; set; }
+
+        [JsonProperty("neurofibril", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Neurofibril { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("phonendoscope", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Phonendoscope { get; set; }
+
+        [JsonProperty("pilferment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Pilferment { get; set; }
+
+        [JsonProperty("predismissory", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Predismissory { get; set; }
+
+        [JsonProperty("preinscription", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preinscription { get; set; }
+
+        [JsonProperty("quotative", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quotative { get; set; }
+
+        [JsonProperty("sienna", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sienna { get; set; }
+
+        [JsonProperty("thorax", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thorax { get; set; }
+
+        [JsonProperty("yachting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yachting { get; set; }
+
+        [JsonProperty("Zipper", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Zipper { get; set; }
+    }
+
+    public partial record Pneumocele
+    {
+        [JsonProperty("Carbonarism")]
+        public dynamic? Carbonarism { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cineolic")]
+        public dynamic? Cineolic { get; set; }
+
+        [JsonProperty("cobbly")]
+        public dynamic? Cobbly { get; set; }
+
+        [JsonProperty("conchyliferous")]
+        public dynamic? Conchyliferous { get; set; }
+
+        [JsonProperty("congregation")]
+        public dynamic? Congregation { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enterotomy")]
+        public dynamic? Enterotomy { get; set; }
+
+        [JsonProperty("entophytal")]
+        public dynamic? Entophytal { get; set; }
+
+        [JsonProperty("fewtrils")]
+        public dynamic? Fewtrils { get; set; }
+
+        [JsonProperty("herem")]
+        public dynamic? Herem { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Koniga")]
+        public dynamic? Koniga { get; set; }
+
+        [JsonProperty("meticulosity")]
+        public dynamic? Meticulosity { get; set; }
+
+        [JsonProperty("Micky")]
+        public dynamic? Micky { get; set; }
+
+        [JsonProperty("mismarriage")]
+        public dynamic? Mismarriage { get; set; }
+
+        [JsonProperty("neurotrophic")]
+        public dynamic? Neurotrophic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("persuasively")]
+        public dynamic? Persuasively { get; set; }
+
+        [JsonProperty("replaceable")]
+        public dynamic? Replaceable { get; set; }
+
+        [JsonProperty("silex")]
+        public dynamic? Silex { get; set; }
+
+        [JsonProperty("taillight")]
+        public dynamic? Taillight { get; set; }
+
+        [JsonProperty("unjealous")]
+        public dynamic? Unjealous { get; set; }
+
+        [JsonProperty("visitorial")]
+        public dynamic? Visitorial { get; set; }
+    }
+
+    public partial record PotwhiskyClass
+    {
+        [JsonProperty("arciform", Required = Required.AllowNull)]
+        public dynamic Arciform { get; set; }
+
+        [JsonProperty("cresolin", Required = Required.AllowNull)]
+        public dynamic Cresolin { get; set; }
+
+        [JsonProperty("disheartener", Required = Required.AllowNull)]
+        public dynamic Disheartener { get; set; }
+
+        [JsonProperty("disproportionable", Required = Required.AllowNull)]
+        public dynamic Disproportionable { get; set; }
+
+        [JsonProperty("Euchorda", Required = Required.AllowNull)]
+        public dynamic Euchorda { get; set; }
+
+        [JsonProperty("ferryway", Required = Required.AllowNull)]
+        public dynamic Ferryway { get; set; }
+
+        [JsonProperty("filamentiferous", Required = Required.AllowNull)]
+        public dynamic Filamentiferous { get; set; }
+
+        [JsonProperty("flemish", Required = Required.AllowNull)]
+        public dynamic Flemish { get; set; }
+
+        [JsonProperty("forgainst", Required = Required.AllowNull)]
+        public dynamic Forgainst { get; set; }
+
+        [JsonProperty("grainering", Required = Required.AllowNull)]
+        public dynamic Grainering { get; set; }
+
+        [JsonProperty("irrevoluble", Required = Required.AllowNull)]
+        public dynamic Irrevoluble { get; set; }
+
+        [JsonProperty("kindredship", Required = Required.AllowNull)]
+        public dynamic Kindredship { get; set; }
+
+        [JsonProperty("pinguitudinous", Required = Required.AllowNull)]
+        public dynamic Pinguitudinous { get; set; }
+
+        [JsonProperty("simpletonic", Required = Required.AllowNull)]
+        public dynamic Simpletonic { get; set; }
+
+        [JsonProperty("singsong", Required = Required.AllowNull)]
+        public dynamic Singsong { get; set; }
+
+        [JsonProperty("submergement", Required = Required.AllowNull)]
+        public dynamic Submergement { get; set; }
+
+        [JsonProperty("supraoesophagal", Required = Required.AllowNull)]
+        public dynamic Supraoesophagal { get; set; }
+
+        [JsonProperty("thrashel", Required = Required.AllowNull)]
+        public dynamic Thrashel { get; set; }
+
+        [JsonProperty("tyremesis", Required = Required.AllowNull)]
+        public dynamic Tyremesis { get; set; }
+
+        [JsonProperty("Yoruba", Required = Required.AllowNull)]
+        public dynamic Yoruba { get; set; }
+    }
+
+    public partial record PrefreshmanClass
+    {
+        [JsonProperty("azorubine", Required = Required.AllowNull)]
+        public dynamic Azorubine { get; set; }
+
+        [JsonProperty("choroiditis", Required = Required.AllowNull)]
+        public dynamic Choroiditis { get; set; }
+
+        [JsonProperty("coagulatory", Required = Required.AllowNull)]
+        public dynamic Coagulatory { get; set; }
+
+        [JsonProperty("cyclorama", Required = Required.AllowNull)]
+        public dynamic Cyclorama { get; set; }
+
+        [JsonProperty("Dolphus", Required = Required.AllowNull)]
+        public dynamic Dolphus { get; set; }
+
+        [JsonProperty("duckhearted", Required = Required.AllowNull)]
+        public dynamic Duckhearted { get; set; }
+
+        [JsonProperty("Ficus", Required = Required.AllowNull)]
+        public dynamic Ficus { get; set; }
+
+        [JsonProperty("Gemaric", Required = Required.AllowNull)]
+        public dynamic Gemaric { get; set; }
+
+        [JsonProperty("jugation", Required = Required.AllowNull)]
+        public dynamic Jugation { get; set; }
+
+        [JsonProperty("myoliposis", Required = Required.AllowNull)]
+        public dynamic Myoliposis { get; set; }
+
+        [JsonProperty("nonnomination", Required = Required.AllowNull)]
+        public dynamic Nonnomination { get; set; }
+
+        [JsonProperty("palay", Required = Required.AllowNull)]
+        public dynamic Palay { get; set; }
+
+        [JsonProperty("pentactinal", Required = Required.AllowNull)]
+        public dynamic Pentactinal { get; set; }
+
+        [JsonProperty("Phaet", Required = Required.AllowNull)]
+        public dynamic Phaet { get; set; }
+
+        [JsonProperty("piquant", Required = Required.AllowNull)]
+        public dynamic Piquant { get; set; }
+
+        [JsonProperty("registration", Required = Required.AllowNull)]
+        public dynamic Registration { get; set; }
+
+        [JsonProperty("remancipation", Required = Required.AllowNull)]
+        public dynamic Remancipation { get; set; }
+
+        [JsonProperty("scutatiform", Required = Required.AllowNull)]
+        public dynamic Scutatiform { get; set; }
+
+        [JsonProperty("theodolite", Required = Required.AllowNull)]
+        public dynamic Theodolite { get; set; }
+
+        [JsonProperty("underward", Required = Required.AllowNull)]
+        public dynamic Underward { get; set; }
+    }
+
+    public partial struct JurorElement
+    {
+        public bool? Bool;
+        public JurorClass? JurorClass;
+
+        public static implicit operator JurorElement(bool Bool) => new JurorElement { Bool = Bool };
+        public static implicit operator JurorElement(JurorClass JurorClass) => new JurorElement { JurorClass = JurorClass };
+    }
+
+    public partial struct Kongoni
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Kongoni(long[] IntegerArray) => new Kongoni { IntegerArray = IntegerArray };
+        public static implicit operator Kongoni(Dictionary<string, long> IntegerMap) => new Kongoni { IntegerMap = IntegerMap };
+    }
+
+    public partial struct LadronismElement
+    {
+        public double? Double;
+        public LadronismClass? LadronismClass;
+        public string? String;
+
+        public static implicit operator LadronismElement(double Double) => new LadronismElement { Double = Double };
+        public static implicit operator LadronismElement(LadronismClass LadronismClass) => new LadronismElement { LadronismClass = LadronismClass };
+        public static implicit operator LadronismElement(string String) => new LadronismElement { String = String };
+    }
+
+    public partial struct LandlubberlyElement
+    {
+        public bool? Bool;
+        public long? Integer;
+        public LandlubberlyClass? LandlubberlyClass;
+
+        public static implicit operator LandlubberlyElement(bool Bool) => new LandlubberlyElement { Bool = Bool };
+        public static implicit operator LandlubberlyElement(long Integer) => new LandlubberlyElement { Integer = Integer };
+        public static implicit operator LandlubberlyElement(LandlubberlyClass LandlubberlyClass) => new LandlubberlyElement { LandlubberlyClass = LandlubberlyClass };
+    }
+
+    public partial struct Listener
+    {
+        public long? Integer;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Listener(long Integer) => new Listener { Integer = Integer };
+        public static implicit operator Listener(dynamic[] NullArray) => new Listener { NullArray = NullArray };
+    }
+
+    public partial struct LupusElement
+    {
+        public long? Integer;
+        public LupusClass? LupusClass;
+
+        public static implicit operator LupusElement(long Integer) => new LupusElement { Integer = Integer };
+        public static implicit operator LupusElement(LupusClass LupusClass) => new LupusElement { LupusClass = LupusClass };
+    }
+
+    public partial struct MonaziteElement
+    {
+        public double? Double;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator MonaziteElement(double Double) => new MonaziteElement { Double = Double };
+        public static implicit operator MonaziteElement(MonaziteClass MonaziteClass) => new MonaziteElement { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Monoliteral
+    {
+        public bool? Bool;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Monoliteral(bool Bool) => new Monoliteral { Bool = Bool };
+        public static implicit operator Monoliteral(dynamic[] NullArray) => new Monoliteral { NullArray = NullArray };
+    }
+
+    public partial struct MonotheisticallyElement
+    {
+        public MonotheisticallyClass? MonotheisticallyClass;
+        public dynamic[]? NullArray;
+
+        public static implicit operator MonotheisticallyElement(MonotheisticallyClass MonotheisticallyClass) => new MonotheisticallyElement { MonotheisticallyClass = MonotheisticallyClass };
+        public static implicit operator MonotheisticallyElement(dynamic[] NullArray) => new MonotheisticallyElement { NullArray = NullArray };
+    }
+
+    public partial struct Montage
+    {
+        public double? Double;
+        public dynamic[]? NullArray;
+        public string? String;
+
+        public static implicit operator Montage(double Double) => new Montage { Double = Double };
+        public static implicit operator Montage(dynamic[] NullArray) => new Montage { NullArray = NullArray };
+        public static implicit operator Montage(string String) => new Montage { String = String };
+    }
+
+    public partial struct Moralness
+    {
+        public double? Double;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Moralness(double Double) => new Moralness { Double = Double };
+        public static implicit operator Moralness(dynamic[] NullArray) => new Moralness { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Double == null;
+    }
+
+    public partial struct Mulishly
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Mulishly(double Double) => new Mulishly { Double = Double };
+        public static implicit operator Mulishly(long[] IntegerArray) => new Mulishly { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Double == null;
+    }
+
+    public partial struct Myoscope
+    {
+        public bool? Bool;
+        public long? Integer;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Myoscope(bool Bool) => new Myoscope { Bool = Bool };
+        public static implicit operator Myoscope(long Integer) => new Myoscope { Integer = Integer };
+        public static implicit operator Myoscope(dynamic[] NullArray) => new Myoscope { NullArray = NullArray };
+    }
+
+    public partial struct Neuromastic
+    {
+        public double? Double;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Neuromastic(double Double) => new Neuromastic { Double = Double };
+        public static implicit operator Neuromastic(dynamic[] NullArray) => new Neuromastic { NullArray = NullArray };
+    }
+
+    public partial struct Nonnervous
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Nonnervous(bool Bool) => new Nonnervous { Bool = Bool };
+        public static implicit operator Nonnervous(long Integer) => new Nonnervous { Integer = Integer };
+    }
+
+    public partial struct Nonvaluation
+    {
+        public bool? Bool;
+        public double? Double;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Nonvaluation(bool Bool) => new Nonvaluation { Bool = Bool };
+        public static implicit operator Nonvaluation(double Double) => new Nonvaluation { Double = Double };
+        public static implicit operator Nonvaluation(dynamic[] NullArray) => new Nonvaluation { NullArray = NullArray };
+    }
+
+    public partial struct OccupationalistElement
+    {
+        public dynamic[]? NullArray;
+        public OccupationalistClass? OccupationalistClass;
+
+        public static implicit operator OccupationalistElement(dynamic[] NullArray) => new OccupationalistElement { NullArray = NullArray };
+        public static implicit operator OccupationalistElement(OccupationalistClass OccupationalistClass) => new OccupationalistElement { OccupationalistClass = OccupationalistClass };
+        public bool IsNull => NullArray == null && OccupationalistClass == null;
+    }
+
+    public partial struct OutrivalElement
+    {
+        public double? Double;
+        public OutrivalClass? OutrivalClass;
+
+        public static implicit operator OutrivalElement(double Double) => new OutrivalElement { Double = Double };
+        public static implicit operator OutrivalElement(OutrivalClass OutrivalClass) => new OutrivalElement { OutrivalClass = OutrivalClass };
+        public bool IsNull => OutrivalClass == null && Double == null;
+    }
+
+    public partial struct Paleographically
+    {
+        public double? Double;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Paleographically(double Double) => new Paleographically { Double = Double };
+        public static implicit operator Paleographically(Dictionary<string, long?> UnionMap) => new Paleographically { UnionMap = UnionMap };
+    }
+
+    public partial struct Pamphletwise
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Pamphletwise(long Integer) => new Pamphletwise { Integer = Integer };
+        public static implicit operator Pamphletwise(Dictionary<string, long> IntegerMap) => new Pamphletwise { IntegerMap = IntegerMap };
+        public static implicit operator Pamphletwise(string String) => new Pamphletwise { String = String };
+    }
+
+    public partial struct Pediatric
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Pediatric(bool Bool) => new Pediatric { Bool = Bool };
+        public static implicit operator Pediatric(double Double) => new Pediatric { Double = Double };
+        public bool IsNull => Bool == null && Double == null;
+    }
+
+    public partial struct PiaculumElement
+    {
+        public double? Double;
+        public PiaculumClass? PiaculumClass;
+
+        public static implicit operator PiaculumElement(double Double) => new PiaculumElement { Double = Double };
+        public static implicit operator PiaculumElement(PiaculumClass PiaculumClass) => new PiaculumElement { PiaculumClass = PiaculumClass };
+    }
+
+    public partial struct Piccadilly
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Piccadilly(double Double) => new Piccadilly { Double = Double };
+        public static implicit operator Piccadilly(string String) => new Piccadilly { String = String };
+        public bool IsNull => Double == null && String == null;
+    }
+
+    public partial struct Piffler
+    {
+        public MonaziteClass? MonaziteClass;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Piffler(MonaziteClass MonaziteClass) => new Piffler { MonaziteClass = MonaziteClass };
+        public static implicit operator Piffler(dynamic[] NullArray) => new Piffler { NullArray = NullArray };
+    }
+
+    public partial struct Pithful
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Pithful(bool Bool) => new Pithful { Bool = Bool };
+        public static implicit operator Pithful(long Integer) => new Pithful { Integer = Integer };
+        public bool IsNull => Bool == null && Integer == null;
+    }
+
+    public partial struct Placuntiti
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Placuntiti(long Integer) => new Placuntiti { Integer = Integer };
+        public static implicit operator Placuntiti(Dictionary<string, long> IntegerMap) => new Placuntiti { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Plectopterous
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Plectopterous(double Double) => new Plectopterous { Double = Double };
+        public static implicit operator Plectopterous(Dictionary<string, long> IntegerMap) => new Plectopterous { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Poliorcetic
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Poliorcetic(bool Bool) => new Poliorcetic { Bool = Bool };
+        public static implicit operator Poliorcetic(MonaziteClass MonaziteClass) => new Poliorcetic { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Poormaster
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Poormaster(long[] IntegerArray) => new Poormaster { IntegerArray = IntegerArray };
+        public static implicit operator Poormaster(Dictionary<string, long> IntegerMap) => new Poormaster { IntegerMap = IntegerMap };
+        public bool IsNull => IntegerArray == null && IntegerMap == null;
+    }
+
+    public partial struct PotwhiskyElement
+    {
+        public long? Integer;
+        public PotwhiskyClass? PotwhiskyClass;
+
+        public static implicit operator PotwhiskyElement(long Integer) => new PotwhiskyElement { Integer = Integer };
+        public static implicit operator PotwhiskyElement(PotwhiskyClass PotwhiskyClass) => new PotwhiskyElement { PotwhiskyClass = PotwhiskyClass };
+        public bool IsNull => PotwhiskyClass == null && Integer == null;
+    }
+
+    public partial struct Practicalizer
+    {
+        public MonaziteClass? MonaziteClass;
+        public dynamic[]? NullArray;
+        public string? String;
+
+        public static implicit operator Practicalizer(MonaziteClass MonaziteClass) => new Practicalizer { MonaziteClass = MonaziteClass };
+        public static implicit operator Practicalizer(dynamic[] NullArray) => new Practicalizer { NullArray = NullArray };
+        public static implicit operator Practicalizer(string String) => new Practicalizer { String = String };
+    }
+
+    public partial struct PrefreshmanElement
+    {
+        public dynamic[]? NullArray;
+        public PrefreshmanClass? PrefreshmanClass;
+        public string? String;
+
+        public static implicit operator PrefreshmanElement(dynamic[] NullArray) => new PrefreshmanElement { NullArray = NullArray };
+        public static implicit operator PrefreshmanElement(PrefreshmanClass PrefreshmanClass) => new PrefreshmanElement { PrefreshmanClass = PrefreshmanClass };
+        public static implicit operator PrefreshmanElement(string String) => new PrefreshmanElement { String = String };
+    }
+
+    public partial struct Prehensility
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Prehensility(bool Bool) => new Prehensility { Bool = Bool };
+        public static implicit operator Prehensility(MonaziteClass MonaziteClass) => new Prehensility { MonaziteClass = MonaziteClass };
+        public static implicit operator Prehensility(dynamic[] NullArray) => new Prehensility { NullArray = NullArray };
+    }
+
+    public partial struct Prevoidance
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Prevoidance(long Integer) => new Prevoidance { Integer = Integer };
+        public static implicit operator Prevoidance(long[] IntegerArray) => new Prevoidance { IntegerArray = IntegerArray };
+        public static implicit operator Prevoidance(MonaziteClass MonaziteClass) => new Prevoidance { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Protext
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Protext(bool Bool) => new Protext { Bool = Bool };
+        public static implicit operator Protext(long[] IntegerArray) => new Protext { IntegerArray = IntegerArray };
+        public static implicit operator Protext(MonaziteClass MonaziteClass) => new Protext { MonaziteClass = MonaziteClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                JurorElementConverter.Singleton,
+                KongoniConverter.Singleton,
+                LadronismElementConverter.Singleton,
+                LandlubberlyElementConverter.Singleton,
+                ListenerConverter.Singleton,
+                LupusElementConverter.Singleton,
+                MonaziteElementConverter.Singleton,
+                MonoliteralConverter.Singleton,
+                MonotheisticallyElementConverter.Singleton,
+                MontageConverter.Singleton,
+                MoralnessConverter.Singleton,
+                MulishlyConverter.Singleton,
+                MyoscopeConverter.Singleton,
+                NeuromasticConverter.Singleton,
+                NonnervousConverter.Singleton,
+                NonvaluationConverter.Singleton,
+                OccupationalistElementConverter.Singleton,
+                OutrivalElementConverter.Singleton,
+                PaleographicallyConverter.Singleton,
+                PamphletwiseConverter.Singleton,
+                PediatricConverter.Singleton,
+                PiaculumElementConverter.Singleton,
+                PiccadillyConverter.Singleton,
+                PifflerConverter.Singleton,
+                PithfulConverter.Singleton,
+                PlacuntitiConverter.Singleton,
+                PlectopterousConverter.Singleton,
+                PoliorceticConverter.Singleton,
+                PoormasterConverter.Singleton,
+                PotwhiskyElementConverter.Singleton,
+                PracticalizerConverter.Singleton,
+                PrefreshmanElementConverter.Singleton,
+                PrehensilityConverter.Singleton,
+                PrevoidanceConverter.Singleton,
+                ProtextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class JurorElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(JurorElement) || t == typeof(JurorElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new JurorElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<JurorClass>(reader);
+                    return new JurorElement { JurorClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type JurorElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (JurorElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.JurorClass != null)
+            {
+                serializer.Serialize(writer, value.JurorClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type JurorElement");
+        }
+
+        public static readonly JurorElementConverter Singleton = new JurorElementConverter();
+    }
+
+    internal class KongoniConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kongoni) || t == typeof(Kongoni?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Kongoni { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Kongoni { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Kongoni");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Kongoni)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Kongoni");
+        }
+
+        public static readonly KongoniConverter Singleton = new KongoniConverter();
+    }
+
+    internal class LadronismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LadronismElement) || t == typeof(LadronismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new LadronismElement { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LadronismElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LadronismClass>(reader);
+                    return new LadronismElement { LadronismClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LadronismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LadronismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LadronismClass != null)
+            {
+                serializer.Serialize(writer, value.LadronismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LadronismElement");
+        }
+
+        public static readonly LadronismElementConverter Singleton = new LadronismElementConverter();
+    }
+
+    internal class LandlubberlyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LandlubberlyElement) || t == typeof(LandlubberlyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LandlubberlyElement { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new LandlubberlyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LandlubberlyClass>(reader);
+                    return new LandlubberlyElement { LandlubberlyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LandlubberlyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LandlubberlyElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.LandlubberlyClass != null)
+            {
+                serializer.Serialize(writer, value.LandlubberlyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LandlubberlyElement");
+        }
+
+        public static readonly LandlubberlyElementConverter Singleton = new LandlubberlyElementConverter();
+    }
+
+    internal class ListenerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Listener) || t == typeof(Listener?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Listener { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Listener { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Listener");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Listener)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Listener");
+        }
+
+        public static readonly ListenerConverter Singleton = new ListenerConverter();
+    }
+
+    internal class LupusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LupusElement) || t == typeof(LupusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LupusElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LupusClass>(reader);
+                    return new LupusElement { LupusClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LupusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LupusElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.LupusClass != null)
+            {
+                serializer.Serialize(writer, value.LupusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LupusElement");
+        }
+
+        public static readonly LupusElementConverter Singleton = new LupusElementConverter();
+    }
+
+    internal class MonaziteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonaziteElement) || t == typeof(MonaziteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new MonaziteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new MonaziteElement { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type MonaziteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonaziteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonaziteElement");
+        }
+
+        public static readonly MonaziteElementConverter Singleton = new MonaziteElementConverter();
+    }
+
+    internal class MonoliteralConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Monoliteral) || t == typeof(Monoliteral?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Monoliteral { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Monoliteral { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Monoliteral");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Monoliteral)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Monoliteral");
+        }
+
+        public static readonly MonoliteralConverter Singleton = new MonoliteralConverter();
+    }
+
+    internal class MonotheisticallyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonotheisticallyElement) || t == typeof(MonotheisticallyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonotheisticallyClass>(reader);
+                    return new MonotheisticallyElement { MonotheisticallyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new MonotheisticallyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type MonotheisticallyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonotheisticallyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonotheisticallyClass != null)
+            {
+                serializer.Serialize(writer, value.MonotheisticallyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonotheisticallyElement");
+        }
+
+        public static readonly MonotheisticallyElementConverter Singleton = new MonotheisticallyElementConverter();
+    }
+
+    internal class MontageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Montage) || t == typeof(Montage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Montage { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Montage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Montage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Montage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Montage)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Montage");
+        }
+
+        public static readonly MontageConverter Singleton = new MontageConverter();
+    }
+
+    internal class MoralnessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Moralness) || t == typeof(Moralness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Moralness { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Moralness { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Moralness { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Moralness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Moralness)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Moralness");
+        }
+
+        public static readonly MoralnessConverter Singleton = new MoralnessConverter();
+    }
+
+    internal class MulishlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Mulishly) || t == typeof(Mulishly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Mulishly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Mulishly { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Mulishly { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Mulishly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Mulishly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Mulishly");
+        }
+
+        public static readonly MulishlyConverter Singleton = new MulishlyConverter();
+    }
+
+    internal class MyoscopeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Myoscope) || t == typeof(Myoscope?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Myoscope { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Myoscope { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Myoscope { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Myoscope");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Myoscope)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Myoscope");
+        }
+
+        public static readonly MyoscopeConverter Singleton = new MyoscopeConverter();
+    }
+
+    internal class NeuromasticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Neuromastic) || t == typeof(Neuromastic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Neuromastic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Neuromastic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Neuromastic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Neuromastic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Neuromastic");
+        }
+
+        public static readonly NeuromasticConverter Singleton = new NeuromasticConverter();
+    }
+
+    internal class NonnervousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonnervous) || t == typeof(Nonnervous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Nonnervous { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonnervous { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonnervous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonnervous)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonnervous");
+        }
+
+        public static readonly NonnervousConverter Singleton = new NonnervousConverter();
+    }
+
+    internal class NonvaluationConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonvaluation) || t == typeof(Nonvaluation?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Nonvaluation { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonvaluation { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Nonvaluation { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonvaluation");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonvaluation)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonvaluation");
+        }
+
+        public static readonly NonvaluationConverter Singleton = new NonvaluationConverter();
+    }
+
+    internal class OccupationalistElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OccupationalistElement) || t == typeof(OccupationalistElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OccupationalistElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OccupationalistClass>(reader);
+                    return new OccupationalistElement { OccupationalistClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new OccupationalistElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OccupationalistElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OccupationalistElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.OccupationalistClass != null)
+            {
+                serializer.Serialize(writer, value.OccupationalistClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OccupationalistElement");
+        }
+
+        public static readonly OccupationalistElementConverter Singleton = new OccupationalistElementConverter();
+    }
+
+    internal class OutrivalElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OutrivalElement) || t == typeof(OutrivalElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OutrivalElement { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new OutrivalElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OutrivalClass>(reader);
+                    return new OutrivalElement { OutrivalClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type OutrivalElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OutrivalElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OutrivalClass != null)
+            {
+                serializer.Serialize(writer, value.OutrivalClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OutrivalElement");
+        }
+
+        public static readonly OutrivalElementConverter Singleton = new OutrivalElementConverter();
+    }
+
+    internal class PaleographicallyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Paleographically) || t == typeof(Paleographically?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Paleographically { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Paleographically { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Paleographically");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Paleographically)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Paleographically");
+        }
+
+        public static readonly PaleographicallyConverter Singleton = new PaleographicallyConverter();
+    }
+
+    internal class PamphletwiseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pamphletwise) || t == typeof(Pamphletwise?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pamphletwise { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Pamphletwise { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Pamphletwise { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Pamphletwise");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pamphletwise)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pamphletwise");
+        }
+
+        public static readonly PamphletwiseConverter Singleton = new PamphletwiseConverter();
+    }
+
+    internal class PediatricConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pediatric) || t == typeof(Pediatric?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pediatric { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Pediatric { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pediatric { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pediatric");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pediatric)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pediatric");
+        }
+
+        public static readonly PediatricConverter Singleton = new PediatricConverter();
+    }
+
+    internal class PiaculumElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PiaculumElement) || t == typeof(PiaculumElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PiaculumElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PiaculumClass>(reader);
+                    return new PiaculumElement { PiaculumClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PiaculumElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PiaculumElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.PiaculumClass != null)
+            {
+                serializer.Serialize(writer, value.PiaculumClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PiaculumElement");
+        }
+
+        public static readonly PiaculumElementConverter Singleton = new PiaculumElementConverter();
+    }
+
+    internal class PiccadillyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piccadilly) || t == typeof(Piccadilly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Piccadilly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Piccadilly { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Piccadilly { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Piccadilly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piccadilly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piccadilly");
+        }
+
+        public static readonly PiccadillyConverter Singleton = new PiccadillyConverter();
+    }
+
+    internal class PifflerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piffler) || t == typeof(Piffler?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Piffler { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Piffler { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Piffler");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piffler)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piffler");
+        }
+
+        public static readonly PifflerConverter Singleton = new PifflerConverter();
+    }
+
+    internal class PithfulConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pithful) || t == typeof(Pithful?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pithful { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pithful { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pithful { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pithful");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pithful)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pithful");
+        }
+
+        public static readonly PithfulConverter Singleton = new PithfulConverter();
+    }
+
+    internal class PlacuntitiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Placuntiti) || t == typeof(Placuntiti?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Placuntiti { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Placuntiti { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Placuntiti");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Placuntiti)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Placuntiti");
+        }
+
+        public static readonly PlacuntitiConverter Singleton = new PlacuntitiConverter();
+    }
+
+    internal class PlectopterousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Plectopterous) || t == typeof(Plectopterous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Plectopterous { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Plectopterous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Plectopterous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Plectopterous)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Plectopterous");
+        }
+
+        public static readonly PlectopterousConverter Singleton = new PlectopterousConverter();
+    }
+
+    internal class PoliorceticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poliorcetic) || t == typeof(Poliorcetic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Poliorcetic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Poliorcetic { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Poliorcetic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poliorcetic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poliorcetic");
+        }
+
+        public static readonly PoliorceticConverter Singleton = new PoliorceticConverter();
+    }
+
+    internal class PoormasterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poormaster) || t == typeof(Poormaster?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Poormaster { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Poormaster { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Poormaster { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Poormaster");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poormaster)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poormaster");
+        }
+
+        public static readonly PoormasterConverter Singleton = new PoormasterConverter();
+    }
+
+    internal class PotwhiskyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PotwhiskyElement) || t == typeof(PotwhiskyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new PotwhiskyElement { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PotwhiskyElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PotwhiskyClass>(reader);
+                    return new PotwhiskyElement { PotwhiskyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PotwhiskyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PotwhiskyElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PotwhiskyClass != null)
+            {
+                serializer.Serialize(writer, value.PotwhiskyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PotwhiskyElement");
+        }
+
+        public static readonly PotwhiskyElementConverter Singleton = new PotwhiskyElementConverter();
+    }
+
+    internal class PracticalizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Practicalizer) || t == typeof(Practicalizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Practicalizer { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Practicalizer { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Practicalizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Practicalizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Practicalizer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Practicalizer");
+        }
+
+        public static readonly PracticalizerConverter Singleton = new PracticalizerConverter();
+    }
+
+    internal class PrefreshmanElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PrefreshmanElement) || t == typeof(PrefreshmanElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new PrefreshmanElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PrefreshmanClass>(reader);
+                    return new PrefreshmanElement { PrefreshmanClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new PrefreshmanElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PrefreshmanElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PrefreshmanElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.PrefreshmanClass != null)
+            {
+                serializer.Serialize(writer, value.PrefreshmanClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PrefreshmanElement");
+        }
+
+        public static readonly PrefreshmanElementConverter Singleton = new PrefreshmanElementConverter();
+    }
+
+    internal class PrehensilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prehensility) || t == typeof(Prehensility?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Prehensility { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prehensility { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Prehensility { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prehensility");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prehensility)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prehensility");
+        }
+
+        public static readonly PrehensilityConverter Singleton = new PrehensilityConverter();
+    }
+
+    internal class PrevoidanceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prevoidance) || t == typeof(Prevoidance?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Prevoidance { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prevoidance { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Prevoidance { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prevoidance");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prevoidance)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prevoidance");
+        }
+
+        public static readonly PrevoidanceConverter Singleton = new PrevoidanceConverter();
+    }
+
+    internal class ProtextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protext) || t == typeof(Protext?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Protext { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Protext { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Protext { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protext");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protext)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protext");
+        }
+
+        public static readonly ProtextConverter Singleton = new ProtextConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations3.json/array-type-list--e30a0413f432/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations3.json/array-type-list--e30a0413f432/QuickType.cs
new file mode 100644
index 0000000..0a12b59
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations3.json/array-type-list--e30a0413f432/QuickType.cs
@@ -0,0 +1,2957 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("juror", Required = Required.Always)]
+        public List<JurorElement> Juror { get; set; }
+
+        [JsonProperty("kongoni", Required = Required.Always)]
+        public List<Kongoni> Kongoni { get; set; }
+
+        [JsonProperty("ladronism", Required = Required.Always)]
+        public List<LadronismElement> Ladronism { get; set; }
+
+        [JsonProperty("landlubberly", Required = Required.Always)]
+        public List<LandlubberlyElement> Landlubberly { get; set; }
+
+        [JsonProperty("listener", Required = Required.Always)]
+        public List<Listener> Listener { get; set; }
+
+        [JsonProperty("lupus", Required = Required.Always)]
+        public List<LupusElement> Lupus { get; set; }
+
+        [JsonProperty("maslin", Required = Required.Always)]
+        public List<Maslin> Maslin { get; set; }
+
+        [JsonProperty("monazite", Required = Required.Always)]
+        public List<MonaziteElement> Monazite { get; set; }
+
+        [JsonProperty("monoliteral", Required = Required.Always)]
+        public List<Monoliteral> Monoliteral { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.Always)]
+        public List<MonotheisticallyElement> Monotheistically { get; set; }
+
+        [JsonProperty("montage", Required = Required.Always)]
+        public List<Montage> Montage { get; set; }
+
+        [JsonProperty("moralness", Required = Required.Always)]
+        public List<Moralness> Moralness { get; set; }
+
+        [JsonProperty("mowra", Required = Required.Always)]
+        public List<MonaziteClass?> Mowra { get; set; }
+
+        [JsonProperty("mulishly", Required = Required.Always)]
+        public List<Mulishly> Mulishly { get; set; }
+
+        [JsonProperty("myoscope", Required = Required.Always)]
+        public List<Myoscope> Myoscope { get; set; }
+
+        [JsonProperty("nach", Required = Required.Always)]
+        public List<List<long?>?> Nach { get; set; }
+
+        [JsonProperty("neuromastic", Required = Required.Always)]
+        public List<Neuromastic> Neuromastic { get; set; }
+
+        [JsonProperty("noncontributing", Required = Required.Always)]
+        public List<Noncontributing> Noncontributing { get; set; }
+
+        [JsonProperty("nonnervous", Required = Required.Always)]
+        public List<Nonnervous> Nonnervous { get; set; }
+
+        [JsonProperty("nonvaluation", Required = Required.Always)]
+        public List<Nonvaluation> Nonvaluation { get; set; }
+
+        [JsonProperty("occupationalist", Required = Required.Always)]
+        public List<OccupationalistElement> Occupationalist { get; set; }
+
+        [JsonProperty("outrival", Required = Required.Always)]
+        public List<OutrivalElement> Outrival { get; set; }
+
+        [JsonProperty("paleographically", Required = Required.Always)]
+        public List<Paleographically> Paleographically { get; set; }
+
+        [JsonProperty("pamphletwise", Required = Required.Always)]
+        public List<Pamphletwise> Pamphletwise { get; set; }
+
+        [JsonProperty("pediatrics", Required = Required.Always)]
+        public List<Pediatric> Pediatrics { get; set; }
+
+        [JsonProperty("perceptive", Required = Required.Always)]
+        public List<bool> Perceptive { get; set; }
+
+        [JsonProperty("piaculum", Required = Required.Always)]
+        public List<PiaculumElement> Piaculum { get; set; }
+
+        [JsonProperty("piccadilly", Required = Required.Always)]
+        public List<Piccadilly> Piccadilly { get; set; }
+
+        [JsonProperty("piffler", Required = Required.Always)]
+        public List<Piffler> Piffler { get; set; }
+
+        [JsonProperty("pithful", Required = Required.Always)]
+        public List<Pithful> Pithful { get; set; }
+
+        [JsonProperty("placuntitis", Required = Required.Always)]
+        public List<Placuntiti> Placuntitis { get; set; }
+
+        [JsonProperty("plectopterous", Required = Required.Always)]
+        public List<Plectopterous> Plectopterous { get; set; }
+
+        [JsonProperty("pneumocele", Required = Required.Always)]
+        public List<Pneumocele?> Pneumocele { get; set; }
+
+        [JsonProperty("poliorcetic", Required = Required.Always)]
+        public List<Poliorcetic> Poliorcetic { get; set; }
+
+        [JsonProperty("poormaster", Required = Required.Always)]
+        public List<Poormaster> Poormaster { get; set; }
+
+        [JsonProperty("potwhisky", Required = Required.Always)]
+        public List<PotwhiskyElement> Potwhisky { get; set; }
+
+        [JsonProperty("practicalizer", Required = Required.Always)]
+        public List<Practicalizer> Practicalizer { get; set; }
+
+        [JsonProperty("prefreshman", Required = Required.Always)]
+        public List<PrefreshmanElement> Prefreshman { get; set; }
+
+        [JsonProperty("prehensility", Required = Required.Always)]
+        public List<Prehensility> Prehensility { get; set; }
+
+        [JsonProperty("prevoidance", Required = Required.Always)]
+        public List<Prevoidance> Prevoidance { get; set; }
+
+        [JsonProperty("probant", Required = Required.Always)]
+        public List<Dictionary<string, long?>> Probant { get; set; }
+
+        [JsonProperty("protext", Required = Required.Always)]
+        public List<Protext> Protext { get; set; }
+    }
+
+    public partial record JurorClass
+    {
+        [JsonProperty("adipsy", Required = Required.AllowNull)]
+        public object Adipsy { get; set; }
+
+        [JsonProperty("auxiliator", Required = Required.AllowNull)]
+        public object Auxiliator { get; set; }
+
+        [JsonProperty("benda", Required = Required.AllowNull)]
+        public object Benda { get; set; }
+
+        [JsonProperty("benjamin", Required = Required.AllowNull)]
+        public object Benjamin { get; set; }
+
+        [JsonProperty("brandling", Required = Required.AllowNull)]
+        public object Brandling { get; set; }
+
+        [JsonProperty("epicurishly", Required = Required.AllowNull)]
+        public object Epicurishly { get; set; }
+
+        [JsonProperty("eremochaetous", Required = Required.AllowNull)]
+        public object Eremochaetous { get; set; }
+
+        [JsonProperty("marten", Required = Required.AllowNull)]
+        public object Marten { get; set; }
+
+        [JsonProperty("monocline", Required = Required.AllowNull)]
+        public object Monocline { get; set; }
+
+        [JsonProperty("Olea", Required = Required.AllowNull)]
+        public object Olea { get; set; }
+
+        [JsonProperty("palgat", Required = Required.AllowNull)]
+        public object Palgat { get; set; }
+
+        [JsonProperty("pennyworth", Required = Required.AllowNull)]
+        public object Pennyworth { get; set; }
+
+        [JsonProperty("pioury", Required = Required.AllowNull)]
+        public object Pioury { get; set; }
+
+        [JsonProperty("pragmatistic", Required = Required.AllowNull)]
+        public object Pragmatistic { get; set; }
+
+        [JsonProperty("stylelessness", Required = Required.AllowNull)]
+        public object Stylelessness { get; set; }
+
+        [JsonProperty("systematical", Required = Required.AllowNull)]
+        public object Systematical { get; set; }
+
+        [JsonProperty("thready", Required = Required.AllowNull)]
+        public object Thready { get; set; }
+
+        [JsonProperty("uncontemporary", Required = Required.AllowNull)]
+        public object Uncontemporary { get; set; }
+
+        [JsonProperty("uncouched", Required = Required.AllowNull)]
+        public object Uncouched { get; set; }
+
+        [JsonProperty("uninhabitedness", Required = Required.AllowNull)]
+        public object Uninhabitedness { get; set; }
+    }
+
+    public partial record LadronismClass
+    {
+        [JsonProperty("acclaimer", Required = Required.AllowNull)]
+        public object Acclaimer { get; set; }
+
+        [JsonProperty("achree", Required = Required.AllowNull)]
+        public object Achree { get; set; }
+
+        [JsonProperty("base", Required = Required.AllowNull)]
+        public object Base { get; set; }
+
+        [JsonProperty("conundrumize", Required = Required.AllowNull)]
+        public object Conundrumize { get; set; }
+
+        [JsonProperty("degerminator", Required = Required.AllowNull)]
+        public object Degerminator { get; set; }
+
+        [JsonProperty("describable", Required = Required.AllowNull)]
+        public object Describable { get; set; }
+
+        [JsonProperty("exasperatedly", Required = Required.AllowNull)]
+        public object Exasperatedly { get; set; }
+
+        [JsonProperty("heroine", Required = Required.AllowNull)]
+        public object Heroine { get; set; }
+
+        [JsonProperty("indazin", Required = Required.AllowNull)]
+        public object Indazin { get; set; }
+
+        [JsonProperty("luteous", Required = Required.AllowNull)]
+        public object Luteous { get; set; }
+
+        [JsonProperty("papular", Required = Required.AllowNull)]
+        public object Papular { get; set; }
+
+        [JsonProperty("pritch", Required = Required.AllowNull)]
+        public object Pritch { get; set; }
+
+        [JsonProperty("Prodenia", Required = Required.AllowNull)]
+        public object Prodenia { get; set; }
+
+        [JsonProperty("seege", Required = Required.AllowNull)]
+        public object Seege { get; set; }
+
+        [JsonProperty("shopgirl", Required = Required.AllowNull)]
+        public object Shopgirl { get; set; }
+
+        [JsonProperty("tragedietta", Required = Required.AllowNull)]
+        public object Tragedietta { get; set; }
+
+        [JsonProperty("unsparse", Required = Required.AllowNull)]
+        public object Unsparse { get; set; }
+
+        [JsonProperty("uplook", Required = Required.AllowNull)]
+        public object Uplook { get; set; }
+
+        [JsonProperty("vermiformis", Required = Required.AllowNull)]
+        public object Vermiformis { get; set; }
+
+        [JsonProperty("whafabout", Required = Required.AllowNull)]
+        public object Whafabout { get; set; }
+    }
+
+    public partial record LandlubberlyClass
+    {
+        [JsonProperty("acropoleis", Required = Required.AllowNull)]
+        public object Acropoleis { get; set; }
+
+        [JsonProperty("aminate", Required = Required.AllowNull)]
+        public object Aminate { get; set; }
+
+        [JsonProperty("Amyraldism", Required = Required.AllowNull)]
+        public object Amyraldism { get; set; }
+
+        [JsonProperty("bipenniform", Required = Required.AllowNull)]
+        public object Bipenniform { get; set; }
+
+        [JsonProperty("bugre", Required = Required.AllowNull)]
+        public object Bugre { get; set; }
+
+        [JsonProperty("calycule", Required = Required.AllowNull)]
+        public object Calycule { get; set; }
+
+        [JsonProperty("caoutchouc", Required = Required.AllowNull)]
+        public object Caoutchouc { get; set; }
+
+        [JsonProperty("disprover", Required = Required.AllowNull)]
+        public object Disprover { get; set; }
+
+        [JsonProperty("fitroot", Required = Required.AllowNull)]
+        public object Fitroot { get; set; }
+
+        [JsonProperty("fulgently", Required = Required.AllowNull)]
+        public object Fulgently { get; set; }
+
+        [JsonProperty("kickup", Required = Required.AllowNull)]
+        public object Kickup { get; set; }
+
+        [JsonProperty("laevoversion", Required = Required.AllowNull)]
+        public object Laevoversion { get; set; }
+
+        [JsonProperty("moter", Required = Required.AllowNull)]
+        public object Moter { get; set; }
+
+        [JsonProperty("objectivity", Required = Required.AllowNull)]
+        public object Objectivity { get; set; }
+
+        [JsonProperty("posterity", Required = Required.AllowNull)]
+        public object Posterity { get; set; }
+
+        [JsonProperty("postnuptial", Required = Required.AllowNull)]
+        public object Postnuptial { get; set; }
+
+        [JsonProperty("precedentary", Required = Required.AllowNull)]
+        public object Precedentary { get; set; }
+
+        [JsonProperty("saddling", Required = Required.AllowNull)]
+        public object Saddling { get; set; }
+
+        [JsonProperty("subcurrent", Required = Required.AllowNull)]
+        public object Subcurrent { get; set; }
+
+        [JsonProperty("unrecriminative", Required = Required.AllowNull)]
+        public object Unrecriminative { get; set; }
+    }
+
+    public partial record LupusClass
+    {
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("Chlorioninae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorioninae { get; set; }
+
+        [JsonProperty("Corvinae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Corvinae { get; set; }
+
+        [JsonProperty("Crassina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crassina { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("exiguity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Exiguity { get; set; }
+
+        [JsonProperty("farcist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Farcist { get; set; }
+
+        [JsonProperty("holographical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Holographical { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("ichthyophagan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ichthyophagan { get; set; }
+
+        [JsonProperty("implacable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Implacable { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("outshiner", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Outshiner { get; set; }
+
+        [JsonProperty("overweather", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overweather { get; set; }
+
+        [JsonProperty("protonegroid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Protonegroid { get; set; }
+
+        [JsonProperty("shallowish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shallowish { get; set; }
+
+        [JsonProperty("snoke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snoke { get; set; }
+
+        [JsonProperty("snout", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snout { get; set; }
+
+        [JsonProperty("surveillance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Surveillance { get; set; }
+
+        [JsonProperty("threshingtime", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Threshingtime { get; set; }
+
+        [JsonProperty("Thysanocarpus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thysanocarpus { get; set; }
+
+        [JsonProperty("unsignificantly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsignificantly { get; set; }
+
+        [JsonProperty("unsnap", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsnap { get; set; }
+
+        [JsonProperty("vendible", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Vendible { get; set; }
+    }
+
+    public partial record Maslin
+    {
+        [JsonProperty("Alicant", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alicant { get; set; }
+
+        [JsonProperty("antiatonement")]
+        public object? Antiatonement { get; set; }
+
+        [JsonProperty("anticorrosive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Anticorrosive { get; set; }
+
+        [JsonProperty("aphidozer")]
+        public object? Aphidozer { get; set; }
+
+        [JsonProperty("Bakuninist")]
+        public object? Bakuninist { get; set; }
+
+        [JsonProperty("be", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Be { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chub", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chub { get; set; }
+
+        [JsonProperty("cuprosilicon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cuprosilicon { get; set; }
+
+        [JsonProperty("curtailedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Curtailedly { get; set; }
+
+        [JsonProperty("dellenite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dellenite { get; set; }
+
+        [JsonProperty("Dimitry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dimitry { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("edifying")]
+        public object? Edifying { get; set; }
+
+        [JsonProperty("ethmoiditis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ethmoiditis { get; set; }
+
+        [JsonProperty("gastralgy")]
+        public object? Gastralgy { get; set; }
+
+        [JsonProperty("goatherd", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goatherd { get; set; }
+
+        [JsonProperty("hammerdress", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hammerdress { get; set; }
+
+        [JsonProperty("hangfire")]
+        public object? Hangfire { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lacunosity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lacunosity { get; set; }
+
+        [JsonProperty("longiloquence")]
+        public object? Longiloquence { get; set; }
+
+        [JsonProperty("mameliere", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mameliere { get; set; }
+
+        [JsonProperty("motherless")]
+        public object? Motherless { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("noncorrodible")]
+        public object? Noncorrodible { get; set; }
+
+        [JsonProperty("nonsensicality")]
+        public object? Nonsensicality { get; set; }
+
+        [JsonProperty("oafishly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Oafishly { get; set; }
+
+        [JsonProperty("pfund")]
+        public object? Pfund { get; set; }
+
+        [JsonProperty("preadvisory")]
+        public object? Preadvisory { get; set; }
+
+        [JsonProperty("retroflexed")]
+        public object? Retroflexed { get; set; }
+
+        [JsonProperty("saccharulmic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Saccharulmic { get; set; }
+
+        [JsonProperty("scowlful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scowlful { get; set; }
+
+        [JsonProperty("secluded")]
+        public object? Secluded { get; set; }
+
+        [JsonProperty("slackage")]
+        public object? Slackage { get; set; }
+
+        [JsonProperty("sphaeridial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sphaeridial { get; set; }
+
+        [JsonProperty("spondulics")]
+        public object? Spondulics { get; set; }
+
+        [JsonProperty("subsecive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subsecive { get; set; }
+
+        [JsonProperty("swellmobsman")]
+        public object? Swellmobsman { get; set; }
+
+        [JsonProperty("trachyglossate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trachyglossate { get; set; }
+
+        [JsonProperty("trialogue")]
+        public object? Trialogue { get; set; }
+
+        [JsonProperty("unassuaged", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unassuaged { get; set; }
+
+        [JsonProperty("ungross")]
+        public object? Ungross { get; set; }
+
+        [JsonProperty("unjudiciously")]
+        public object? Unjudiciously { get; set; }
+    }
+
+    public partial record MonaziteClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record MonotheisticallyClass
+    {
+        [JsonProperty("blaspheme")]
+        public object? Blaspheme { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("celiosalpingectomy")]
+        public object? Celiosalpingectomy { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("consummativeness")]
+        public object? Consummativeness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("egestive")]
+        public object? Egestive { get; set; }
+
+        [JsonProperty("enchylema")]
+        public object? Enchylema { get; set; }
+
+        [JsonProperty("gasconade")]
+        public object? Gasconade { get; set; }
+
+        [JsonProperty("holidayer")]
+        public object? Holidayer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("intuitionalism")]
+        public object? Intuitionalism { get; set; }
+
+        [JsonProperty("lophiostomate")]
+        public object? Lophiostomate { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("nonvolition")]
+        public object? Nonvolition { get; set; }
+
+        [JsonProperty("palatableness")]
+        public object? Palatableness { get; set; }
+
+        [JsonProperty("pimpery")]
+        public object? Pimpery { get; set; }
+
+        [JsonProperty("previolation")]
+        public object? Previolation { get; set; }
+
+        [JsonProperty("reconveyance")]
+        public object? Reconveyance { get; set; }
+
+        [JsonProperty("registership")]
+        public object? Registership { get; set; }
+
+        [JsonProperty("rhyacolite")]
+        public object? Rhyacolite { get; set; }
+
+        [JsonProperty("smithereens")]
+        public object? Smithereens { get; set; }
+
+        [JsonProperty("superedification")]
+        public object? Superedification { get; set; }
+
+        [JsonProperty("trust")]
+        public object? Trust { get; set; }
+
+        [JsonProperty("whitestone")]
+        public object? Whitestone { get; set; }
+    }
+
+    public partial record Noncontributing
+    {
+        [JsonProperty("estevin", Required = Required.Always)]
+        public string Estevin { get; set; }
+
+        [JsonProperty("jolterhead", Required = Required.Always)]
+        public double Jolterhead { get; set; }
+
+        [JsonProperty("sauternes", Required = Required.Always)]
+        public long Sauternes { get; set; }
+
+        [JsonProperty("sparsely", Required = Required.Always)]
+        public bool Sparsely { get; set; }
+
+        [JsonProperty("unrequested", Required = Required.AllowNull)]
+        public object Unrequested { get; set; }
+    }
+
+    public partial record OccupationalistClass
+    {
+        [JsonProperty("beholdable", Required = Required.AllowNull)]
+        public object Beholdable { get; set; }
+
+        [JsonProperty("brotuliform", Required = Required.AllowNull)]
+        public object Brotuliform { get; set; }
+
+        [JsonProperty("Chimakum", Required = Required.AllowNull)]
+        public object Chimakum { get; set; }
+
+        [JsonProperty("doodler", Required = Required.AllowNull)]
+        public object Doodler { get; set; }
+
+        [JsonProperty("emulsin", Required = Required.AllowNull)]
+        public object Emulsin { get; set; }
+
+        [JsonProperty("Fin", Required = Required.AllowNull)]
+        public object Fin { get; set; }
+
+        [JsonProperty("flourishing", Required = Required.AllowNull)]
+        public object Flourishing { get; set; }
+
+        [JsonProperty("flueless", Required = Required.AllowNull)]
+        public object Flueless { get; set; }
+
+        [JsonProperty("furtively", Required = Required.AllowNull)]
+        public object Furtively { get; set; }
+
+        [JsonProperty("gritter", Required = Required.AllowNull)]
+        public object Gritter { get; set; }
+
+        [JsonProperty("interwish", Required = Required.AllowNull)]
+        public object Interwish { get; set; }
+
+        [JsonProperty("monoxylic", Required = Required.AllowNull)]
+        public object Monoxylic { get; set; }
+
+        [JsonProperty("myristic", Required = Required.AllowNull)]
+        public object Myristic { get; set; }
+
+        [JsonProperty("nightwear", Required = Required.AllowNull)]
+        public object Nightwear { get; set; }
+
+        [JsonProperty("peruser", Required = Required.AllowNull)]
+        public object Peruser { get; set; }
+
+        [JsonProperty("theoastrological", Required = Required.AllowNull)]
+        public object Theoastrological { get; set; }
+
+        [JsonProperty("thumby", Required = Required.AllowNull)]
+        public object Thumby { get; set; }
+
+        [JsonProperty("tingitid", Required = Required.AllowNull)]
+        public object Tingitid { get; set; }
+
+        [JsonProperty("trailless", Required = Required.AllowNull)]
+        public object Trailless { get; set; }
+
+        [JsonProperty("unpocketed", Required = Required.AllowNull)]
+        public object Unpocketed { get; set; }
+    }
+
+    public partial record OutrivalClass
+    {
+        [JsonProperty("adroitly", Required = Required.AllowNull)]
+        public object Adroitly { get; set; }
+
+        [JsonProperty("bridehood", Required = Required.AllowNull)]
+        public object Bridehood { get; set; }
+
+        [JsonProperty("Castoroides", Required = Required.AllowNull)]
+        public object Castoroides { get; set; }
+
+        [JsonProperty("Czechoslovak", Required = Required.AllowNull)]
+        public object Czechoslovak { get; set; }
+
+        [JsonProperty("diagenesis", Required = Required.AllowNull)]
+        public object Diagenesis { get; set; }
+
+        [JsonProperty("dihexahedron", Required = Required.AllowNull)]
+        public object Dihexahedron { get; set; }
+
+        [JsonProperty("dopester", Required = Required.AllowNull)]
+        public object Dopester { get; set; }
+
+        [JsonProperty("eumerism", Required = Required.AllowNull)]
+        public object Eumerism { get; set; }
+
+        [JsonProperty("flyness", Required = Required.AllowNull)]
+        public object Flyness { get; set; }
+
+        [JsonProperty("fouler", Required = Required.AllowNull)]
+        public object Fouler { get; set; }
+
+        [JsonProperty("laudanosine", Required = Required.AllowNull)]
+        public object Laudanosine { get; set; }
+
+        [JsonProperty("Lingulidae", Required = Required.AllowNull)]
+        public object Lingulidae { get; set; }
+
+        [JsonProperty("minutary", Required = Required.AllowNull)]
+        public object Minutary { get; set; }
+
+        [JsonProperty("mitra", Required = Required.AllowNull)]
+        public object Mitra { get; set; }
+
+        [JsonProperty("opisthorchiasis", Required = Required.AllowNull)]
+        public object Opisthorchiasis { get; set; }
+
+        [JsonProperty("pensively", Required = Required.AllowNull)]
+        public object Pensively { get; set; }
+
+        [JsonProperty("pubigerous", Required = Required.AllowNull)]
+        public object Pubigerous { get; set; }
+
+        [JsonProperty("rebellious", Required = Required.AllowNull)]
+        public object Rebellious { get; set; }
+
+        [JsonProperty("recodify", Required = Required.AllowNull)]
+        public object Recodify { get; set; }
+
+        [JsonProperty("unpaced", Required = Required.AllowNull)]
+        public object Unpaced { get; set; }
+    }
+
+    public partial record PiaculumClass
+    {
+        [JsonProperty("alada", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alada { get; set; }
+
+        [JsonProperty("amphistomous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amphistomous { get; set; }
+
+        [JsonProperty("boysenberry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Boysenberry { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("decardinalize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Decardinalize { get; set; }
+
+        [JsonProperty("discouragement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Discouragement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("doitrified", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Doitrified { get; set; }
+
+        [JsonProperty("hexaspermous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hexaspermous { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("insinking", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Insinking { get; set; }
+
+        [JsonProperty("loathfulness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loathfulness { get; set; }
+
+        [JsonProperty("miasmatical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Miasmatical { get; set; }
+
+        [JsonProperty("neurofibril", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Neurofibril { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("phonendoscope", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Phonendoscope { get; set; }
+
+        [JsonProperty("pilferment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Pilferment { get; set; }
+
+        [JsonProperty("predismissory", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Predismissory { get; set; }
+
+        [JsonProperty("preinscription", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preinscription { get; set; }
+
+        [JsonProperty("quotative", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quotative { get; set; }
+
+        [JsonProperty("sienna", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sienna { get; set; }
+
+        [JsonProperty("thorax", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thorax { get; set; }
+
+        [JsonProperty("yachting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yachting { get; set; }
+
+        [JsonProperty("Zipper", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Zipper { get; set; }
+    }
+
+    public partial record Pneumocele
+    {
+        [JsonProperty("Carbonarism")]
+        public object? Carbonarism { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cineolic")]
+        public object? Cineolic { get; set; }
+
+        [JsonProperty("cobbly")]
+        public object? Cobbly { get; set; }
+
+        [JsonProperty("conchyliferous")]
+        public object? Conchyliferous { get; set; }
+
+        [JsonProperty("congregation")]
+        public object? Congregation { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enterotomy")]
+        public object? Enterotomy { get; set; }
+
+        [JsonProperty("entophytal")]
+        public object? Entophytal { get; set; }
+
+        [JsonProperty("fewtrils")]
+        public object? Fewtrils { get; set; }
+
+        [JsonProperty("herem")]
+        public object? Herem { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Koniga")]
+        public object? Koniga { get; set; }
+
+        [JsonProperty("meticulosity")]
+        public object? Meticulosity { get; set; }
+
+        [JsonProperty("Micky")]
+        public object? Micky { get; set; }
+
+        [JsonProperty("mismarriage")]
+        public object? Mismarriage { get; set; }
+
+        [JsonProperty("neurotrophic")]
+        public object? Neurotrophic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("persuasively")]
+        public object? Persuasively { get; set; }
+
+        [JsonProperty("replaceable")]
+        public object? Replaceable { get; set; }
+
+        [JsonProperty("silex")]
+        public object? Silex { get; set; }
+
+        [JsonProperty("taillight")]
+        public object? Taillight { get; set; }
+
+        [JsonProperty("unjealous")]
+        public object? Unjealous { get; set; }
+
+        [JsonProperty("visitorial")]
+        public object? Visitorial { get; set; }
+    }
+
+    public partial record PotwhiskyClass
+    {
+        [JsonProperty("arciform", Required = Required.AllowNull)]
+        public object Arciform { get; set; }
+
+        [JsonProperty("cresolin", Required = Required.AllowNull)]
+        public object Cresolin { get; set; }
+
+        [JsonProperty("disheartener", Required = Required.AllowNull)]
+        public object Disheartener { get; set; }
+
+        [JsonProperty("disproportionable", Required = Required.AllowNull)]
+        public object Disproportionable { get; set; }
+
+        [JsonProperty("Euchorda", Required = Required.AllowNull)]
+        public object Euchorda { get; set; }
+
+        [JsonProperty("ferryway", Required = Required.AllowNull)]
+        public object Ferryway { get; set; }
+
+        [JsonProperty("filamentiferous", Required = Required.AllowNull)]
+        public object Filamentiferous { get; set; }
+
+        [JsonProperty("flemish", Required = Required.AllowNull)]
+        public object Flemish { get; set; }
+
+        [JsonProperty("forgainst", Required = Required.AllowNull)]
+        public object Forgainst { get; set; }
+
+        [JsonProperty("grainering", Required = Required.AllowNull)]
+        public object Grainering { get; set; }
+
+        [JsonProperty("irrevoluble", Required = Required.AllowNull)]
+        public object Irrevoluble { get; set; }
+
+        [JsonProperty("kindredship", Required = Required.AllowNull)]
+        public object Kindredship { get; set; }
+
+        [JsonProperty("pinguitudinous", Required = Required.AllowNull)]
+        public object Pinguitudinous { get; set; }
+
+        [JsonProperty("simpletonic", Required = Required.AllowNull)]
+        public object Simpletonic { get; set; }
+
+        [JsonProperty("singsong", Required = Required.AllowNull)]
+        public object Singsong { get; set; }
+
+        [JsonProperty("submergement", Required = Required.AllowNull)]
+        public object Submergement { get; set; }
+
+        [JsonProperty("supraoesophagal", Required = Required.AllowNull)]
+        public object Supraoesophagal { get; set; }
+
+        [JsonProperty("thrashel", Required = Required.AllowNull)]
+        public object Thrashel { get; set; }
+
+        [JsonProperty("tyremesis", Required = Required.AllowNull)]
+        public object Tyremesis { get; set; }
+
+        [JsonProperty("Yoruba", Required = Required.AllowNull)]
+        public object Yoruba { get; set; }
+    }
+
+    public partial record PrefreshmanClass
+    {
+        [JsonProperty("azorubine", Required = Required.AllowNull)]
+        public object Azorubine { get; set; }
+
+        [JsonProperty("choroiditis", Required = Required.AllowNull)]
+        public object Choroiditis { get; set; }
+
+        [JsonProperty("coagulatory", Required = Required.AllowNull)]
+        public object Coagulatory { get; set; }
+
+        [JsonProperty("cyclorama", Required = Required.AllowNull)]
+        public object Cyclorama { get; set; }
+
+        [JsonProperty("Dolphus", Required = Required.AllowNull)]
+        public object Dolphus { get; set; }
+
+        [JsonProperty("duckhearted", Required = Required.AllowNull)]
+        public object Duckhearted { get; set; }
+
+        [JsonProperty("Ficus", Required = Required.AllowNull)]
+        public object Ficus { get; set; }
+
+        [JsonProperty("Gemaric", Required = Required.AllowNull)]
+        public object Gemaric { get; set; }
+
+        [JsonProperty("jugation", Required = Required.AllowNull)]
+        public object Jugation { get; set; }
+
+        [JsonProperty("myoliposis", Required = Required.AllowNull)]
+        public object Myoliposis { get; set; }
+
+        [JsonProperty("nonnomination", Required = Required.AllowNull)]
+        public object Nonnomination { get; set; }
+
+        [JsonProperty("palay", Required = Required.AllowNull)]
+        public object Palay { get; set; }
+
+        [JsonProperty("pentactinal", Required = Required.AllowNull)]
+        public object Pentactinal { get; set; }
+
+        [JsonProperty("Phaet", Required = Required.AllowNull)]
+        public object Phaet { get; set; }
+
+        [JsonProperty("piquant", Required = Required.AllowNull)]
+        public object Piquant { get; set; }
+
+        [JsonProperty("registration", Required = Required.AllowNull)]
+        public object Registration { get; set; }
+
+        [JsonProperty("remancipation", Required = Required.AllowNull)]
+        public object Remancipation { get; set; }
+
+        [JsonProperty("scutatiform", Required = Required.AllowNull)]
+        public object Scutatiform { get; set; }
+
+        [JsonProperty("theodolite", Required = Required.AllowNull)]
+        public object Theodolite { get; set; }
+
+        [JsonProperty("underward", Required = Required.AllowNull)]
+        public object Underward { get; set; }
+    }
+
+    public partial struct JurorElement
+    {
+        public bool? Bool;
+        public JurorClass? JurorClass;
+
+        public static implicit operator JurorElement(bool Bool) => new JurorElement { Bool = Bool };
+        public static implicit operator JurorElement(JurorClass JurorClass) => new JurorElement { JurorClass = JurorClass };
+    }
+
+    public partial struct Kongoni
+    {
+        public List<long>? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Kongoni(List<long> IntegerArray) => new Kongoni { IntegerArray = IntegerArray };
+        public static implicit operator Kongoni(Dictionary<string, long> IntegerMap) => new Kongoni { IntegerMap = IntegerMap };
+    }
+
+    public partial struct LadronismElement
+    {
+        public double? Double;
+        public LadronismClass? LadronismClass;
+        public string? String;
+
+        public static implicit operator LadronismElement(double Double) => new LadronismElement { Double = Double };
+        public static implicit operator LadronismElement(LadronismClass LadronismClass) => new LadronismElement { LadronismClass = LadronismClass };
+        public static implicit operator LadronismElement(string String) => new LadronismElement { String = String };
+    }
+
+    public partial struct LandlubberlyElement
+    {
+        public bool? Bool;
+        public long? Integer;
+        public LandlubberlyClass? LandlubberlyClass;
+
+        public static implicit operator LandlubberlyElement(bool Bool) => new LandlubberlyElement { Bool = Bool };
+        public static implicit operator LandlubberlyElement(long Integer) => new LandlubberlyElement { Integer = Integer };
+        public static implicit operator LandlubberlyElement(LandlubberlyClass LandlubberlyClass) => new LandlubberlyElement { LandlubberlyClass = LandlubberlyClass };
+    }
+
+    public partial struct Listener
+    {
+        public long? Integer;
+        public List<object>? NullArray;
+
+        public static implicit operator Listener(long Integer) => new Listener { Integer = Integer };
+        public static implicit operator Listener(List<object> NullArray) => new Listener { NullArray = NullArray };
+    }
+
+    public partial struct LupusElement
+    {
+        public long? Integer;
+        public LupusClass? LupusClass;
+
+        public static implicit operator LupusElement(long Integer) => new LupusElement { Integer = Integer };
+        public static implicit operator LupusElement(LupusClass LupusClass) => new LupusElement { LupusClass = LupusClass };
+    }
+
+    public partial struct MonaziteElement
+    {
+        public double? Double;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator MonaziteElement(double Double) => new MonaziteElement { Double = Double };
+        public static implicit operator MonaziteElement(MonaziteClass MonaziteClass) => new MonaziteElement { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Monoliteral
+    {
+        public bool? Bool;
+        public List<object>? NullArray;
+
+        public static implicit operator Monoliteral(bool Bool) => new Monoliteral { Bool = Bool };
+        public static implicit operator Monoliteral(List<object> NullArray) => new Monoliteral { NullArray = NullArray };
+    }
+
+    public partial struct MonotheisticallyElement
+    {
+        public MonotheisticallyClass? MonotheisticallyClass;
+        public List<object>? NullArray;
+
+        public static implicit operator MonotheisticallyElement(MonotheisticallyClass MonotheisticallyClass) => new MonotheisticallyElement { MonotheisticallyClass = MonotheisticallyClass };
+        public static implicit operator MonotheisticallyElement(List<object> NullArray) => new MonotheisticallyElement { NullArray = NullArray };
+    }
+
+    public partial struct Montage
+    {
+        public double? Double;
+        public List<object>? NullArray;
+        public string? String;
+
+        public static implicit operator Montage(double Double) => new Montage { Double = Double };
+        public static implicit operator Montage(List<object> NullArray) => new Montage { NullArray = NullArray };
+        public static implicit operator Montage(string String) => new Montage { String = String };
+    }
+
+    public partial struct Moralness
+    {
+        public double? Double;
+        public List<object>? NullArray;
+
+        public static implicit operator Moralness(double Double) => new Moralness { Double = Double };
+        public static implicit operator Moralness(List<object> NullArray) => new Moralness { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Double == null;
+    }
+
+    public partial struct Mulishly
+    {
+        public double? Double;
+        public List<long>? IntegerArray;
+
+        public static implicit operator Mulishly(double Double) => new Mulishly { Double = Double };
+        public static implicit operator Mulishly(List<long> IntegerArray) => new Mulishly { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Double == null;
+    }
+
+    public partial struct Myoscope
+    {
+        public bool? Bool;
+        public long? Integer;
+        public List<object>? NullArray;
+
+        public static implicit operator Myoscope(bool Bool) => new Myoscope { Bool = Bool };
+        public static implicit operator Myoscope(long Integer) => new Myoscope { Integer = Integer };
+        public static implicit operator Myoscope(List<object> NullArray) => new Myoscope { NullArray = NullArray };
+    }
+
+    public partial struct Neuromastic
+    {
+        public double? Double;
+        public List<object>? NullArray;
+
+        public static implicit operator Neuromastic(double Double) => new Neuromastic { Double = Double };
+        public static implicit operator Neuromastic(List<object> NullArray) => new Neuromastic { NullArray = NullArray };
+    }
+
+    public partial struct Nonnervous
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Nonnervous(bool Bool) => new Nonnervous { Bool = Bool };
+        public static implicit operator Nonnervous(long Integer) => new Nonnervous { Integer = Integer };
+    }
+
+    public partial struct Nonvaluation
+    {
+        public bool? Bool;
+        public double? Double;
+        public List<object>? NullArray;
+
+        public static implicit operator Nonvaluation(bool Bool) => new Nonvaluation { Bool = Bool };
+        public static implicit operator Nonvaluation(double Double) => new Nonvaluation { Double = Double };
+        public static implicit operator Nonvaluation(List<object> NullArray) => new Nonvaluation { NullArray = NullArray };
+    }
+
+    public partial struct OccupationalistElement
+    {
+        public List<object>? NullArray;
+        public OccupationalistClass? OccupationalistClass;
+
+        public static implicit operator OccupationalistElement(List<object> NullArray) => new OccupationalistElement { NullArray = NullArray };
+        public static implicit operator OccupationalistElement(OccupationalistClass OccupationalistClass) => new OccupationalistElement { OccupationalistClass = OccupationalistClass };
+        public bool IsNull => NullArray == null && OccupationalistClass == null;
+    }
+
+    public partial struct OutrivalElement
+    {
+        public double? Double;
+        public OutrivalClass? OutrivalClass;
+
+        public static implicit operator OutrivalElement(double Double) => new OutrivalElement { Double = Double };
+        public static implicit operator OutrivalElement(OutrivalClass OutrivalClass) => new OutrivalElement { OutrivalClass = OutrivalClass };
+        public bool IsNull => OutrivalClass == null && Double == null;
+    }
+
+    public partial struct Paleographically
+    {
+        public double? Double;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Paleographically(double Double) => new Paleographically { Double = Double };
+        public static implicit operator Paleographically(Dictionary<string, long?> UnionMap) => new Paleographically { UnionMap = UnionMap };
+    }
+
+    public partial struct Pamphletwise
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Pamphletwise(long Integer) => new Pamphletwise { Integer = Integer };
+        public static implicit operator Pamphletwise(Dictionary<string, long> IntegerMap) => new Pamphletwise { IntegerMap = IntegerMap };
+        public static implicit operator Pamphletwise(string String) => new Pamphletwise { String = String };
+    }
+
+    public partial struct Pediatric
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Pediatric(bool Bool) => new Pediatric { Bool = Bool };
+        public static implicit operator Pediatric(double Double) => new Pediatric { Double = Double };
+        public bool IsNull => Bool == null && Double == null;
+    }
+
+    public partial struct PiaculumElement
+    {
+        public double? Double;
+        public PiaculumClass? PiaculumClass;
+
+        public static implicit operator PiaculumElement(double Double) => new PiaculumElement { Double = Double };
+        public static implicit operator PiaculumElement(PiaculumClass PiaculumClass) => new PiaculumElement { PiaculumClass = PiaculumClass };
+    }
+
+    public partial struct Piccadilly
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Piccadilly(double Double) => new Piccadilly { Double = Double };
+        public static implicit operator Piccadilly(string String) => new Piccadilly { String = String };
+        public bool IsNull => Double == null && String == null;
+    }
+
+    public partial struct Piffler
+    {
+        public MonaziteClass? MonaziteClass;
+        public List<object>? NullArray;
+
+        public static implicit operator Piffler(MonaziteClass MonaziteClass) => new Piffler { MonaziteClass = MonaziteClass };
+        public static implicit operator Piffler(List<object> NullArray) => new Piffler { NullArray = NullArray };
+    }
+
+    public partial struct Pithful
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Pithful(bool Bool) => new Pithful { Bool = Bool };
+        public static implicit operator Pithful(long Integer) => new Pithful { Integer = Integer };
+        public bool IsNull => Bool == null && Integer == null;
+    }
+
+    public partial struct Placuntiti
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Placuntiti(long Integer) => new Placuntiti { Integer = Integer };
+        public static implicit operator Placuntiti(Dictionary<string, long> IntegerMap) => new Placuntiti { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Plectopterous
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Plectopterous(double Double) => new Plectopterous { Double = Double };
+        public static implicit operator Plectopterous(Dictionary<string, long> IntegerMap) => new Plectopterous { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Poliorcetic
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Poliorcetic(bool Bool) => new Poliorcetic { Bool = Bool };
+        public static implicit operator Poliorcetic(MonaziteClass MonaziteClass) => new Poliorcetic { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Poormaster
+    {
+        public List<long>? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Poormaster(List<long> IntegerArray) => new Poormaster { IntegerArray = IntegerArray };
+        public static implicit operator Poormaster(Dictionary<string, long> IntegerMap) => new Poormaster { IntegerMap = IntegerMap };
+        public bool IsNull => IntegerArray == null && IntegerMap == null;
+    }
+
+    public partial struct PotwhiskyElement
+    {
+        public long? Integer;
+        public PotwhiskyClass? PotwhiskyClass;
+
+        public static implicit operator PotwhiskyElement(long Integer) => new PotwhiskyElement { Integer = Integer };
+        public static implicit operator PotwhiskyElement(PotwhiskyClass PotwhiskyClass) => new PotwhiskyElement { PotwhiskyClass = PotwhiskyClass };
+        public bool IsNull => PotwhiskyClass == null && Integer == null;
+    }
+
+    public partial struct Practicalizer
+    {
+        public MonaziteClass? MonaziteClass;
+        public List<object>? NullArray;
+        public string? String;
+
+        public static implicit operator Practicalizer(MonaziteClass MonaziteClass) => new Practicalizer { MonaziteClass = MonaziteClass };
+        public static implicit operator Practicalizer(List<object> NullArray) => new Practicalizer { NullArray = NullArray };
+        public static implicit operator Practicalizer(string String) => new Practicalizer { String = String };
+    }
+
+    public partial struct PrefreshmanElement
+    {
+        public List<object>? NullArray;
+        public PrefreshmanClass? PrefreshmanClass;
+        public string? String;
+
+        public static implicit operator PrefreshmanElement(List<object> NullArray) => new PrefreshmanElement { NullArray = NullArray };
+        public static implicit operator PrefreshmanElement(PrefreshmanClass PrefreshmanClass) => new PrefreshmanElement { PrefreshmanClass = PrefreshmanClass };
+        public static implicit operator PrefreshmanElement(string String) => new PrefreshmanElement { String = String };
+    }
+
+    public partial struct Prehensility
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+        public List<object>? NullArray;
+
+        public static implicit operator Prehensility(bool Bool) => new Prehensility { Bool = Bool };
+        public static implicit operator Prehensility(MonaziteClass MonaziteClass) => new Prehensility { MonaziteClass = MonaziteClass };
+        public static implicit operator Prehensility(List<object> NullArray) => new Prehensility { NullArray = NullArray };
+    }
+
+    public partial struct Prevoidance
+    {
+        public long? Integer;
+        public List<long>? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Prevoidance(long Integer) => new Prevoidance { Integer = Integer };
+        public static implicit operator Prevoidance(List<long> IntegerArray) => new Prevoidance { IntegerArray = IntegerArray };
+        public static implicit operator Prevoidance(MonaziteClass MonaziteClass) => new Prevoidance { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Protext
+    {
+        public bool? Bool;
+        public List<long>? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Protext(bool Bool) => new Protext { Bool = Bool };
+        public static implicit operator Protext(List<long> IntegerArray) => new Protext { IntegerArray = IntegerArray };
+        public static implicit operator Protext(MonaziteClass MonaziteClass) => new Protext { MonaziteClass = MonaziteClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                JurorElementConverter.Singleton,
+                KongoniConverter.Singleton,
+                LadronismElementConverter.Singleton,
+                LandlubberlyElementConverter.Singleton,
+                ListenerConverter.Singleton,
+                LupusElementConverter.Singleton,
+                MonaziteElementConverter.Singleton,
+                MonoliteralConverter.Singleton,
+                MonotheisticallyElementConverter.Singleton,
+                MontageConverter.Singleton,
+                MoralnessConverter.Singleton,
+                MulishlyConverter.Singleton,
+                MyoscopeConverter.Singleton,
+                NeuromasticConverter.Singleton,
+                NonnervousConverter.Singleton,
+                NonvaluationConverter.Singleton,
+                OccupationalistElementConverter.Singleton,
+                OutrivalElementConverter.Singleton,
+                PaleographicallyConverter.Singleton,
+                PamphletwiseConverter.Singleton,
+                PediatricConverter.Singleton,
+                PiaculumElementConverter.Singleton,
+                PiccadillyConverter.Singleton,
+                PifflerConverter.Singleton,
+                PithfulConverter.Singleton,
+                PlacuntitiConverter.Singleton,
+                PlectopterousConverter.Singleton,
+                PoliorceticConverter.Singleton,
+                PoormasterConverter.Singleton,
+                PotwhiskyElementConverter.Singleton,
+                PracticalizerConverter.Singleton,
+                PrefreshmanElementConverter.Singleton,
+                PrehensilityConverter.Singleton,
+                PrevoidanceConverter.Singleton,
+                ProtextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class JurorElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(JurorElement) || t == typeof(JurorElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new JurorElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<JurorClass>(reader);
+                    return new JurorElement { JurorClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type JurorElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (JurorElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.JurorClass != null)
+            {
+                serializer.Serialize(writer, value.JurorClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type JurorElement");
+        }
+
+        public static readonly JurorElementConverter Singleton = new JurorElementConverter();
+    }
+
+    internal class KongoniConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kongoni) || t == typeof(Kongoni?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Kongoni { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Kongoni { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Kongoni");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Kongoni)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Kongoni");
+        }
+
+        public static readonly KongoniConverter Singleton = new KongoniConverter();
+    }
+
+    internal class LadronismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LadronismElement) || t == typeof(LadronismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new LadronismElement { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LadronismElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LadronismClass>(reader);
+                    return new LadronismElement { LadronismClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LadronismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LadronismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LadronismClass != null)
+            {
+                serializer.Serialize(writer, value.LadronismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LadronismElement");
+        }
+
+        public static readonly LadronismElementConverter Singleton = new LadronismElementConverter();
+    }
+
+    internal class LandlubberlyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LandlubberlyElement) || t == typeof(LandlubberlyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LandlubberlyElement { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new LandlubberlyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LandlubberlyClass>(reader);
+                    return new LandlubberlyElement { LandlubberlyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LandlubberlyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LandlubberlyElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.LandlubberlyClass != null)
+            {
+                serializer.Serialize(writer, value.LandlubberlyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LandlubberlyElement");
+        }
+
+        public static readonly LandlubberlyElementConverter Singleton = new LandlubberlyElementConverter();
+    }
+
+    internal class ListenerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Listener) || t == typeof(Listener?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Listener { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Listener { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Listener");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Listener)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Listener");
+        }
+
+        public static readonly ListenerConverter Singleton = new ListenerConverter();
+    }
+
+    internal class LupusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LupusElement) || t == typeof(LupusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LupusElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LupusClass>(reader);
+                    return new LupusElement { LupusClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LupusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LupusElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.LupusClass != null)
+            {
+                serializer.Serialize(writer, value.LupusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LupusElement");
+        }
+
+        public static readonly LupusElementConverter Singleton = new LupusElementConverter();
+    }
+
+    internal class MonaziteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonaziteElement) || t == typeof(MonaziteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new MonaziteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new MonaziteElement { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type MonaziteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonaziteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonaziteElement");
+        }
+
+        public static readonly MonaziteElementConverter Singleton = new MonaziteElementConverter();
+    }
+
+    internal class MonoliteralConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Monoliteral) || t == typeof(Monoliteral?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Monoliteral { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Monoliteral { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Monoliteral");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Monoliteral)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Monoliteral");
+        }
+
+        public static readonly MonoliteralConverter Singleton = new MonoliteralConverter();
+    }
+
+    internal class MonotheisticallyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonotheisticallyElement) || t == typeof(MonotheisticallyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonotheisticallyClass>(reader);
+                    return new MonotheisticallyElement { MonotheisticallyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new MonotheisticallyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type MonotheisticallyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonotheisticallyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonotheisticallyClass != null)
+            {
+                serializer.Serialize(writer, value.MonotheisticallyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonotheisticallyElement");
+        }
+
+        public static readonly MonotheisticallyElementConverter Singleton = new MonotheisticallyElementConverter();
+    }
+
+    internal class MontageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Montage) || t == typeof(Montage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Montage { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Montage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Montage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Montage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Montage)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Montage");
+        }
+
+        public static readonly MontageConverter Singleton = new MontageConverter();
+    }
+
+    internal class MoralnessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Moralness) || t == typeof(Moralness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Moralness { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Moralness { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Moralness { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Moralness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Moralness)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Moralness");
+        }
+
+        public static readonly MoralnessConverter Singleton = new MoralnessConverter();
+    }
+
+    internal class MulishlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Mulishly) || t == typeof(Mulishly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Mulishly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Mulishly { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Mulishly { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Mulishly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Mulishly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Mulishly");
+        }
+
+        public static readonly MulishlyConverter Singleton = new MulishlyConverter();
+    }
+
+    internal class MyoscopeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Myoscope) || t == typeof(Myoscope?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Myoscope { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Myoscope { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Myoscope { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Myoscope");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Myoscope)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Myoscope");
+        }
+
+        public static readonly MyoscopeConverter Singleton = new MyoscopeConverter();
+    }
+
+    internal class NeuromasticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Neuromastic) || t == typeof(Neuromastic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Neuromastic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Neuromastic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Neuromastic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Neuromastic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Neuromastic");
+        }
+
+        public static readonly NeuromasticConverter Singleton = new NeuromasticConverter();
+    }
+
+    internal class NonnervousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonnervous) || t == typeof(Nonnervous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Nonnervous { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonnervous { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonnervous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonnervous)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonnervous");
+        }
+
+        public static readonly NonnervousConverter Singleton = new NonnervousConverter();
+    }
+
+    internal class NonvaluationConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonvaluation) || t == typeof(Nonvaluation?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Nonvaluation { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonvaluation { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Nonvaluation { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonvaluation");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonvaluation)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonvaluation");
+        }
+
+        public static readonly NonvaluationConverter Singleton = new NonvaluationConverter();
+    }
+
+    internal class OccupationalistElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OccupationalistElement) || t == typeof(OccupationalistElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OccupationalistElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OccupationalistClass>(reader);
+                    return new OccupationalistElement { OccupationalistClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new OccupationalistElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OccupationalistElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OccupationalistElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.OccupationalistClass != null)
+            {
+                serializer.Serialize(writer, value.OccupationalistClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OccupationalistElement");
+        }
+
+        public static readonly OccupationalistElementConverter Singleton = new OccupationalistElementConverter();
+    }
+
+    internal class OutrivalElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OutrivalElement) || t == typeof(OutrivalElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OutrivalElement { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new OutrivalElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OutrivalClass>(reader);
+                    return new OutrivalElement { OutrivalClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type OutrivalElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OutrivalElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OutrivalClass != null)
+            {
+                serializer.Serialize(writer, value.OutrivalClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OutrivalElement");
+        }
+
+        public static readonly OutrivalElementConverter Singleton = new OutrivalElementConverter();
+    }
+
+    internal class PaleographicallyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Paleographically) || t == typeof(Paleographically?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Paleographically { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Paleographically { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Paleographically");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Paleographically)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Paleographically");
+        }
+
+        public static readonly PaleographicallyConverter Singleton = new PaleographicallyConverter();
+    }
+
+    internal class PamphletwiseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pamphletwise) || t == typeof(Pamphletwise?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pamphletwise { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Pamphletwise { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Pamphletwise { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Pamphletwise");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pamphletwise)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pamphletwise");
+        }
+
+        public static readonly PamphletwiseConverter Singleton = new PamphletwiseConverter();
+    }
+
+    internal class PediatricConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pediatric) || t == typeof(Pediatric?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pediatric { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Pediatric { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pediatric { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pediatric");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pediatric)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pediatric");
+        }
+
+        public static readonly PediatricConverter Singleton = new PediatricConverter();
+    }
+
+    internal class PiaculumElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PiaculumElement) || t == typeof(PiaculumElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PiaculumElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PiaculumClass>(reader);
+                    return new PiaculumElement { PiaculumClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PiaculumElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PiaculumElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.PiaculumClass != null)
+            {
+                serializer.Serialize(writer, value.PiaculumClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PiaculumElement");
+        }
+
+        public static readonly PiaculumElementConverter Singleton = new PiaculumElementConverter();
+    }
+
+    internal class PiccadillyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piccadilly) || t == typeof(Piccadilly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Piccadilly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Piccadilly { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Piccadilly { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Piccadilly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piccadilly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piccadilly");
+        }
+
+        public static readonly PiccadillyConverter Singleton = new PiccadillyConverter();
+    }
+
+    internal class PifflerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piffler) || t == typeof(Piffler?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Piffler { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Piffler { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Piffler");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piffler)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piffler");
+        }
+
+        public static readonly PifflerConverter Singleton = new PifflerConverter();
+    }
+
+    internal class PithfulConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pithful) || t == typeof(Pithful?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pithful { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pithful { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pithful { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pithful");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pithful)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pithful");
+        }
+
+        public static readonly PithfulConverter Singleton = new PithfulConverter();
+    }
+
+    internal class PlacuntitiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Placuntiti) || t == typeof(Placuntiti?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Placuntiti { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Placuntiti { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Placuntiti");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Placuntiti)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Placuntiti");
+        }
+
+        public static readonly PlacuntitiConverter Singleton = new PlacuntitiConverter();
+    }
+
+    internal class PlectopterousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Plectopterous) || t == typeof(Plectopterous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Plectopterous { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Plectopterous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Plectopterous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Plectopterous)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Plectopterous");
+        }
+
+        public static readonly PlectopterousConverter Singleton = new PlectopterousConverter();
+    }
+
+    internal class PoliorceticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poliorcetic) || t == typeof(Poliorcetic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Poliorcetic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Poliorcetic { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Poliorcetic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poliorcetic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poliorcetic");
+        }
+
+        public static readonly PoliorceticConverter Singleton = new PoliorceticConverter();
+    }
+
+    internal class PoormasterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poormaster) || t == typeof(Poormaster?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Poormaster { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Poormaster { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Poormaster { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Poormaster");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poormaster)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poormaster");
+        }
+
+        public static readonly PoormasterConverter Singleton = new PoormasterConverter();
+    }
+
+    internal class PotwhiskyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PotwhiskyElement) || t == typeof(PotwhiskyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new PotwhiskyElement { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PotwhiskyElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PotwhiskyClass>(reader);
+                    return new PotwhiskyElement { PotwhiskyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PotwhiskyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PotwhiskyElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PotwhiskyClass != null)
+            {
+                serializer.Serialize(writer, value.PotwhiskyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PotwhiskyElement");
+        }
+
+        public static readonly PotwhiskyElementConverter Singleton = new PotwhiskyElementConverter();
+    }
+
+    internal class PracticalizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Practicalizer) || t == typeof(Practicalizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Practicalizer { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Practicalizer { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Practicalizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Practicalizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Practicalizer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Practicalizer");
+        }
+
+        public static readonly PracticalizerConverter Singleton = new PracticalizerConverter();
+    }
+
+    internal class PrefreshmanElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PrefreshmanElement) || t == typeof(PrefreshmanElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new PrefreshmanElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PrefreshmanClass>(reader);
+                    return new PrefreshmanElement { PrefreshmanClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new PrefreshmanElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PrefreshmanElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PrefreshmanElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.PrefreshmanClass != null)
+            {
+                serializer.Serialize(writer, value.PrefreshmanClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PrefreshmanElement");
+        }
+
+        public static readonly PrefreshmanElementConverter Singleton = new PrefreshmanElementConverter();
+    }
+
+    internal class PrehensilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prehensility) || t == typeof(Prehensility?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Prehensility { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prehensility { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Prehensility { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prehensility");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prehensility)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prehensility");
+        }
+
+        public static readonly PrehensilityConverter Singleton = new PrehensilityConverter();
+    }
+
+    internal class PrevoidanceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prevoidance) || t == typeof(Prevoidance?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Prevoidance { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prevoidance { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Prevoidance { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prevoidance");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prevoidance)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prevoidance");
+        }
+
+        public static readonly PrevoidanceConverter Singleton = new PrevoidanceConverter();
+    }
+
+    internal class ProtextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protext) || t == typeof(Protext?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Protext { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Protext { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Protext { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protext");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protext)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protext");
+        }
+
+        public static readonly ProtextConverter Singleton = new ProtextConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations3.json/csharp-version-5--b2bd4d4221d9/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations3.json/csharp-version-5--b2bd4d4221d9/QuickType.cs
new file mode 100644
index 0000000..cd9b9c5
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations3.json/csharp-version-5--b2bd4d4221d9/QuickType.cs
@@ -0,0 +1,3350 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("juror", Required = Required.Always)]
+        public JurorElement[] Juror { get; set; }
+
+        [JsonProperty("kongoni", Required = Required.Always)]
+        public Kongoni[] Kongoni { get; set; }
+
+        [JsonProperty("ladronism", Required = Required.Always)]
+        public LadronismElement[] Ladronism { get; set; }
+
+        [JsonProperty("landlubberly", Required = Required.Always)]
+        public LandlubberlyElement[] Landlubberly { get; set; }
+
+        [JsonProperty("listener", Required = Required.Always)]
+        public Listener[] Listener { get; set; }
+
+        [JsonProperty("lupus", Required = Required.Always)]
+        public LupusElement[] Lupus { get; set; }
+
+        [JsonProperty("maslin", Required = Required.Always)]
+        public Maslin[] Maslin { get; set; }
+
+        [JsonProperty("monazite", Required = Required.Always)]
+        public MonaziteElement[] Monazite { get; set; }
+
+        [JsonProperty("monoliteral", Required = Required.Always)]
+        public Monoliteral[] Monoliteral { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.Always)]
+        public MonotheisticallyElement[] Monotheistically { get; set; }
+
+        [JsonProperty("montage", Required = Required.Always)]
+        public Montage[] Montage { get; set; }
+
+        [JsonProperty("moralness", Required = Required.Always)]
+        public Moralness[] Moralness { get; set; }
+
+        [JsonProperty("mowra", Required = Required.Always)]
+        public MonaziteClass[] Mowra { get; set; }
+
+        [JsonProperty("mulishly", Required = Required.Always)]
+        public Mulishly[] Mulishly { get; set; }
+
+        [JsonProperty("myoscope", Required = Required.Always)]
+        public Myoscope[] Myoscope { get; set; }
+
+        [JsonProperty("nach", Required = Required.Always)]
+        public long?[][] Nach { get; set; }
+
+        [JsonProperty("neuromastic", Required = Required.Always)]
+        public Neuromastic[] Neuromastic { get; set; }
+
+        [JsonProperty("noncontributing", Required = Required.Always)]
+        public Noncontributing[] Noncontributing { get; set; }
+
+        [JsonProperty("nonnervous", Required = Required.Always)]
+        public Nonnervous[] Nonnervous { get; set; }
+
+        [JsonProperty("nonvaluation", Required = Required.Always)]
+        public Nonvaluation[] Nonvaluation { get; set; }
+
+        [JsonProperty("occupationalist", Required = Required.Always)]
+        public OccupationalistElement[] Occupationalist { get; set; }
+
+        [JsonProperty("outrival", Required = Required.Always)]
+        public OutrivalElement[] Outrival { get; set; }
+
+        [JsonProperty("paleographically", Required = Required.Always)]
+        public Paleographically[] Paleographically { get; set; }
+
+        [JsonProperty("pamphletwise", Required = Required.Always)]
+        public Pamphletwise[] Pamphletwise { get; set; }
+
+        [JsonProperty("pediatrics", Required = Required.Always)]
+        public Pediatric[] Pediatrics { get; set; }
+
+        [JsonProperty("perceptive", Required = Required.Always)]
+        public bool[] Perceptive { get; set; }
+
+        [JsonProperty("piaculum", Required = Required.Always)]
+        public PiaculumElement[] Piaculum { get; set; }
+
+        [JsonProperty("piccadilly", Required = Required.Always)]
+        public Piccadilly[] Piccadilly { get; set; }
+
+        [JsonProperty("piffler", Required = Required.Always)]
+        public Piffler[] Piffler { get; set; }
+
+        [JsonProperty("pithful", Required = Required.Always)]
+        public Pithful[] Pithful { get; set; }
+
+        [JsonProperty("placuntitis", Required = Required.Always)]
+        public Placuntiti[] Placuntitis { get; set; }
+
+        [JsonProperty("plectopterous", Required = Required.Always)]
+        public Plectopterous[] Plectopterous { get; set; }
+
+        [JsonProperty("pneumocele", Required = Required.Always)]
+        public Pneumocele[] Pneumocele { get; set; }
+
+        [JsonProperty("poliorcetic", Required = Required.Always)]
+        public Poliorcetic[] Poliorcetic { get; set; }
+
+        [JsonProperty("poormaster", Required = Required.Always)]
+        public Poormaster[] Poormaster { get; set; }
+
+        [JsonProperty("potwhisky", Required = Required.Always)]
+        public PotwhiskyElement[] Potwhisky { get; set; }
+
+        [JsonProperty("practicalizer", Required = Required.Always)]
+        public Practicalizer[] Practicalizer { get; set; }
+
+        [JsonProperty("prefreshman", Required = Required.Always)]
+        public PrefreshmanElement[] Prefreshman { get; set; }
+
+        [JsonProperty("prehensility", Required = Required.Always)]
+        public Prehensility[] Prehensility { get; set; }
+
+        [JsonProperty("prevoidance", Required = Required.Always)]
+        public Prevoidance[] Prevoidance { get; set; }
+
+        [JsonProperty("probant", Required = Required.Always)]
+        public Dictionary<string, long?>[] Probant { get; set; }
+
+        [JsonProperty("protext", Required = Required.Always)]
+        public Protext[] Protext { get; set; }
+    }
+
+    public partial record JurorClass
+    {
+        [JsonProperty("adipsy", Required = Required.AllowNull)]
+        public object Adipsy { get; set; }
+
+        [JsonProperty("auxiliator", Required = Required.AllowNull)]
+        public object Auxiliator { get; set; }
+
+        [JsonProperty("benda", Required = Required.AllowNull)]
+        public object Benda { get; set; }
+
+        [JsonProperty("benjamin", Required = Required.AllowNull)]
+        public object Benjamin { get; set; }
+
+        [JsonProperty("brandling", Required = Required.AllowNull)]
+        public object Brandling { get; set; }
+
+        [JsonProperty("epicurishly", Required = Required.AllowNull)]
+        public object Epicurishly { get; set; }
+
+        [JsonProperty("eremochaetous", Required = Required.AllowNull)]
+        public object Eremochaetous { get; set; }
+
+        [JsonProperty("marten", Required = Required.AllowNull)]
+        public object Marten { get; set; }
+
+        [JsonProperty("monocline", Required = Required.AllowNull)]
+        public object Monocline { get; set; }
+
+        [JsonProperty("Olea", Required = Required.AllowNull)]
+        public object Olea { get; set; }
+
+        [JsonProperty("palgat", Required = Required.AllowNull)]
+        public object Palgat { get; set; }
+
+        [JsonProperty("pennyworth", Required = Required.AllowNull)]
+        public object Pennyworth { get; set; }
+
+        [JsonProperty("pioury", Required = Required.AllowNull)]
+        public object Pioury { get; set; }
+
+        [JsonProperty("pragmatistic", Required = Required.AllowNull)]
+        public object Pragmatistic { get; set; }
+
+        [JsonProperty("stylelessness", Required = Required.AllowNull)]
+        public object Stylelessness { get; set; }
+
+        [JsonProperty("systematical", Required = Required.AllowNull)]
+        public object Systematical { get; set; }
+
+        [JsonProperty("thready", Required = Required.AllowNull)]
+        public object Thready { get; set; }
+
+        [JsonProperty("uncontemporary", Required = Required.AllowNull)]
+        public object Uncontemporary { get; set; }
+
+        [JsonProperty("uncouched", Required = Required.AllowNull)]
+        public object Uncouched { get; set; }
+
+        [JsonProperty("uninhabitedness", Required = Required.AllowNull)]
+        public object Uninhabitedness { get; set; }
+    }
+
+    public partial record LadronismClass
+    {
+        [JsonProperty("acclaimer", Required = Required.AllowNull)]
+        public object Acclaimer { get; set; }
+
+        [JsonProperty("achree", Required = Required.AllowNull)]
+        public object Achree { get; set; }
+
+        [JsonProperty("base", Required = Required.AllowNull)]
+        public object Base { get; set; }
+
+        [JsonProperty("conundrumize", Required = Required.AllowNull)]
+        public object Conundrumize { get; set; }
+
+        [JsonProperty("degerminator", Required = Required.AllowNull)]
+        public object Degerminator { get; set; }
+
+        [JsonProperty("describable", Required = Required.AllowNull)]
+        public object Describable { get; set; }
+
+        [JsonProperty("exasperatedly", Required = Required.AllowNull)]
+        public object Exasperatedly { get; set; }
+
+        [JsonProperty("heroine", Required = Required.AllowNull)]
+        public object Heroine { get; set; }
+
+        [JsonProperty("indazin", Required = Required.AllowNull)]
+        public object Indazin { get; set; }
+
+        [JsonProperty("luteous", Required = Required.AllowNull)]
+        public object Luteous { get; set; }
+
+        [JsonProperty("papular", Required = Required.AllowNull)]
+        public object Papular { get; set; }
+
+        [JsonProperty("pritch", Required = Required.AllowNull)]
+        public object Pritch { get; set; }
+
+        [JsonProperty("Prodenia", Required = Required.AllowNull)]
+        public object Prodenia { get; set; }
+
+        [JsonProperty("seege", Required = Required.AllowNull)]
+        public object Seege { get; set; }
+
+        [JsonProperty("shopgirl", Required = Required.AllowNull)]
+        public object Shopgirl { get; set; }
+
+        [JsonProperty("tragedietta", Required = Required.AllowNull)]
+        public object Tragedietta { get; set; }
+
+        [JsonProperty("unsparse", Required = Required.AllowNull)]
+        public object Unsparse { get; set; }
+
+        [JsonProperty("uplook", Required = Required.AllowNull)]
+        public object Uplook { get; set; }
+
+        [JsonProperty("vermiformis", Required = Required.AllowNull)]
+        public object Vermiformis { get; set; }
+
+        [JsonProperty("whafabout", Required = Required.AllowNull)]
+        public object Whafabout { get; set; }
+    }
+
+    public partial record LandlubberlyClass
+    {
+        [JsonProperty("acropoleis", Required = Required.AllowNull)]
+        public object Acropoleis { get; set; }
+
+        [JsonProperty("aminate", Required = Required.AllowNull)]
+        public object Aminate { get; set; }
+
+        [JsonProperty("Amyraldism", Required = Required.AllowNull)]
+        public object Amyraldism { get; set; }
+
+        [JsonProperty("bipenniform", Required = Required.AllowNull)]
+        public object Bipenniform { get; set; }
+
+        [JsonProperty("bugre", Required = Required.AllowNull)]
+        public object Bugre { get; set; }
+
+        [JsonProperty("calycule", Required = Required.AllowNull)]
+        public object Calycule { get; set; }
+
+        [JsonProperty("caoutchouc", Required = Required.AllowNull)]
+        public object Caoutchouc { get; set; }
+
+        [JsonProperty("disprover", Required = Required.AllowNull)]
+        public object Disprover { get; set; }
+
+        [JsonProperty("fitroot", Required = Required.AllowNull)]
+        public object Fitroot { get; set; }
+
+        [JsonProperty("fulgently", Required = Required.AllowNull)]
+        public object Fulgently { get; set; }
+
+        [JsonProperty("kickup", Required = Required.AllowNull)]
+        public object Kickup { get; set; }
+
+        [JsonProperty("laevoversion", Required = Required.AllowNull)]
+        public object Laevoversion { get; set; }
+
+        [JsonProperty("moter", Required = Required.AllowNull)]
+        public object Moter { get; set; }
+
+        [JsonProperty("objectivity", Required = Required.AllowNull)]
+        public object Objectivity { get; set; }
+
+        [JsonProperty("posterity", Required = Required.AllowNull)]
+        public object Posterity { get; set; }
+
+        [JsonProperty("postnuptial", Required = Required.AllowNull)]
+        public object Postnuptial { get; set; }
+
+        [JsonProperty("precedentary", Required = Required.AllowNull)]
+        public object Precedentary { get; set; }
+
+        [JsonProperty("saddling", Required = Required.AllowNull)]
+        public object Saddling { get; set; }
+
+        [JsonProperty("subcurrent", Required = Required.AllowNull)]
+        public object Subcurrent { get; set; }
+
+        [JsonProperty("unrecriminative", Required = Required.AllowNull)]
+        public object Unrecriminative { get; set; }
+    }
+
+    public partial record LupusClass
+    {
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("Chlorioninae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorioninae { get; set; }
+
+        [JsonProperty("Corvinae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Corvinae { get; set; }
+
+        [JsonProperty("Crassina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crassina { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("exiguity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Exiguity { get; set; }
+
+        [JsonProperty("farcist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Farcist { get; set; }
+
+        [JsonProperty("holographical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Holographical { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("ichthyophagan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ichthyophagan { get; set; }
+
+        [JsonProperty("implacable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Implacable { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("outshiner", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Outshiner { get; set; }
+
+        [JsonProperty("overweather", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overweather { get; set; }
+
+        [JsonProperty("protonegroid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Protonegroid { get; set; }
+
+        [JsonProperty("shallowish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shallowish { get; set; }
+
+        [JsonProperty("snoke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snoke { get; set; }
+
+        [JsonProperty("snout", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snout { get; set; }
+
+        [JsonProperty("surveillance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Surveillance { get; set; }
+
+        [JsonProperty("threshingtime", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Threshingtime { get; set; }
+
+        [JsonProperty("Thysanocarpus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thysanocarpus { get; set; }
+
+        [JsonProperty("unsignificantly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsignificantly { get; set; }
+
+        [JsonProperty("unsnap", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsnap { get; set; }
+
+        [JsonProperty("vendible", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Vendible { get; set; }
+    }
+
+    public partial record Maslin
+    {
+        [JsonProperty("Alicant", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alicant { get; set; }
+
+        [JsonProperty("antiatonement")]
+        public object Antiatonement { get; set; }
+
+        [JsonProperty("anticorrosive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Anticorrosive { get; set; }
+
+        [JsonProperty("aphidozer")]
+        public object Aphidozer { get; set; }
+
+        [JsonProperty("Bakuninist")]
+        public object Bakuninist { get; set; }
+
+        [JsonProperty("be", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Be { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chub", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chub { get; set; }
+
+        [JsonProperty("cuprosilicon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cuprosilicon { get; set; }
+
+        [JsonProperty("curtailedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Curtailedly { get; set; }
+
+        [JsonProperty("dellenite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dellenite { get; set; }
+
+        [JsonProperty("Dimitry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dimitry { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("edifying")]
+        public object Edifying { get; set; }
+
+        [JsonProperty("ethmoiditis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ethmoiditis { get; set; }
+
+        [JsonProperty("gastralgy")]
+        public object Gastralgy { get; set; }
+
+        [JsonProperty("goatherd", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goatherd { get; set; }
+
+        [JsonProperty("hammerdress", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hammerdress { get; set; }
+
+        [JsonProperty("hangfire")]
+        public object Hangfire { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lacunosity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lacunosity { get; set; }
+
+        [JsonProperty("longiloquence")]
+        public object Longiloquence { get; set; }
+
+        [JsonProperty("mameliere", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mameliere { get; set; }
+
+        [JsonProperty("motherless")]
+        public object Motherless { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("noncorrodible")]
+        public object Noncorrodible { get; set; }
+
+        [JsonProperty("nonsensicality")]
+        public object Nonsensicality { get; set; }
+
+        [JsonProperty("oafishly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Oafishly { get; set; }
+
+        [JsonProperty("pfund")]
+        public object Pfund { get; set; }
+
+        [JsonProperty("preadvisory")]
+        public object Preadvisory { get; set; }
+
+        [JsonProperty("retroflexed")]
+        public object Retroflexed { get; set; }
+
+        [JsonProperty("saccharulmic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Saccharulmic { get; set; }
+
+        [JsonProperty("scowlful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scowlful { get; set; }
+
+        [JsonProperty("secluded")]
+        public object Secluded { get; set; }
+
+        [JsonProperty("slackage")]
+        public object Slackage { get; set; }
+
+        [JsonProperty("sphaeridial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sphaeridial { get; set; }
+
+        [JsonProperty("spondulics")]
+        public object Spondulics { get; set; }
+
+        [JsonProperty("subsecive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subsecive { get; set; }
+
+        [JsonProperty("swellmobsman")]
+        public object Swellmobsman { get; set; }
+
+        [JsonProperty("trachyglossate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trachyglossate { get; set; }
+
+        [JsonProperty("trialogue")]
+        public object Trialogue { get; set; }
+
+        [JsonProperty("unassuaged", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unassuaged { get; set; }
+
+        [JsonProperty("ungross")]
+        public object Ungross { get; set; }
+
+        [JsonProperty("unjudiciously")]
+        public object Unjudiciously { get; set; }
+    }
+
+    public partial record MonaziteClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record MonotheisticallyClass
+    {
+        [JsonProperty("blaspheme")]
+        public object Blaspheme { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("celiosalpingectomy")]
+        public object Celiosalpingectomy { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("consummativeness")]
+        public object Consummativeness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("egestive")]
+        public object Egestive { get; set; }
+
+        [JsonProperty("enchylema")]
+        public object Enchylema { get; set; }
+
+        [JsonProperty("gasconade")]
+        public object Gasconade { get; set; }
+
+        [JsonProperty("holidayer")]
+        public object Holidayer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("intuitionalism")]
+        public object Intuitionalism { get; set; }
+
+        [JsonProperty("lophiostomate")]
+        public object Lophiostomate { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("nonvolition")]
+        public object Nonvolition { get; set; }
+
+        [JsonProperty("palatableness")]
+        public object Palatableness { get; set; }
+
+        [JsonProperty("pimpery")]
+        public object Pimpery { get; set; }
+
+        [JsonProperty("previolation")]
+        public object Previolation { get; set; }
+
+        [JsonProperty("reconveyance")]
+        public object Reconveyance { get; set; }
+
+        [JsonProperty("registership")]
+        public object Registership { get; set; }
+
+        [JsonProperty("rhyacolite")]
+        public object Rhyacolite { get; set; }
+
+        [JsonProperty("smithereens")]
+        public object Smithereens { get; set; }
+
+        [JsonProperty("superedification")]
+        public object Superedification { get; set; }
+
+        [JsonProperty("trust")]
+        public object Trust { get; set; }
+
+        [JsonProperty("whitestone")]
+        public object Whitestone { get; set; }
+    }
+
+    public partial record Noncontributing
+    {
+        [JsonProperty("estevin", Required = Required.Always)]
+        public string Estevin { get; set; }
+
+        [JsonProperty("jolterhead", Required = Required.Always)]
+        public double Jolterhead { get; set; }
+
+        [JsonProperty("sauternes", Required = Required.Always)]
+        public long Sauternes { get; set; }
+
+        [JsonProperty("sparsely", Required = Required.Always)]
+        public bool Sparsely { get; set; }
+
+        [JsonProperty("unrequested", Required = Required.AllowNull)]
+        public object Unrequested { get; set; }
+    }
+
+    public partial record OccupationalistClass
+    {
+        [JsonProperty("beholdable", Required = Required.AllowNull)]
+        public object Beholdable { get; set; }
+
+        [JsonProperty("brotuliform", Required = Required.AllowNull)]
+        public object Brotuliform { get; set; }
+
+        [JsonProperty("Chimakum", Required = Required.AllowNull)]
+        public object Chimakum { get; set; }
+
+        [JsonProperty("doodler", Required = Required.AllowNull)]
+        public object Doodler { get; set; }
+
+        [JsonProperty("emulsin", Required = Required.AllowNull)]
+        public object Emulsin { get; set; }
+
+        [JsonProperty("Fin", Required = Required.AllowNull)]
+        public object Fin { get; set; }
+
+        [JsonProperty("flourishing", Required = Required.AllowNull)]
+        public object Flourishing { get; set; }
+
+        [JsonProperty("flueless", Required = Required.AllowNull)]
+        public object Flueless { get; set; }
+
+        [JsonProperty("furtively", Required = Required.AllowNull)]
+        public object Furtively { get; set; }
+
+        [JsonProperty("gritter", Required = Required.AllowNull)]
+        public object Gritter { get; set; }
+
+        [JsonProperty("interwish", Required = Required.AllowNull)]
+        public object Interwish { get; set; }
+
+        [JsonProperty("monoxylic", Required = Required.AllowNull)]
+        public object Monoxylic { get; set; }
+
+        [JsonProperty("myristic", Required = Required.AllowNull)]
+        public object Myristic { get; set; }
+
+        [JsonProperty("nightwear", Required = Required.AllowNull)]
+        public object Nightwear { get; set; }
+
+        [JsonProperty("peruser", Required = Required.AllowNull)]
+        public object Peruser { get; set; }
+
+        [JsonProperty("theoastrological", Required = Required.AllowNull)]
+        public object Theoastrological { get; set; }
+
+        [JsonProperty("thumby", Required = Required.AllowNull)]
+        public object Thumby { get; set; }
+
+        [JsonProperty("tingitid", Required = Required.AllowNull)]
+        public object Tingitid { get; set; }
+
+        [JsonProperty("trailless", Required = Required.AllowNull)]
+        public object Trailless { get; set; }
+
+        [JsonProperty("unpocketed", Required = Required.AllowNull)]
+        public object Unpocketed { get; set; }
+    }
+
+    public partial record OutrivalClass
+    {
+        [JsonProperty("adroitly", Required = Required.AllowNull)]
+        public object Adroitly { get; set; }
+
+        [JsonProperty("bridehood", Required = Required.AllowNull)]
+        public object Bridehood { get; set; }
+
+        [JsonProperty("Castoroides", Required = Required.AllowNull)]
+        public object Castoroides { get; set; }
+
+        [JsonProperty("Czechoslovak", Required = Required.AllowNull)]
+        public object Czechoslovak { get; set; }
+
+        [JsonProperty("diagenesis", Required = Required.AllowNull)]
+        public object Diagenesis { get; set; }
+
+        [JsonProperty("dihexahedron", Required = Required.AllowNull)]
+        public object Dihexahedron { get; set; }
+
+        [JsonProperty("dopester", Required = Required.AllowNull)]
+        public object Dopester { get; set; }
+
+        [JsonProperty("eumerism", Required = Required.AllowNull)]
+        public object Eumerism { get; set; }
+
+        [JsonProperty("flyness", Required = Required.AllowNull)]
+        public object Flyness { get; set; }
+
+        [JsonProperty("fouler", Required = Required.AllowNull)]
+        public object Fouler { get; set; }
+
+        [JsonProperty("laudanosine", Required = Required.AllowNull)]
+        public object Laudanosine { get; set; }
+
+        [JsonProperty("Lingulidae", Required = Required.AllowNull)]
+        public object Lingulidae { get; set; }
+
+        [JsonProperty("minutary", Required = Required.AllowNull)]
+        public object Minutary { get; set; }
+
+        [JsonProperty("mitra", Required = Required.AllowNull)]
+        public object Mitra { get; set; }
+
+        [JsonProperty("opisthorchiasis", Required = Required.AllowNull)]
+        public object Opisthorchiasis { get; set; }
+
+        [JsonProperty("pensively", Required = Required.AllowNull)]
+        public object Pensively { get; set; }
+
+        [JsonProperty("pubigerous", Required = Required.AllowNull)]
+        public object Pubigerous { get; set; }
+
+        [JsonProperty("rebellious", Required = Required.AllowNull)]
+        public object Rebellious { get; set; }
+
+        [JsonProperty("recodify", Required = Required.AllowNull)]
+        public object Recodify { get; set; }
+
+        [JsonProperty("unpaced", Required = Required.AllowNull)]
+        public object Unpaced { get; set; }
+    }
+
+    public partial record PiaculumClass
+    {
+        [JsonProperty("alada", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alada { get; set; }
+
+        [JsonProperty("amphistomous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amphistomous { get; set; }
+
+        [JsonProperty("boysenberry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Boysenberry { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("decardinalize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Decardinalize { get; set; }
+
+        [JsonProperty("discouragement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Discouragement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("doitrified", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Doitrified { get; set; }
+
+        [JsonProperty("hexaspermous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hexaspermous { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("insinking", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Insinking { get; set; }
+
+        [JsonProperty("loathfulness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loathfulness { get; set; }
+
+        [JsonProperty("miasmatical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Miasmatical { get; set; }
+
+        [JsonProperty("neurofibril", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Neurofibril { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("phonendoscope", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Phonendoscope { get; set; }
+
+        [JsonProperty("pilferment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Pilferment { get; set; }
+
+        [JsonProperty("predismissory", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Predismissory { get; set; }
+
+        [JsonProperty("preinscription", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preinscription { get; set; }
+
+        [JsonProperty("quotative", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quotative { get; set; }
+
+        [JsonProperty("sienna", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sienna { get; set; }
+
+        [JsonProperty("thorax", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thorax { get; set; }
+
+        [JsonProperty("yachting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yachting { get; set; }
+
+        [JsonProperty("Zipper", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Zipper { get; set; }
+    }
+
+    public partial record Pneumocele
+    {
+        [JsonProperty("Carbonarism")]
+        public object Carbonarism { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cineolic")]
+        public object Cineolic { get; set; }
+
+        [JsonProperty("cobbly")]
+        public object Cobbly { get; set; }
+
+        [JsonProperty("conchyliferous")]
+        public object Conchyliferous { get; set; }
+
+        [JsonProperty("congregation")]
+        public object Congregation { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("enterotomy")]
+        public object Enterotomy { get; set; }
+
+        [JsonProperty("entophytal")]
+        public object Entophytal { get; set; }
+
+        [JsonProperty("fewtrils")]
+        public object Fewtrils { get; set; }
+
+        [JsonProperty("herem")]
+        public object Herem { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Koniga")]
+        public object Koniga { get; set; }
+
+        [JsonProperty("meticulosity")]
+        public object Meticulosity { get; set; }
+
+        [JsonProperty("Micky")]
+        public object Micky { get; set; }
+
+        [JsonProperty("mismarriage")]
+        public object Mismarriage { get; set; }
+
+        [JsonProperty("neurotrophic")]
+        public object Neurotrophic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("persuasively")]
+        public object Persuasively { get; set; }
+
+        [JsonProperty("replaceable")]
+        public object Replaceable { get; set; }
+
+        [JsonProperty("silex")]
+        public object Silex { get; set; }
+
+        [JsonProperty("taillight")]
+        public object Taillight { get; set; }
+
+        [JsonProperty("unjealous")]
+        public object Unjealous { get; set; }
+
+        [JsonProperty("visitorial")]
+        public object Visitorial { get; set; }
+    }
+
+    public partial record PotwhiskyClass
+    {
+        [JsonProperty("arciform", Required = Required.AllowNull)]
+        public object Arciform { get; set; }
+
+        [JsonProperty("cresolin", Required = Required.AllowNull)]
+        public object Cresolin { get; set; }
+
+        [JsonProperty("disheartener", Required = Required.AllowNull)]
+        public object Disheartener { get; set; }
+
+        [JsonProperty("disproportionable", Required = Required.AllowNull)]
+        public object Disproportionable { get; set; }
+
+        [JsonProperty("Euchorda", Required = Required.AllowNull)]
+        public object Euchorda { get; set; }
+
+        [JsonProperty("ferryway", Required = Required.AllowNull)]
+        public object Ferryway { get; set; }
+
+        [JsonProperty("filamentiferous", Required = Required.AllowNull)]
+        public object Filamentiferous { get; set; }
+
+        [JsonProperty("flemish", Required = Required.AllowNull)]
+        public object Flemish { get; set; }
+
+        [JsonProperty("forgainst", Required = Required.AllowNull)]
+        public object Forgainst { get; set; }
+
+        [JsonProperty("grainering", Required = Required.AllowNull)]
+        public object Grainering { get; set; }
+
+        [JsonProperty("irrevoluble", Required = Required.AllowNull)]
+        public object Irrevoluble { get; set; }
+
+        [JsonProperty("kindredship", Required = Required.AllowNull)]
+        public object Kindredship { get; set; }
+
+        [JsonProperty("pinguitudinous", Required = Required.AllowNull)]
+        public object Pinguitudinous { get; set; }
+
+        [JsonProperty("simpletonic", Required = Required.AllowNull)]
+        public object Simpletonic { get; set; }
+
+        [JsonProperty("singsong", Required = Required.AllowNull)]
+        public object Singsong { get; set; }
+
+        [JsonProperty("submergement", Required = Required.AllowNull)]
+        public object Submergement { get; set; }
+
+        [JsonProperty("supraoesophagal", Required = Required.AllowNull)]
+        public object Supraoesophagal { get; set; }
+
+        [JsonProperty("thrashel", Required = Required.AllowNull)]
+        public object Thrashel { get; set; }
+
+        [JsonProperty("tyremesis", Required = Required.AllowNull)]
+        public object Tyremesis { get; set; }
+
+        [JsonProperty("Yoruba", Required = Required.AllowNull)]
+        public object Yoruba { get; set; }
+    }
+
+    public partial record PrefreshmanClass
+    {
+        [JsonProperty("azorubine", Required = Required.AllowNull)]
+        public object Azorubine { get; set; }
+
+        [JsonProperty("choroiditis", Required = Required.AllowNull)]
+        public object Choroiditis { get; set; }
+
+        [JsonProperty("coagulatory", Required = Required.AllowNull)]
+        public object Coagulatory { get; set; }
+
+        [JsonProperty("cyclorama", Required = Required.AllowNull)]
+        public object Cyclorama { get; set; }
+
+        [JsonProperty("Dolphus", Required = Required.AllowNull)]
+        public object Dolphus { get; set; }
+
+        [JsonProperty("duckhearted", Required = Required.AllowNull)]
+        public object Duckhearted { get; set; }
+
+        [JsonProperty("Ficus", Required = Required.AllowNull)]
+        public object Ficus { get; set; }
+
+        [JsonProperty("Gemaric", Required = Required.AllowNull)]
+        public object Gemaric { get; set; }
+
+        [JsonProperty("jugation", Required = Required.AllowNull)]
+        public object Jugation { get; set; }
+
+        [JsonProperty("myoliposis", Required = Required.AllowNull)]
+        public object Myoliposis { get; set; }
+
+        [JsonProperty("nonnomination", Required = Required.AllowNull)]
+        public object Nonnomination { get; set; }
+
+        [JsonProperty("palay", Required = Required.AllowNull)]
+        public object Palay { get; set; }
+
+        [JsonProperty("pentactinal", Required = Required.AllowNull)]
+        public object Pentactinal { get; set; }
+
+        [JsonProperty("Phaet", Required = Required.AllowNull)]
+        public object Phaet { get; set; }
+
+        [JsonProperty("piquant", Required = Required.AllowNull)]
+        public object Piquant { get; set; }
+
+        [JsonProperty("registration", Required = Required.AllowNull)]
+        public object Registration { get; set; }
+
+        [JsonProperty("remancipation", Required = Required.AllowNull)]
+        public object Remancipation { get; set; }
+
+        [JsonProperty("scutatiform", Required = Required.AllowNull)]
+        public object Scutatiform { get; set; }
+
+        [JsonProperty("theodolite", Required = Required.AllowNull)]
+        public object Theodolite { get; set; }
+
+        [JsonProperty("underward", Required = Required.AllowNull)]
+        public object Underward { get; set; }
+    }
+
+    public partial struct JurorElement
+    {
+        public bool? Bool;
+        public JurorClass JurorClass;
+
+        public static implicit operator JurorElement(bool Bool)
+        {
+            return new JurorElement { Bool = Bool };
+        }
+        public static implicit operator JurorElement(JurorClass JurorClass)
+        {
+            return new JurorElement { JurorClass = JurorClass };
+        }
+    }
+
+    public partial struct Kongoni
+    {
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Kongoni(long[] IntegerArray)
+        {
+            return new Kongoni { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Kongoni(Dictionary<string, long> IntegerMap)
+        {
+            return new Kongoni { IntegerMap = IntegerMap };
+        }
+    }
+
+    public partial struct LadronismElement
+    {
+        public double? Double;
+        public LadronismClass LadronismClass;
+        public string String;
+
+        public static implicit operator LadronismElement(double Double)
+        {
+            return new LadronismElement { Double = Double };
+        }
+        public static implicit operator LadronismElement(LadronismClass LadronismClass)
+        {
+            return new LadronismElement { LadronismClass = LadronismClass };
+        }
+        public static implicit operator LadronismElement(string String)
+        {
+            return new LadronismElement { String = String };
+        }
+    }
+
+    public partial struct LandlubberlyElement
+    {
+        public bool? Bool;
+        public long? Integer;
+        public LandlubberlyClass LandlubberlyClass;
+
+        public static implicit operator LandlubberlyElement(bool Bool)
+        {
+            return new LandlubberlyElement { Bool = Bool };
+        }
+        public static implicit operator LandlubberlyElement(long Integer)
+        {
+            return new LandlubberlyElement { Integer = Integer };
+        }
+        public static implicit operator LandlubberlyElement(LandlubberlyClass LandlubberlyClass)
+        {
+            return new LandlubberlyElement { LandlubberlyClass = LandlubberlyClass };
+        }
+    }
+
+    public partial struct Listener
+    {
+        public long? Integer;
+        public object[] NullArray;
+
+        public static implicit operator Listener(long Integer)
+        {
+            return new Listener { Integer = Integer };
+        }
+        public static implicit operator Listener(object[] NullArray)
+        {
+            return new Listener { NullArray = NullArray };
+        }
+    }
+
+    public partial struct LupusElement
+    {
+        public long? Integer;
+        public LupusClass LupusClass;
+
+        public static implicit operator LupusElement(long Integer)
+        {
+            return new LupusElement { Integer = Integer };
+        }
+        public static implicit operator LupusElement(LupusClass LupusClass)
+        {
+            return new LupusElement { LupusClass = LupusClass };
+        }
+    }
+
+    public partial struct MonaziteElement
+    {
+        public double? Double;
+        public MonaziteClass MonaziteClass;
+
+        public static implicit operator MonaziteElement(double Double)
+        {
+            return new MonaziteElement { Double = Double };
+        }
+        public static implicit operator MonaziteElement(MonaziteClass MonaziteClass)
+        {
+            return new MonaziteElement { MonaziteClass = MonaziteClass };
+        }
+    }
+
+    public partial struct Monoliteral
+    {
+        public bool? Bool;
+        public object[] NullArray;
+
+        public static implicit operator Monoliteral(bool Bool)
+        {
+            return new Monoliteral { Bool = Bool };
+        }
+        public static implicit operator Monoliteral(object[] NullArray)
+        {
+            return new Monoliteral { NullArray = NullArray };
+        }
+    }
+
+    public partial struct MonotheisticallyElement
+    {
+        public MonotheisticallyClass MonotheisticallyClass;
+        public object[] NullArray;
+
+        public static implicit operator MonotheisticallyElement(MonotheisticallyClass MonotheisticallyClass)
+        {
+            return new MonotheisticallyElement { MonotheisticallyClass = MonotheisticallyClass };
+        }
+        public static implicit operator MonotheisticallyElement(object[] NullArray)
+        {
+            return new MonotheisticallyElement { NullArray = NullArray };
+        }
+    }
+
+    public partial struct Montage
+    {
+        public double? Double;
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Montage(double Double)
+        {
+            return new Montage { Double = Double };
+        }
+        public static implicit operator Montage(object[] NullArray)
+        {
+            return new Montage { NullArray = NullArray };
+        }
+        public static implicit operator Montage(string String)
+        {
+            return new Montage { String = String };
+        }
+    }
+
+    public partial struct Moralness
+    {
+        public double? Double;
+        public object[] NullArray;
+
+        public static implicit operator Moralness(double Double)
+        {
+            return new Moralness { Double = Double };
+        }
+        public static implicit operator Moralness(object[] NullArray)
+        {
+            return new Moralness { NullArray = NullArray };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return NullArray == null && Double == null;
+            }
+        }
+    }
+
+    public partial struct Mulishly
+    {
+        public double? Double;
+        public long[] IntegerArray;
+
+        public static implicit operator Mulishly(double Double)
+        {
+            return new Mulishly { Double = Double };
+        }
+        public static implicit operator Mulishly(long[] IntegerArray)
+        {
+            return new Mulishly { IntegerArray = IntegerArray };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return IntegerArray == null && Double == null;
+            }
+        }
+    }
+
+    public partial struct Myoscope
+    {
+        public bool? Bool;
+        public long? Integer;
+        public object[] NullArray;
+
+        public static implicit operator Myoscope(bool Bool)
+        {
+            return new Myoscope { Bool = Bool };
+        }
+        public static implicit operator Myoscope(long Integer)
+        {
+            return new Myoscope { Integer = Integer };
+        }
+        public static implicit operator Myoscope(object[] NullArray)
+        {
+            return new Myoscope { NullArray = NullArray };
+        }
+    }
+
+    public partial struct Neuromastic
+    {
+        public double? Double;
+        public object[] NullArray;
+
+        public static implicit operator Neuromastic(double Double)
+        {
+            return new Neuromastic { Double = Double };
+        }
+        public static implicit operator Neuromastic(object[] NullArray)
+        {
+            return new Neuromastic { NullArray = NullArray };
+        }
+    }
+
+    public partial struct Nonnervous
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Nonnervous(bool Bool)
+        {
+            return new Nonnervous { Bool = Bool };
+        }
+        public static implicit operator Nonnervous(long Integer)
+        {
+            return new Nonnervous { Integer = Integer };
+        }
+    }
+
+    public partial struct Nonvaluation
+    {
+        public bool? Bool;
+        public double? Double;
+        public object[] NullArray;
+
+        public static implicit operator Nonvaluation(bool Bool)
+        {
+            return new Nonvaluation { Bool = Bool };
+        }
+        public static implicit operator Nonvaluation(double Double)
+        {
+            return new Nonvaluation { Double = Double };
+        }
+        public static implicit operator Nonvaluation(object[] NullArray)
+        {
+            return new Nonvaluation { NullArray = NullArray };
+        }
+    }
+
+    public partial struct OccupationalistElement
+    {
+        public object[] NullArray;
+        public OccupationalistClass OccupationalistClass;
+
+        public static implicit operator OccupationalistElement(object[] NullArray)
+        {
+            return new OccupationalistElement { NullArray = NullArray };
+        }
+        public static implicit operator OccupationalistElement(OccupationalistClass OccupationalistClass)
+        {
+            return new OccupationalistElement { OccupationalistClass = OccupationalistClass };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return NullArray == null && OccupationalistClass == null;
+            }
+        }
+    }
+
+    public partial struct OutrivalElement
+    {
+        public double? Double;
+        public OutrivalClass OutrivalClass;
+
+        public static implicit operator OutrivalElement(double Double)
+        {
+            return new OutrivalElement { Double = Double };
+        }
+        public static implicit operator OutrivalElement(OutrivalClass OutrivalClass)
+        {
+            return new OutrivalElement { OutrivalClass = OutrivalClass };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return OutrivalClass == null && Double == null;
+            }
+        }
+    }
+
+    public partial struct Paleographically
+    {
+        public double? Double;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Paleographically(double Double)
+        {
+            return new Paleographically { Double = Double };
+        }
+        public static implicit operator Paleographically(Dictionary<string, long?> UnionMap)
+        {
+            return new Paleographically { UnionMap = UnionMap };
+        }
+    }
+
+    public partial struct Pamphletwise
+    {
+        public long? Integer;
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Pamphletwise(long Integer)
+        {
+            return new Pamphletwise { Integer = Integer };
+        }
+        public static implicit operator Pamphletwise(Dictionary<string, long> IntegerMap)
+        {
+            return new Pamphletwise { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Pamphletwise(string String)
+        {
+            return new Pamphletwise { String = String };
+        }
+    }
+
+    public partial struct Pediatric
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Pediatric(bool Bool)
+        {
+            return new Pediatric { Bool = Bool };
+        }
+        public static implicit operator Pediatric(double Double)
+        {
+            return new Pediatric { Double = Double };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return Bool == null && Double == null;
+            }
+        }
+    }
+
+    public partial struct PiaculumElement
+    {
+        public double? Double;
+        public PiaculumClass PiaculumClass;
+
+        public static implicit operator PiaculumElement(double Double)
+        {
+            return new PiaculumElement { Double = Double };
+        }
+        public static implicit operator PiaculumElement(PiaculumClass PiaculumClass)
+        {
+            return new PiaculumElement { PiaculumClass = PiaculumClass };
+        }
+    }
+
+    public partial struct Piccadilly
+    {
+        public double? Double;
+        public string String;
+
+        public static implicit operator Piccadilly(double Double)
+        {
+            return new Piccadilly { Double = Double };
+        }
+        public static implicit operator Piccadilly(string String)
+        {
+            return new Piccadilly { String = String };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return Double == null && String == null;
+            }
+        }
+    }
+
+    public partial struct Piffler
+    {
+        public MonaziteClass MonaziteClass;
+        public object[] NullArray;
+
+        public static implicit operator Piffler(MonaziteClass MonaziteClass)
+        {
+            return new Piffler { MonaziteClass = MonaziteClass };
+        }
+        public static implicit operator Piffler(object[] NullArray)
+        {
+            return new Piffler { NullArray = NullArray };
+        }
+    }
+
+    public partial struct Pithful
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Pithful(bool Bool)
+        {
+            return new Pithful { Bool = Bool };
+        }
+        public static implicit operator Pithful(long Integer)
+        {
+            return new Pithful { Integer = Integer };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return Bool == null && Integer == null;
+            }
+        }
+    }
+
+    public partial struct Placuntiti
+    {
+        public long? Integer;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Placuntiti(long Integer)
+        {
+            return new Placuntiti { Integer = Integer };
+        }
+        public static implicit operator Placuntiti(Dictionary<string, long> IntegerMap)
+        {
+            return new Placuntiti { IntegerMap = IntegerMap };
+        }
+    }
+
+    public partial struct Plectopterous
+    {
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Plectopterous(double Double)
+        {
+            return new Plectopterous { Double = Double };
+        }
+        public static implicit operator Plectopterous(Dictionary<string, long> IntegerMap)
+        {
+            return new Plectopterous { IntegerMap = IntegerMap };
+        }
+    }
+
+    public partial struct Poliorcetic
+    {
+        public bool? Bool;
+        public MonaziteClass MonaziteClass;
+
+        public static implicit operator Poliorcetic(bool Bool)
+        {
+            return new Poliorcetic { Bool = Bool };
+        }
+        public static implicit operator Poliorcetic(MonaziteClass MonaziteClass)
+        {
+            return new Poliorcetic { MonaziteClass = MonaziteClass };
+        }
+    }
+
+    public partial struct Poormaster
+    {
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Poormaster(long[] IntegerArray)
+        {
+            return new Poormaster { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Poormaster(Dictionary<string, long> IntegerMap)
+        {
+            return new Poormaster { IntegerMap = IntegerMap };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return IntegerArray == null && IntegerMap == null;
+            }
+        }
+    }
+
+    public partial struct PotwhiskyElement
+    {
+        public long? Integer;
+        public PotwhiskyClass PotwhiskyClass;
+
+        public static implicit operator PotwhiskyElement(long Integer)
+        {
+            return new PotwhiskyElement { Integer = Integer };
+        }
+        public static implicit operator PotwhiskyElement(PotwhiskyClass PotwhiskyClass)
+        {
+            return new PotwhiskyElement { PotwhiskyClass = PotwhiskyClass };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return PotwhiskyClass == null && Integer == null;
+            }
+        }
+    }
+
+    public partial struct Practicalizer
+    {
+        public MonaziteClass MonaziteClass;
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Practicalizer(MonaziteClass MonaziteClass)
+        {
+            return new Practicalizer { MonaziteClass = MonaziteClass };
+        }
+        public static implicit operator Practicalizer(object[] NullArray)
+        {
+            return new Practicalizer { NullArray = NullArray };
+        }
+        public static implicit operator Practicalizer(string String)
+        {
+            return new Practicalizer { String = String };
+        }
+    }
+
+    public partial struct PrefreshmanElement
+    {
+        public object[] NullArray;
+        public PrefreshmanClass PrefreshmanClass;
+        public string String;
+
+        public static implicit operator PrefreshmanElement(object[] NullArray)
+        {
+            return new PrefreshmanElement { NullArray = NullArray };
+        }
+        public static implicit operator PrefreshmanElement(PrefreshmanClass PrefreshmanClass)
+        {
+            return new PrefreshmanElement { PrefreshmanClass = PrefreshmanClass };
+        }
+        public static implicit operator PrefreshmanElement(string String)
+        {
+            return new PrefreshmanElement { String = String };
+        }
+    }
+
+    public partial struct Prehensility
+    {
+        public bool? Bool;
+        public MonaziteClass MonaziteClass;
+        public object[] NullArray;
+
+        public static implicit operator Prehensility(bool Bool)
+        {
+            return new Prehensility { Bool = Bool };
+        }
+        public static implicit operator Prehensility(MonaziteClass MonaziteClass)
+        {
+            return new Prehensility { MonaziteClass = MonaziteClass };
+        }
+        public static implicit operator Prehensility(object[] NullArray)
+        {
+            return new Prehensility { NullArray = NullArray };
+        }
+    }
+
+    public partial struct Prevoidance
+    {
+        public long? Integer;
+        public long[] IntegerArray;
+        public MonaziteClass MonaziteClass;
+
+        public static implicit operator Prevoidance(long Integer)
+        {
+            return new Prevoidance { Integer = Integer };
+        }
+        public static implicit operator Prevoidance(long[] IntegerArray)
+        {
+            return new Prevoidance { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Prevoidance(MonaziteClass MonaziteClass)
+        {
+            return new Prevoidance { MonaziteClass = MonaziteClass };
+        }
+    }
+
+    public partial struct Protext
+    {
+        public bool? Bool;
+        public long[] IntegerArray;
+        public MonaziteClass MonaziteClass;
+
+        public static implicit operator Protext(bool Bool)
+        {
+            return new Protext { Bool = Bool };
+        }
+        public static implicit operator Protext(long[] IntegerArray)
+        {
+            return new Protext { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Protext(MonaziteClass MonaziteClass)
+        {
+            return new Protext { MonaziteClass = MonaziteClass };
+        }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json)
+        {
+            return JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+        }
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self)
+        {
+            return JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+        }
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                JurorElementConverter.Singleton,
+                KongoniConverter.Singleton,
+                LadronismElementConverter.Singleton,
+                LandlubberlyElementConverter.Singleton,
+                ListenerConverter.Singleton,
+                LupusElementConverter.Singleton,
+                MonaziteElementConverter.Singleton,
+                MonoliteralConverter.Singleton,
+                MonotheisticallyElementConverter.Singleton,
+                MontageConverter.Singleton,
+                MoralnessConverter.Singleton,
+                MulishlyConverter.Singleton,
+                MyoscopeConverter.Singleton,
+                NeuromasticConverter.Singleton,
+                NonnervousConverter.Singleton,
+                NonvaluationConverter.Singleton,
+                OccupationalistElementConverter.Singleton,
+                OutrivalElementConverter.Singleton,
+                PaleographicallyConverter.Singleton,
+                PamphletwiseConverter.Singleton,
+                PediatricConverter.Singleton,
+                PiaculumElementConverter.Singleton,
+                PiccadillyConverter.Singleton,
+                PifflerConverter.Singleton,
+                PithfulConverter.Singleton,
+                PlacuntitiConverter.Singleton,
+                PlectopterousConverter.Singleton,
+                PoliorceticConverter.Singleton,
+                PoormasterConverter.Singleton,
+                PotwhiskyElementConverter.Singleton,
+                PracticalizerConverter.Singleton,
+                PrefreshmanElementConverter.Singleton,
+                PrehensilityConverter.Singleton,
+                PrevoidanceConverter.Singleton,
+                ProtextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class JurorElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(JurorElement) || t == typeof(JurorElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new JurorElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<JurorClass>(reader);
+                    return new JurorElement { JurorClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type JurorElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (JurorElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.JurorClass != null)
+            {
+                serializer.Serialize(writer, value.JurorClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type JurorElement");
+        }
+
+        public static readonly JurorElementConverter Singleton = new JurorElementConverter();
+    }
+
+    internal class KongoniConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Kongoni) || t == typeof(Kongoni?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Kongoni { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Kongoni { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Kongoni");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Kongoni)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Kongoni");
+        }
+
+        public static readonly KongoniConverter Singleton = new KongoniConverter();
+    }
+
+    internal class LadronismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(LadronismElement) || t == typeof(LadronismElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new LadronismElement { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LadronismElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LadronismClass>(reader);
+                    return new LadronismElement { LadronismClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LadronismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LadronismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LadronismClass != null)
+            {
+                serializer.Serialize(writer, value.LadronismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LadronismElement");
+        }
+
+        public static readonly LadronismElementConverter Singleton = new LadronismElementConverter();
+    }
+
+    internal class LandlubberlyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(LandlubberlyElement) || t == typeof(LandlubberlyElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LandlubberlyElement { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new LandlubberlyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LandlubberlyClass>(reader);
+                    return new LandlubberlyElement { LandlubberlyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LandlubberlyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LandlubberlyElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.LandlubberlyClass != null)
+            {
+                serializer.Serialize(writer, value.LandlubberlyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LandlubberlyElement");
+        }
+
+        public static readonly LandlubberlyElementConverter Singleton = new LandlubberlyElementConverter();
+    }
+
+    internal class ListenerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Listener) || t == typeof(Listener?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Listener { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Listener { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Listener");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Listener)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Listener");
+        }
+
+        public static readonly ListenerConverter Singleton = new ListenerConverter();
+    }
+
+    internal class LupusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(LupusElement) || t == typeof(LupusElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LupusElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LupusClass>(reader);
+                    return new LupusElement { LupusClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LupusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LupusElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.LupusClass != null)
+            {
+                serializer.Serialize(writer, value.LupusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LupusElement");
+        }
+
+        public static readonly LupusElementConverter Singleton = new LupusElementConverter();
+    }
+
+    internal class MonaziteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(MonaziteElement) || t == typeof(MonaziteElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new MonaziteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new MonaziteElement { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type MonaziteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonaziteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonaziteElement");
+        }
+
+        public static readonly MonaziteElementConverter Singleton = new MonaziteElementConverter();
+    }
+
+    internal class MonoliteralConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Monoliteral) || t == typeof(Monoliteral?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Monoliteral { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Monoliteral { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Monoliteral");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Monoliteral)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Monoliteral");
+        }
+
+        public static readonly MonoliteralConverter Singleton = new MonoliteralConverter();
+    }
+
+    internal class MonotheisticallyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(MonotheisticallyElement) || t == typeof(MonotheisticallyElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonotheisticallyClass>(reader);
+                    return new MonotheisticallyElement { MonotheisticallyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new MonotheisticallyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type MonotheisticallyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonotheisticallyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonotheisticallyClass != null)
+            {
+                serializer.Serialize(writer, value.MonotheisticallyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonotheisticallyElement");
+        }
+
+        public static readonly MonotheisticallyElementConverter Singleton = new MonotheisticallyElementConverter();
+    }
+
+    internal class MontageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Montage) || t == typeof(Montage?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Montage { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Montage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Montage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Montage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Montage)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Montage");
+        }
+
+        public static readonly MontageConverter Singleton = new MontageConverter();
+    }
+
+    internal class MoralnessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Moralness) || t == typeof(Moralness?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Moralness { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Moralness { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Moralness { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Moralness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Moralness)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Moralness");
+        }
+
+        public static readonly MoralnessConverter Singleton = new MoralnessConverter();
+    }
+
+    internal class MulishlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Mulishly) || t == typeof(Mulishly?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Mulishly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Mulishly { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Mulishly { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Mulishly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Mulishly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Mulishly");
+        }
+
+        public static readonly MulishlyConverter Singleton = new MulishlyConverter();
+    }
+
+    internal class MyoscopeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Myoscope) || t == typeof(Myoscope?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Myoscope { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Myoscope { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Myoscope { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Myoscope");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Myoscope)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Myoscope");
+        }
+
+        public static readonly MyoscopeConverter Singleton = new MyoscopeConverter();
+    }
+
+    internal class NeuromasticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Neuromastic) || t == typeof(Neuromastic?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Neuromastic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Neuromastic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Neuromastic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Neuromastic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Neuromastic");
+        }
+
+        public static readonly NeuromasticConverter Singleton = new NeuromasticConverter();
+    }
+
+    internal class NonnervousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Nonnervous) || t == typeof(Nonnervous?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Nonnervous { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonnervous { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonnervous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonnervous)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonnervous");
+        }
+
+        public static readonly NonnervousConverter Singleton = new NonnervousConverter();
+    }
+
+    internal class NonvaluationConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Nonvaluation) || t == typeof(Nonvaluation?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Nonvaluation { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonvaluation { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Nonvaluation { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonvaluation");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonvaluation)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonvaluation");
+        }
+
+        public static readonly NonvaluationConverter Singleton = new NonvaluationConverter();
+    }
+
+    internal class OccupationalistElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(OccupationalistElement) || t == typeof(OccupationalistElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OccupationalistElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OccupationalistClass>(reader);
+                    return new OccupationalistElement { OccupationalistClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new OccupationalistElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OccupationalistElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OccupationalistElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.OccupationalistClass != null)
+            {
+                serializer.Serialize(writer, value.OccupationalistClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OccupationalistElement");
+        }
+
+        public static readonly OccupationalistElementConverter Singleton = new OccupationalistElementConverter();
+    }
+
+    internal class OutrivalElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(OutrivalElement) || t == typeof(OutrivalElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OutrivalElement { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new OutrivalElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OutrivalClass>(reader);
+                    return new OutrivalElement { OutrivalClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type OutrivalElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OutrivalElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OutrivalClass != null)
+            {
+                serializer.Serialize(writer, value.OutrivalClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OutrivalElement");
+        }
+
+        public static readonly OutrivalElementConverter Singleton = new OutrivalElementConverter();
+    }
+
+    internal class PaleographicallyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Paleographically) || t == typeof(Paleographically?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Paleographically { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Paleographically { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Paleographically");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Paleographically)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Paleographically");
+        }
+
+        public static readonly PaleographicallyConverter Singleton = new PaleographicallyConverter();
+    }
+
+    internal class PamphletwiseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Pamphletwise) || t == typeof(Pamphletwise?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pamphletwise { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Pamphletwise { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Pamphletwise { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Pamphletwise");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pamphletwise)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pamphletwise");
+        }
+
+        public static readonly PamphletwiseConverter Singleton = new PamphletwiseConverter();
+    }
+
+    internal class PediatricConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Pediatric) || t == typeof(Pediatric?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pediatric { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Pediatric { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pediatric { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pediatric");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pediatric)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pediatric");
+        }
+
+        public static readonly PediatricConverter Singleton = new PediatricConverter();
+    }
+
+    internal class PiaculumElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(PiaculumElement) || t == typeof(PiaculumElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PiaculumElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PiaculumClass>(reader);
+                    return new PiaculumElement { PiaculumClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PiaculumElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PiaculumElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.PiaculumClass != null)
+            {
+                serializer.Serialize(writer, value.PiaculumClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PiaculumElement");
+        }
+
+        public static readonly PiaculumElementConverter Singleton = new PiaculumElementConverter();
+    }
+
+    internal class PiccadillyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Piccadilly) || t == typeof(Piccadilly?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Piccadilly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Piccadilly { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Piccadilly { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Piccadilly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piccadilly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piccadilly");
+        }
+
+        public static readonly PiccadillyConverter Singleton = new PiccadillyConverter();
+    }
+
+    internal class PifflerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Piffler) || t == typeof(Piffler?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Piffler { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Piffler { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Piffler");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piffler)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piffler");
+        }
+
+        public static readonly PifflerConverter Singleton = new PifflerConverter();
+    }
+
+    internal class PithfulConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Pithful) || t == typeof(Pithful?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pithful { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pithful { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pithful { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pithful");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pithful)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pithful");
+        }
+
+        public static readonly PithfulConverter Singleton = new PithfulConverter();
+    }
+
+    internal class PlacuntitiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Placuntiti) || t == typeof(Placuntiti?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Placuntiti { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Placuntiti { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Placuntiti");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Placuntiti)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Placuntiti");
+        }
+
+        public static readonly PlacuntitiConverter Singleton = new PlacuntitiConverter();
+    }
+
+    internal class PlectopterousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Plectopterous) || t == typeof(Plectopterous?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Plectopterous { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Plectopterous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Plectopterous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Plectopterous)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Plectopterous");
+        }
+
+        public static readonly PlectopterousConverter Singleton = new PlectopterousConverter();
+    }
+
+    internal class PoliorceticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Poliorcetic) || t == typeof(Poliorcetic?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Poliorcetic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Poliorcetic { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Poliorcetic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poliorcetic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poliorcetic");
+        }
+
+        public static readonly PoliorceticConverter Singleton = new PoliorceticConverter();
+    }
+
+    internal class PoormasterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Poormaster) || t == typeof(Poormaster?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Poormaster { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Poormaster { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Poormaster { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Poormaster");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poormaster)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poormaster");
+        }
+
+        public static readonly PoormasterConverter Singleton = new PoormasterConverter();
+    }
+
+    internal class PotwhiskyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(PotwhiskyElement) || t == typeof(PotwhiskyElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new PotwhiskyElement { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PotwhiskyElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PotwhiskyClass>(reader);
+                    return new PotwhiskyElement { PotwhiskyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PotwhiskyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PotwhiskyElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PotwhiskyClass != null)
+            {
+                serializer.Serialize(writer, value.PotwhiskyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PotwhiskyElement");
+        }
+
+        public static readonly PotwhiskyElementConverter Singleton = new PotwhiskyElementConverter();
+    }
+
+    internal class PracticalizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Practicalizer) || t == typeof(Practicalizer?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Practicalizer { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Practicalizer { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Practicalizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Practicalizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Practicalizer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Practicalizer");
+        }
+
+        public static readonly PracticalizerConverter Singleton = new PracticalizerConverter();
+    }
+
+    internal class PrefreshmanElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(PrefreshmanElement) || t == typeof(PrefreshmanElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new PrefreshmanElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PrefreshmanClass>(reader);
+                    return new PrefreshmanElement { PrefreshmanClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new PrefreshmanElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PrefreshmanElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PrefreshmanElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.PrefreshmanClass != null)
+            {
+                serializer.Serialize(writer, value.PrefreshmanClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PrefreshmanElement");
+        }
+
+        public static readonly PrefreshmanElementConverter Singleton = new PrefreshmanElementConverter();
+    }
+
+    internal class PrehensilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Prehensility) || t == typeof(Prehensility?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Prehensility { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prehensility { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Prehensility { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prehensility");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prehensility)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prehensility");
+        }
+
+        public static readonly PrehensilityConverter Singleton = new PrehensilityConverter();
+    }
+
+    internal class PrevoidanceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Prevoidance) || t == typeof(Prevoidance?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Prevoidance { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prevoidance { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Prevoidance { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prevoidance");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prevoidance)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prevoidance");
+        }
+
+        public static readonly PrevoidanceConverter Singleton = new PrevoidanceConverter();
+    }
+
+    internal class ProtextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Protext) || t == typeof(Protext?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Protext { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Protext { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Protext { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protext");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protext)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protext");
+        }
+
+        public static readonly ProtextConverter Singleton = new ProtextConverter();
+    }
+}
diff --git a/head/csharp-records/test/inputs/json/priority/combinations3.json/csharp-version-6--6a3b58bb4100/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations3.json/csharp-version-6--6a3b58bb4100/QuickType.cs
new file mode 100644
index 0000000..ee31b56
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations3.json/csharp-version-6--6a3b58bb4100/QuickType.cs
@@ -0,0 +1,2942 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("juror", Required = Required.Always)]
+        public JurorElement[] Juror { get; set; }
+
+        [JsonProperty("kongoni", Required = Required.Always)]
+        public Kongoni[] Kongoni { get; set; }
+
+        [JsonProperty("ladronism", Required = Required.Always)]
+        public LadronismElement[] Ladronism { get; set; }
+
+        [JsonProperty("landlubberly", Required = Required.Always)]
+        public LandlubberlyElement[] Landlubberly { get; set; }
+
+        [JsonProperty("listener", Required = Required.Always)]
+        public Listener[] Listener { get; set; }
+
+        [JsonProperty("lupus", Required = Required.Always)]
+        public LupusElement[] Lupus { get; set; }
+
+        [JsonProperty("maslin", Required = Required.Always)]
+        public Maslin[] Maslin { get; set; }
+
+        [JsonProperty("monazite", Required = Required.Always)]
+        public MonaziteElement[] Monazite { get; set; }
+
+        [JsonProperty("monoliteral", Required = Required.Always)]
+        public Monoliteral[] Monoliteral { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.Always)]
+        public MonotheisticallyElement[] Monotheistically { get; set; }
+
+        [JsonProperty("montage", Required = Required.Always)]
+        public Montage[] Montage { get; set; }
+
+        [JsonProperty("moralness", Required = Required.Always)]
+        public Moralness[] Moralness { get; set; }
+
+        [JsonProperty("mowra", Required = Required.Always)]
+        public MonaziteClass[] Mowra { get; set; }
+
+        [JsonProperty("mulishly", Required = Required.Always)]
+        public Mulishly[] Mulishly { get; set; }
+
+        [JsonProperty("myoscope", Required = Required.Always)]
+        public Myoscope[] Myoscope { get; set; }
+
+        [JsonProperty("nach", Required = Required.Always)]
+        public long?[][] Nach { get; set; }
+
+        [JsonProperty("neuromastic", Required = Required.Always)]
+        public Neuromastic[] Neuromastic { get; set; }
+
+        [JsonProperty("noncontributing", Required = Required.Always)]
+        public Noncontributing[] Noncontributing { get; set; }
+
+        [JsonProperty("nonnervous", Required = Required.Always)]
+        public Nonnervous[] Nonnervous { get; set; }
+
+        [JsonProperty("nonvaluation", Required = Required.Always)]
+        public Nonvaluation[] Nonvaluation { get; set; }
+
+        [JsonProperty("occupationalist", Required = Required.Always)]
+        public OccupationalistElement[] Occupationalist { get; set; }
+
+        [JsonProperty("outrival", Required = Required.Always)]
+        public OutrivalElement[] Outrival { get; set; }
+
+        [JsonProperty("paleographically", Required = Required.Always)]
+        public Paleographically[] Paleographically { get; set; }
+
+        [JsonProperty("pamphletwise", Required = Required.Always)]
+        public Pamphletwise[] Pamphletwise { get; set; }
+
+        [JsonProperty("pediatrics", Required = Required.Always)]
+        public Pediatric[] Pediatrics { get; set; }
+
+        [JsonProperty("perceptive", Required = Required.Always)]
+        public bool[] Perceptive { get; set; }
+
+        [JsonProperty("piaculum", Required = Required.Always)]
+        public PiaculumElement[] Piaculum { get; set; }
+
+        [JsonProperty("piccadilly", Required = Required.Always)]
+        public Piccadilly[] Piccadilly { get; set; }
+
+        [JsonProperty("piffler", Required = Required.Always)]
+        public Piffler[] Piffler { get; set; }
+
+        [JsonProperty("pithful", Required = Required.Always)]
+        public Pithful[] Pithful { get; set; }
+
+        [JsonProperty("placuntitis", Required = Required.Always)]
+        public Placuntiti[] Placuntitis { get; set; }
+
+        [JsonProperty("plectopterous", Required = Required.Always)]
+        public Plectopterous[] Plectopterous { get; set; }
+
+        [JsonProperty("pneumocele", Required = Required.Always)]
+        public Pneumocele[] Pneumocele { get; set; }
+
+        [JsonProperty("poliorcetic", Required = Required.Always)]
+        public Poliorcetic[] Poliorcetic { get; set; }
+
+        [JsonProperty("poormaster", Required = Required.Always)]
+        public Poormaster[] Poormaster { get; set; }
+
+        [JsonProperty("potwhisky", Required = Required.Always)]
+        public PotwhiskyElement[] Potwhisky { get; set; }
+
+        [JsonProperty("practicalizer", Required = Required.Always)]
+        public Practicalizer[] Practicalizer { get; set; }
+
+        [JsonProperty("prefreshman", Required = Required.Always)]
+        public PrefreshmanElement[] Prefreshman { get; set; }
+
+        [JsonProperty("prehensility", Required = Required.Always)]
+        public Prehensility[] Prehensility { get; set; }
+
+        [JsonProperty("prevoidance", Required = Required.Always)]
+        public Prevoidance[] Prevoidance { get; set; }
+
+        [JsonProperty("probant", Required = Required.Always)]
+        public Dictionary<string, long?>[] Probant { get; set; }
+
+        [JsonProperty("protext", Required = Required.Always)]
+        public Protext[] Protext { get; set; }
+    }
+
+    public partial record JurorClass
+    {
+        [JsonProperty("adipsy", Required = Required.AllowNull)]
+        public object Adipsy { get; set; }
+
+        [JsonProperty("auxiliator", Required = Required.AllowNull)]
+        public object Auxiliator { get; set; }
+
+        [JsonProperty("benda", Required = Required.AllowNull)]
+        public object Benda { get; set; }
+
+        [JsonProperty("benjamin", Required = Required.AllowNull)]
+        public object Benjamin { get; set; }
+
+        [JsonProperty("brandling", Required = Required.AllowNull)]
+        public object Brandling { get; set; }
+
+        [JsonProperty("epicurishly", Required = Required.AllowNull)]
+        public object Epicurishly { get; set; }
+
+        [JsonProperty("eremochaetous", Required = Required.AllowNull)]
+        public object Eremochaetous { get; set; }
+
+        [JsonProperty("marten", Required = Required.AllowNull)]
+        public object Marten { get; set; }
+
+        [JsonProperty("monocline", Required = Required.AllowNull)]
+        public object Monocline { get; set; }
+
+        [JsonProperty("Olea", Required = Required.AllowNull)]
+        public object Olea { get; set; }
+
+        [JsonProperty("palgat", Required = Required.AllowNull)]
+        public object Palgat { get; set; }
+
+        [JsonProperty("pennyworth", Required = Required.AllowNull)]
+        public object Pennyworth { get; set; }
+
+        [JsonProperty("pioury", Required = Required.AllowNull)]
+        public object Pioury { get; set; }
+
+        [JsonProperty("pragmatistic", Required = Required.AllowNull)]
+        public object Pragmatistic { get; set; }
+
+        [JsonProperty("stylelessness", Required = Required.AllowNull)]
+        public object Stylelessness { get; set; }
+
+        [JsonProperty("systematical", Required = Required.AllowNull)]
+        public object Systematical { get; set; }
+
+        [JsonProperty("thready", Required = Required.AllowNull)]
+        public object Thready { get; set; }
+
+        [JsonProperty("uncontemporary", Required = Required.AllowNull)]
+        public object Uncontemporary { get; set; }
+
+        [JsonProperty("uncouched", Required = Required.AllowNull)]
+        public object Uncouched { get; set; }
+
+        [JsonProperty("uninhabitedness", Required = Required.AllowNull)]
+        public object Uninhabitedness { get; set; }
+    }
+
+    public partial record LadronismClass
+    {
+        [JsonProperty("acclaimer", Required = Required.AllowNull)]
+        public object Acclaimer { get; set; }
+
+        [JsonProperty("achree", Required = Required.AllowNull)]
+        public object Achree { get; set; }
+
+        [JsonProperty("base", Required = Required.AllowNull)]
+        public object Base { get; set; }
+
+        [JsonProperty("conundrumize", Required = Required.AllowNull)]
+        public object Conundrumize { get; set; }
+
+        [JsonProperty("degerminator", Required = Required.AllowNull)]
+        public object Degerminator { get; set; }
+
+        [JsonProperty("describable", Required = Required.AllowNull)]
+        public object Describable { get; set; }
+
+        [JsonProperty("exasperatedly", Required = Required.AllowNull)]
+        public object Exasperatedly { get; set; }
+
+        [JsonProperty("heroine", Required = Required.AllowNull)]
+        public object Heroine { get; set; }
+
+        [JsonProperty("indazin", Required = Required.AllowNull)]
+        public object Indazin { get; set; }
+
+        [JsonProperty("luteous", Required = Required.AllowNull)]
+        public object Luteous { get; set; }
+
+        [JsonProperty("papular", Required = Required.AllowNull)]
+        public object Papular { get; set; }
+
+        [JsonProperty("pritch", Required = Required.AllowNull)]
+        public object Pritch { get; set; }
+
+        [JsonProperty("Prodenia", Required = Required.AllowNull)]
+        public object Prodenia { get; set; }
+
+        [JsonProperty("seege", Required = Required.AllowNull)]
+        public object Seege { get; set; }
+
+        [JsonProperty("shopgirl", Required = Required.AllowNull)]
+        public object Shopgirl { get; set; }
+
+        [JsonProperty("tragedietta", Required = Required.AllowNull)]
+        public object Tragedietta { get; set; }
+
+        [JsonProperty("unsparse", Required = Required.AllowNull)]
+        public object Unsparse { get; set; }
+
+        [JsonProperty("uplook", Required = Required.AllowNull)]
+        public object Uplook { get; set; }
+
+        [JsonProperty("vermiformis", Required = Required.AllowNull)]
+        public object Vermiformis { get; set; }
+
+        [JsonProperty("whafabout", Required = Required.AllowNull)]
+        public object Whafabout { get; set; }
+    }
+
+    public partial record LandlubberlyClass
+    {
+        [JsonProperty("acropoleis", Required = Required.AllowNull)]
+        public object Acropoleis { get; set; }
+
+        [JsonProperty("aminate", Required = Required.AllowNull)]
+        public object Aminate { get; set; }
+
+        [JsonProperty("Amyraldism", Required = Required.AllowNull)]
+        public object Amyraldism { get; set; }
+
+        [JsonProperty("bipenniform", Required = Required.AllowNull)]
+        public object Bipenniform { get; set; }
+
+        [JsonProperty("bugre", Required = Required.AllowNull)]
+        public object Bugre { get; set; }
+
+        [JsonProperty("calycule", Required = Required.AllowNull)]
+        public object Calycule { get; set; }
+
+        [JsonProperty("caoutchouc", Required = Required.AllowNull)]
+        public object Caoutchouc { get; set; }
+
+        [JsonProperty("disprover", Required = Required.AllowNull)]
+        public object Disprover { get; set; }
+
+        [JsonProperty("fitroot", Required = Required.AllowNull)]
+        public object Fitroot { get; set; }
+
+        [JsonProperty("fulgently", Required = Required.AllowNull)]
+        public object Fulgently { get; set; }
+
+        [JsonProperty("kickup", Required = Required.AllowNull)]
+        public object Kickup { get; set; }
+
+        [JsonProperty("laevoversion", Required = Required.AllowNull)]
+        public object Laevoversion { get; set; }
+
+        [JsonProperty("moter", Required = Required.AllowNull)]
+        public object Moter { get; set; }
+
+        [JsonProperty("objectivity", Required = Required.AllowNull)]
+        public object Objectivity { get; set; }
+
+        [JsonProperty("posterity", Required = Required.AllowNull)]
+        public object Posterity { get; set; }
+
+        [JsonProperty("postnuptial", Required = Required.AllowNull)]
+        public object Postnuptial { get; set; }
+
+        [JsonProperty("precedentary", Required = Required.AllowNull)]
+        public object Precedentary { get; set; }
+
+        [JsonProperty("saddling", Required = Required.AllowNull)]
+        public object Saddling { get; set; }
+
+        [JsonProperty("subcurrent", Required = Required.AllowNull)]
+        public object Subcurrent { get; set; }
+
+        [JsonProperty("unrecriminative", Required = Required.AllowNull)]
+        public object Unrecriminative { get; set; }
+    }
+
+    public partial record LupusClass
+    {
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("Chlorioninae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorioninae { get; set; }
+
+        [JsonProperty("Corvinae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Corvinae { get; set; }
+
+        [JsonProperty("Crassina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crassina { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("exiguity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Exiguity { get; set; }
+
+        [JsonProperty("farcist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Farcist { get; set; }
+
+        [JsonProperty("holographical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Holographical { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("ichthyophagan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ichthyophagan { get; set; }
+
+        [JsonProperty("implacable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Implacable { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("outshiner", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Outshiner { get; set; }
+
+        [JsonProperty("overweather", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overweather { get; set; }
+
+        [JsonProperty("protonegroid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Protonegroid { get; set; }
+
+        [JsonProperty("shallowish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shallowish { get; set; }
+
+        [JsonProperty("snoke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snoke { get; set; }
+
+        [JsonProperty("snout", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snout { get; set; }
+
+        [JsonProperty("surveillance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Surveillance { get; set; }
+
+        [JsonProperty("threshingtime", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Threshingtime { get; set; }
+
+        [JsonProperty("Thysanocarpus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thysanocarpus { get; set; }
+
+        [JsonProperty("unsignificantly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsignificantly { get; set; }
+
+        [JsonProperty("unsnap", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsnap { get; set; }
+
+        [JsonProperty("vendible", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Vendible { get; set; }
+    }
+
+    public partial record Maslin
+    {
+        [JsonProperty("Alicant", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alicant { get; set; }
+
+        [JsonProperty("antiatonement")]
+        public object Antiatonement { get; set; }
+
+        [JsonProperty("anticorrosive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Anticorrosive { get; set; }
+
+        [JsonProperty("aphidozer")]
+        public object Aphidozer { get; set; }
+
+        [JsonProperty("Bakuninist")]
+        public object Bakuninist { get; set; }
+
+        [JsonProperty("be", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Be { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chub", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chub { get; set; }
+
+        [JsonProperty("cuprosilicon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cuprosilicon { get; set; }
+
+        [JsonProperty("curtailedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Curtailedly { get; set; }
+
+        [JsonProperty("dellenite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dellenite { get; set; }
+
+        [JsonProperty("Dimitry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dimitry { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("edifying")]
+        public object Edifying { get; set; }
+
+        [JsonProperty("ethmoiditis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ethmoiditis { get; set; }
+
+        [JsonProperty("gastralgy")]
+        public object Gastralgy { get; set; }
+
+        [JsonProperty("goatherd", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goatherd { get; set; }
+
+        [JsonProperty("hammerdress", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hammerdress { get; set; }
+
+        [JsonProperty("hangfire")]
+        public object Hangfire { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lacunosity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lacunosity { get; set; }
+
+        [JsonProperty("longiloquence")]
+        public object Longiloquence { get; set; }
+
+        [JsonProperty("mameliere", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mameliere { get; set; }
+
+        [JsonProperty("motherless")]
+        public object Motherless { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("noncorrodible")]
+        public object Noncorrodible { get; set; }
+
+        [JsonProperty("nonsensicality")]
+        public object Nonsensicality { get; set; }
+
+        [JsonProperty("oafishly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Oafishly { get; set; }
+
+        [JsonProperty("pfund")]
+        public object Pfund { get; set; }
+
+        [JsonProperty("preadvisory")]
+        public object Preadvisory { get; set; }
+
+        [JsonProperty("retroflexed")]
+        public object Retroflexed { get; set; }
+
+        [JsonProperty("saccharulmic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Saccharulmic { get; set; }
+
+        [JsonProperty("scowlful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scowlful { get; set; }
+
+        [JsonProperty("secluded")]
+        public object Secluded { get; set; }
+
+        [JsonProperty("slackage")]
+        public object Slackage { get; set; }
+
+        [JsonProperty("sphaeridial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sphaeridial { get; set; }
+
+        [JsonProperty("spondulics")]
+        public object Spondulics { get; set; }
+
+        [JsonProperty("subsecive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subsecive { get; set; }
+
+        [JsonProperty("swellmobsman")]
+        public object Swellmobsman { get; set; }
+
+        [JsonProperty("trachyglossate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trachyglossate { get; set; }
+
+        [JsonProperty("trialogue")]
+        public object Trialogue { get; set; }
+
+        [JsonProperty("unassuaged", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unassuaged { get; set; }
+
+        [JsonProperty("ungross")]
+        public object Ungross { get; set; }
+
+        [JsonProperty("unjudiciously")]
+        public object Unjudiciously { get; set; }
+    }
+
+    public partial record MonaziteClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record MonotheisticallyClass
+    {
+        [JsonProperty("blaspheme")]
+        public object Blaspheme { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("celiosalpingectomy")]
+        public object Celiosalpingectomy { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("consummativeness")]
+        public object Consummativeness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("egestive")]
+        public object Egestive { get; set; }
+
+        [JsonProperty("enchylema")]
+        public object Enchylema { get; set; }
+
+        [JsonProperty("gasconade")]
+        public object Gasconade { get; set; }
+
+        [JsonProperty("holidayer")]
+        public object Holidayer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("intuitionalism")]
+        public object Intuitionalism { get; set; }
+
+        [JsonProperty("lophiostomate")]
+        public object Lophiostomate { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("nonvolition")]
+        public object Nonvolition { get; set; }
+
+        [JsonProperty("palatableness")]
+        public object Palatableness { get; set; }
+
+        [JsonProperty("pimpery")]
+        public object Pimpery { get; set; }
+
+        [JsonProperty("previolation")]
+        public object Previolation { get; set; }
+
+        [JsonProperty("reconveyance")]
+        public object Reconveyance { get; set; }
+
+        [JsonProperty("registership")]
+        public object Registership { get; set; }
+
+        [JsonProperty("rhyacolite")]
+        public object Rhyacolite { get; set; }
+
+        [JsonProperty("smithereens")]
+        public object Smithereens { get; set; }
+
+        [JsonProperty("superedification")]
+        public object Superedification { get; set; }
+
+        [JsonProperty("trust")]
+        public object Trust { get; set; }
+
+        [JsonProperty("whitestone")]
+        public object Whitestone { get; set; }
+    }
+
+    public partial record Noncontributing
+    {
+        [JsonProperty("estevin", Required = Required.Always)]
+        public string Estevin { get; set; }
+
+        [JsonProperty("jolterhead", Required = Required.Always)]
+        public double Jolterhead { get; set; }
+
+        [JsonProperty("sauternes", Required = Required.Always)]
+        public long Sauternes { get; set; }
+
+        [JsonProperty("sparsely", Required = Required.Always)]
+        public bool Sparsely { get; set; }
+
+        [JsonProperty("unrequested", Required = Required.AllowNull)]
+        public object Unrequested { get; set; }
+    }
+
+    public partial record OccupationalistClass
+    {
+        [JsonProperty("beholdable", Required = Required.AllowNull)]
+        public object Beholdable { get; set; }
+
+        [JsonProperty("brotuliform", Required = Required.AllowNull)]
+        public object Brotuliform { get; set; }
+
+        [JsonProperty("Chimakum", Required = Required.AllowNull)]
+        public object Chimakum { get; set; }
+
+        [JsonProperty("doodler", Required = Required.AllowNull)]
+        public object Doodler { get; set; }
+
+        [JsonProperty("emulsin", Required = Required.AllowNull)]
+        public object Emulsin { get; set; }
+
+        [JsonProperty("Fin", Required = Required.AllowNull)]
+        public object Fin { get; set; }
+
+        [JsonProperty("flourishing", Required = Required.AllowNull)]
+        public object Flourishing { get; set; }
+
+        [JsonProperty("flueless", Required = Required.AllowNull)]
+        public object Flueless { get; set; }
+
+        [JsonProperty("furtively", Required = Required.AllowNull)]
+        public object Furtively { get; set; }
+
+        [JsonProperty("gritter", Required = Required.AllowNull)]
+        public object Gritter { get; set; }
+
+        [JsonProperty("interwish", Required = Required.AllowNull)]
+        public object Interwish { get; set; }
+
+        [JsonProperty("monoxylic", Required = Required.AllowNull)]
+        public object Monoxylic { get; set; }
+
+        [JsonProperty("myristic", Required = Required.AllowNull)]
+        public object Myristic { get; set; }
+
+        [JsonProperty("nightwear", Required = Required.AllowNull)]
+        public object Nightwear { get; set; }
+
+        [JsonProperty("peruser", Required = Required.AllowNull)]
+        public object Peruser { get; set; }
+
+        [JsonProperty("theoastrological", Required = Required.AllowNull)]
+        public object Theoastrological { get; set; }
+
+        [JsonProperty("thumby", Required = Required.AllowNull)]
+        public object Thumby { get; set; }
+
+        [JsonProperty("tingitid", Required = Required.AllowNull)]
+        public object Tingitid { get; set; }
+
+        [JsonProperty("trailless", Required = Required.AllowNull)]
+        public object Trailless { get; set; }
+
+        [JsonProperty("unpocketed", Required = Required.AllowNull)]
+        public object Unpocketed { get; set; }
+    }
+
+    public partial record OutrivalClass
+    {
+        [JsonProperty("adroitly", Required = Required.AllowNull)]
+        public object Adroitly { get; set; }
+
+        [JsonProperty("bridehood", Required = Required.AllowNull)]
+        public object Bridehood { get; set; }
+
+        [JsonProperty("Castoroides", Required = Required.AllowNull)]
+        public object Castoroides { get; set; }
+
+        [JsonProperty("Czechoslovak", Required = Required.AllowNull)]
+        public object Czechoslovak { get; set; }
+
+        [JsonProperty("diagenesis", Required = Required.AllowNull)]
+        public object Diagenesis { get; set; }
+
+        [JsonProperty("dihexahedron", Required = Required.AllowNull)]
+        public object Dihexahedron { get; set; }
+
+        [JsonProperty("dopester", Required = Required.AllowNull)]
+        public object Dopester { get; set; }
+
+        [JsonProperty("eumerism", Required = Required.AllowNull)]
+        public object Eumerism { get; set; }
+
+        [JsonProperty("flyness", Required = Required.AllowNull)]
+        public object Flyness { get; set; }
+
+        [JsonProperty("fouler", Required = Required.AllowNull)]
+        public object Fouler { get; set; }
+
+        [JsonProperty("laudanosine", Required = Required.AllowNull)]
+        public object Laudanosine { get; set; }
+
+        [JsonProperty("Lingulidae", Required = Required.AllowNull)]
+        public object Lingulidae { get; set; }
+
+        [JsonProperty("minutary", Required = Required.AllowNull)]
+        public object Minutary { get; set; }
+
+        [JsonProperty("mitra", Required = Required.AllowNull)]
+        public object Mitra { get; set; }
+
+        [JsonProperty("opisthorchiasis", Required = Required.AllowNull)]
+        public object Opisthorchiasis { get; set; }
+
+        [JsonProperty("pensively", Required = Required.AllowNull)]
+        public object Pensively { get; set; }
+
+        [JsonProperty("pubigerous", Required = Required.AllowNull)]
+        public object Pubigerous { get; set; }
+
+        [JsonProperty("rebellious", Required = Required.AllowNull)]
+        public object Rebellious { get; set; }
+
+        [JsonProperty("recodify", Required = Required.AllowNull)]
+        public object Recodify { get; set; }
+
+        [JsonProperty("unpaced", Required = Required.AllowNull)]
+        public object Unpaced { get; set; }
+    }
+
+    public partial record PiaculumClass
+    {
+        [JsonProperty("alada", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alada { get; set; }
+
+        [JsonProperty("amphistomous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amphistomous { get; set; }
+
+        [JsonProperty("boysenberry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Boysenberry { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("decardinalize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Decardinalize { get; set; }
+
+        [JsonProperty("discouragement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Discouragement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("doitrified", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Doitrified { get; set; }
+
+        [JsonProperty("hexaspermous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hexaspermous { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("insinking", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Insinking { get; set; }
+
+        [JsonProperty("loathfulness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loathfulness { get; set; }
+
+        [JsonProperty("miasmatical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Miasmatical { get; set; }
+
+        [JsonProperty("neurofibril", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Neurofibril { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("phonendoscope", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Phonendoscope { get; set; }
+
+        [JsonProperty("pilferment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Pilferment { get; set; }
+
+        [JsonProperty("predismissory", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Predismissory { get; set; }
+
+        [JsonProperty("preinscription", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preinscription { get; set; }
+
+        [JsonProperty("quotative", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quotative { get; set; }
+
+        [JsonProperty("sienna", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sienna { get; set; }
+
+        [JsonProperty("thorax", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thorax { get; set; }
+
+        [JsonProperty("yachting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yachting { get; set; }
+
+        [JsonProperty("Zipper", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Zipper { get; set; }
+    }
+
+    public partial record Pneumocele
+    {
+        [JsonProperty("Carbonarism")]
+        public object Carbonarism { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cineolic")]
+        public object Cineolic { get; set; }
+
+        [JsonProperty("cobbly")]
+        public object Cobbly { get; set; }
+
+        [JsonProperty("conchyliferous")]
+        public object Conchyliferous { get; set; }
+
+        [JsonProperty("congregation")]
+        public object Congregation { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("enterotomy")]
+        public object Enterotomy { get; set; }
+
+        [JsonProperty("entophytal")]
+        public object Entophytal { get; set; }
+
+        [JsonProperty("fewtrils")]
+        public object Fewtrils { get; set; }
+
+        [JsonProperty("herem")]
+        public object Herem { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Koniga")]
+        public object Koniga { get; set; }
+
+        [JsonProperty("meticulosity")]
+        public object Meticulosity { get; set; }
+
+        [JsonProperty("Micky")]
+        public object Micky { get; set; }
+
+        [JsonProperty("mismarriage")]
+        public object Mismarriage { get; set; }
+
+        [JsonProperty("neurotrophic")]
+        public object Neurotrophic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("persuasively")]
+        public object Persuasively { get; set; }
+
+        [JsonProperty("replaceable")]
+        public object Replaceable { get; set; }
+
+        [JsonProperty("silex")]
+        public object Silex { get; set; }
+
+        [JsonProperty("taillight")]
+        public object Taillight { get; set; }
+
+        [JsonProperty("unjealous")]
+        public object Unjealous { get; set; }
+
+        [JsonProperty("visitorial")]
+        public object Visitorial { get; set; }
+    }
+
+    public partial record PotwhiskyClass
+    {
+        [JsonProperty("arciform", Required = Required.AllowNull)]
+        public object Arciform { get; set; }
+
+        [JsonProperty("cresolin", Required = Required.AllowNull)]
+        public object Cresolin { get; set; }
+
+        [JsonProperty("disheartener", Required = Required.AllowNull)]
+        public object Disheartener { get; set; }
+
+        [JsonProperty("disproportionable", Required = Required.AllowNull)]
+        public object Disproportionable { get; set; }
+
+        [JsonProperty("Euchorda", Required = Required.AllowNull)]
+        public object Euchorda { get; set; }
+
+        [JsonProperty("ferryway", Required = Required.AllowNull)]
+        public object Ferryway { get; set; }
+
+        [JsonProperty("filamentiferous", Required = Required.AllowNull)]
+        public object Filamentiferous { get; set; }
+
+        [JsonProperty("flemish", Required = Required.AllowNull)]
+        public object Flemish { get; set; }
+
+        [JsonProperty("forgainst", Required = Required.AllowNull)]
+        public object Forgainst { get; set; }
+
+        [JsonProperty("grainering", Required = Required.AllowNull)]
+        public object Grainering { get; set; }
+
+        [JsonProperty("irrevoluble", Required = Required.AllowNull)]
+        public object Irrevoluble { get; set; }
+
+        [JsonProperty("kindredship", Required = Required.AllowNull)]
+        public object Kindredship { get; set; }
+
+        [JsonProperty("pinguitudinous", Required = Required.AllowNull)]
+        public object Pinguitudinous { get; set; }
+
+        [JsonProperty("simpletonic", Required = Required.AllowNull)]
+        public object Simpletonic { get; set; }
+
+        [JsonProperty("singsong", Required = Required.AllowNull)]
+        public object Singsong { get; set; }
+
+        [JsonProperty("submergement", Required = Required.AllowNull)]
+        public object Submergement { get; set; }
+
+        [JsonProperty("supraoesophagal", Required = Required.AllowNull)]
+        public object Supraoesophagal { get; set; }
+
+        [JsonProperty("thrashel", Required = Required.AllowNull)]
+        public object Thrashel { get; set; }
+
+        [JsonProperty("tyremesis", Required = Required.AllowNull)]
+        public object Tyremesis { get; set; }
+
+        [JsonProperty("Yoruba", Required = Required.AllowNull)]
+        public object Yoruba { get; set; }
+    }
+
+    public partial record PrefreshmanClass
+    {
+        [JsonProperty("azorubine", Required = Required.AllowNull)]
+        public object Azorubine { get; set; }
+
+        [JsonProperty("choroiditis", Required = Required.AllowNull)]
+        public object Choroiditis { get; set; }
+
+        [JsonProperty("coagulatory", Required = Required.AllowNull)]
+        public object Coagulatory { get; set; }
+
+        [JsonProperty("cyclorama", Required = Required.AllowNull)]
+        public object Cyclorama { get; set; }
+
+        [JsonProperty("Dolphus", Required = Required.AllowNull)]
+        public object Dolphus { get; set; }
+
+        [JsonProperty("duckhearted", Required = Required.AllowNull)]
+        public object Duckhearted { get; set; }
+
+        [JsonProperty("Ficus", Required = Required.AllowNull)]
+        public object Ficus { get; set; }
+
+        [JsonProperty("Gemaric", Required = Required.AllowNull)]
+        public object Gemaric { get; set; }
+
+        [JsonProperty("jugation", Required = Required.AllowNull)]
+        public object Jugation { get; set; }
+
+        [JsonProperty("myoliposis", Required = Required.AllowNull)]
+        public object Myoliposis { get; set; }
+
+        [JsonProperty("nonnomination", Required = Required.AllowNull)]
+        public object Nonnomination { get; set; }
+
+        [JsonProperty("palay", Required = Required.AllowNull)]
+        public object Palay { get; set; }
+
+        [JsonProperty("pentactinal", Required = Required.AllowNull)]
+        public object Pentactinal { get; set; }
+
+        [JsonProperty("Phaet", Required = Required.AllowNull)]
+        public object Phaet { get; set; }
+
+        [JsonProperty("piquant", Required = Required.AllowNull)]
+        public object Piquant { get; set; }
+
+        [JsonProperty("registration", Required = Required.AllowNull)]
+        public object Registration { get; set; }
+
+        [JsonProperty("remancipation", Required = Required.AllowNull)]
+        public object Remancipation { get; set; }
+
+        [JsonProperty("scutatiform", Required = Required.AllowNull)]
+        public object Scutatiform { get; set; }
+
+        [JsonProperty("theodolite", Required = Required.AllowNull)]
+        public object Theodolite { get; set; }
+
+        [JsonProperty("underward", Required = Required.AllowNull)]
+        public object Underward { get; set; }
+    }
+
+    public partial struct JurorElement
+    {
+        public bool? Bool;
+        public JurorClass JurorClass;
+
+        public static implicit operator JurorElement(bool Bool) => new JurorElement { Bool = Bool };
+        public static implicit operator JurorElement(JurorClass JurorClass) => new JurorElement { JurorClass = JurorClass };
+    }
+
+    public partial struct Kongoni
+    {
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Kongoni(long[] IntegerArray) => new Kongoni { IntegerArray = IntegerArray };
+        public static implicit operator Kongoni(Dictionary<string, long> IntegerMap) => new Kongoni { IntegerMap = IntegerMap };
+    }
+
+    public partial struct LadronismElement
+    {
+        public double? Double;
+        public LadronismClass LadronismClass;
+        public string String;
+
+        public static implicit operator LadronismElement(double Double) => new LadronismElement { Double = Double };
+        public static implicit operator LadronismElement(LadronismClass LadronismClass) => new LadronismElement { LadronismClass = LadronismClass };
+        public static implicit operator LadronismElement(string String) => new LadronismElement { String = String };
+    }
+
+    public partial struct LandlubberlyElement
+    {
+        public bool? Bool;
+        public long? Integer;
+        public LandlubberlyClass LandlubberlyClass;
+
+        public static implicit operator LandlubberlyElement(bool Bool) => new LandlubberlyElement { Bool = Bool };
+        public static implicit operator LandlubberlyElement(long Integer) => new LandlubberlyElement { Integer = Integer };
+        public static implicit operator LandlubberlyElement(LandlubberlyClass LandlubberlyClass) => new LandlubberlyElement { LandlubberlyClass = LandlubberlyClass };
+    }
+
+    public partial struct Listener
+    {
+        public long? Integer;
+        public object[] NullArray;
+
+        public static implicit operator Listener(long Integer) => new Listener { Integer = Integer };
+        public static implicit operator Listener(object[] NullArray) => new Listener { NullArray = NullArray };
+    }
+
+    public partial struct LupusElement
+    {
+        public long? Integer;
+        public LupusClass LupusClass;
+
+        public static implicit operator LupusElement(long Integer) => new LupusElement { Integer = Integer };
+        public static implicit operator LupusElement(LupusClass LupusClass) => new LupusElement { LupusClass = LupusClass };
+    }
+
+    public partial struct MonaziteElement
+    {
+        public double? Double;
+        public MonaziteClass MonaziteClass;
+
+        public static implicit operator MonaziteElement(double Double) => new MonaziteElement { Double = Double };
+        public static implicit operator MonaziteElement(MonaziteClass MonaziteClass) => new MonaziteElement { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Monoliteral
+    {
+        public bool? Bool;
+        public object[] NullArray;
+
+        public static implicit operator Monoliteral(bool Bool) => new Monoliteral { Bool = Bool };
+        public static implicit operator Monoliteral(object[] NullArray) => new Monoliteral { NullArray = NullArray };
+    }
+
+    public partial struct MonotheisticallyElement
+    {
+        public MonotheisticallyClass MonotheisticallyClass;
+        public object[] NullArray;
+
+        public static implicit operator MonotheisticallyElement(MonotheisticallyClass MonotheisticallyClass) => new MonotheisticallyElement { MonotheisticallyClass = MonotheisticallyClass };
+        public static implicit operator MonotheisticallyElement(object[] NullArray) => new MonotheisticallyElement { NullArray = NullArray };
+    }
+
+    public partial struct Montage
+    {
+        public double? Double;
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Montage(double Double) => new Montage { Double = Double };
+        public static implicit operator Montage(object[] NullArray) => new Montage { NullArray = NullArray };
+        public static implicit operator Montage(string String) => new Montage { String = String };
+    }
+
+    public partial struct Moralness
+    {
+        public double? Double;
+        public object[] NullArray;
+
+        public static implicit operator Moralness(double Double) => new Moralness { Double = Double };
+        public static implicit operator Moralness(object[] NullArray) => new Moralness { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Double == null;
+    }
+
+    public partial struct Mulishly
+    {
+        public double? Double;
+        public long[] IntegerArray;
+
+        public static implicit operator Mulishly(double Double) => new Mulishly { Double = Double };
+        public static implicit operator Mulishly(long[] IntegerArray) => new Mulishly { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Double == null;
+    }
+
+    public partial struct Myoscope
+    {
+        public bool? Bool;
+        public long? Integer;
+        public object[] NullArray;
+
+        public static implicit operator Myoscope(bool Bool) => new Myoscope { Bool = Bool };
+        public static implicit operator Myoscope(long Integer) => new Myoscope { Integer = Integer };
+        public static implicit operator Myoscope(object[] NullArray) => new Myoscope { NullArray = NullArray };
+    }
+
+    public partial struct Neuromastic
+    {
+        public double? Double;
+        public object[] NullArray;
+
+        public static implicit operator Neuromastic(double Double) => new Neuromastic { Double = Double };
+        public static implicit operator Neuromastic(object[] NullArray) => new Neuromastic { NullArray = NullArray };
+    }
+
+    public partial struct Nonnervous
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Nonnervous(bool Bool) => new Nonnervous { Bool = Bool };
+        public static implicit operator Nonnervous(long Integer) => new Nonnervous { Integer = Integer };
+    }
+
+    public partial struct Nonvaluation
+    {
+        public bool? Bool;
+        public double? Double;
+        public object[] NullArray;
+
+        public static implicit operator Nonvaluation(bool Bool) => new Nonvaluation { Bool = Bool };
+        public static implicit operator Nonvaluation(double Double) => new Nonvaluation { Double = Double };
+        public static implicit operator Nonvaluation(object[] NullArray) => new Nonvaluation { NullArray = NullArray };
+    }
+
+    public partial struct OccupationalistElement
+    {
+        public object[] NullArray;
+        public OccupationalistClass OccupationalistClass;
+
+        public static implicit operator OccupationalistElement(object[] NullArray) => new OccupationalistElement { NullArray = NullArray };
+        public static implicit operator OccupationalistElement(OccupationalistClass OccupationalistClass) => new OccupationalistElement { OccupationalistClass = OccupationalistClass };
+        public bool IsNull => NullArray == null && OccupationalistClass == null;
+    }
+
+    public partial struct OutrivalElement
+    {
+        public double? Double;
+        public OutrivalClass OutrivalClass;
+
+        public static implicit operator OutrivalElement(double Double) => new OutrivalElement { Double = Double };
+        public static implicit operator OutrivalElement(OutrivalClass OutrivalClass) => new OutrivalElement { OutrivalClass = OutrivalClass };
+        public bool IsNull => OutrivalClass == null && Double == null;
+    }
+
+    public partial struct Paleographically
+    {
+        public double? Double;
+        public Dictionary<string, long?> UnionMap;
+
+        public static implicit operator Paleographically(double Double) => new Paleographically { Double = Double };
+        public static implicit operator Paleographically(Dictionary<string, long?> UnionMap) => new Paleographically { UnionMap = UnionMap };
+    }
+
+    public partial struct Pamphletwise
+    {
+        public long? Integer;
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Pamphletwise(long Integer) => new Pamphletwise { Integer = Integer };
+        public static implicit operator Pamphletwise(Dictionary<string, long> IntegerMap) => new Pamphletwise { IntegerMap = IntegerMap };
+        public static implicit operator Pamphletwise(string String) => new Pamphletwise { String = String };
+    }
+
+    public partial struct Pediatric
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Pediatric(bool Bool) => new Pediatric { Bool = Bool };
+        public static implicit operator Pediatric(double Double) => new Pediatric { Double = Double };
+        public bool IsNull => Bool == null && Double == null;
+    }
+
+    public partial struct PiaculumElement
+    {
+        public double? Double;
+        public PiaculumClass PiaculumClass;
+
+        public static implicit operator PiaculumElement(double Double) => new PiaculumElement { Double = Double };
+        public static implicit operator PiaculumElement(PiaculumClass PiaculumClass) => new PiaculumElement { PiaculumClass = PiaculumClass };
+    }
+
+    public partial struct Piccadilly
+    {
+        public double? Double;
+        public string String;
+
+        public static implicit operator Piccadilly(double Double) => new Piccadilly { Double = Double };
+        public static implicit operator Piccadilly(string String) => new Piccadilly { String = String };
+        public bool IsNull => Double == null && String == null;
+    }
+
+    public partial struct Piffler
+    {
+        public MonaziteClass MonaziteClass;
+        public object[] NullArray;
+
+        public static implicit operator Piffler(MonaziteClass MonaziteClass) => new Piffler { MonaziteClass = MonaziteClass };
+        public static implicit operator Piffler(object[] NullArray) => new Piffler { NullArray = NullArray };
+    }
+
+    public partial struct Pithful
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Pithful(bool Bool) => new Pithful { Bool = Bool };
+        public static implicit operator Pithful(long Integer) => new Pithful { Integer = Integer };
+        public bool IsNull => Bool == null && Integer == null;
+    }
+
+    public partial struct Placuntiti
+    {
+        public long? Integer;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Placuntiti(long Integer) => new Placuntiti { Integer = Integer };
+        public static implicit operator Placuntiti(Dictionary<string, long> IntegerMap) => new Placuntiti { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Plectopterous
+    {
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Plectopterous(double Double) => new Plectopterous { Double = Double };
+        public static implicit operator Plectopterous(Dictionary<string, long> IntegerMap) => new Plectopterous { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Poliorcetic
+    {
+        public bool? Bool;
+        public MonaziteClass MonaziteClass;
+
+        public static implicit operator Poliorcetic(bool Bool) => new Poliorcetic { Bool = Bool };
+        public static implicit operator Poliorcetic(MonaziteClass MonaziteClass) => new Poliorcetic { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Poormaster
+    {
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Poormaster(long[] IntegerArray) => new Poormaster { IntegerArray = IntegerArray };
+        public static implicit operator Poormaster(Dictionary<string, long> IntegerMap) => new Poormaster { IntegerMap = IntegerMap };
+        public bool IsNull => IntegerArray == null && IntegerMap == null;
+    }
+
+    public partial struct PotwhiskyElement
+    {
+        public long? Integer;
+        public PotwhiskyClass PotwhiskyClass;
+
+        public static implicit operator PotwhiskyElement(long Integer) => new PotwhiskyElement { Integer = Integer };
+        public static implicit operator PotwhiskyElement(PotwhiskyClass PotwhiskyClass) => new PotwhiskyElement { PotwhiskyClass = PotwhiskyClass };
+        public bool IsNull => PotwhiskyClass == null && Integer == null;
+    }
+
+    public partial struct Practicalizer
+    {
+        public MonaziteClass MonaziteClass;
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Practicalizer(MonaziteClass MonaziteClass) => new Practicalizer { MonaziteClass = MonaziteClass };
+        public static implicit operator Practicalizer(object[] NullArray) => new Practicalizer { NullArray = NullArray };
+        public static implicit operator Practicalizer(string String) => new Practicalizer { String = String };
+    }
+
+    public partial struct PrefreshmanElement
+    {
+        public object[] NullArray;
+        public PrefreshmanClass PrefreshmanClass;
+        public string String;
+
+        public static implicit operator PrefreshmanElement(object[] NullArray) => new PrefreshmanElement { NullArray = NullArray };
+        public static implicit operator PrefreshmanElement(PrefreshmanClass PrefreshmanClass) => new PrefreshmanElement { PrefreshmanClass = PrefreshmanClass };
+        public static implicit operator PrefreshmanElement(string String) => new PrefreshmanElement { String = String };
+    }
+
+    public partial struct Prehensility
+    {
+        public bool? Bool;
+        public MonaziteClass MonaziteClass;
+        public object[] NullArray;
+
+        public static implicit operator Prehensility(bool Bool) => new Prehensility { Bool = Bool };
+        public static implicit operator Prehensility(MonaziteClass MonaziteClass) => new Prehensility { MonaziteClass = MonaziteClass };
+        public static implicit operator Prehensility(object[] NullArray) => new Prehensility { NullArray = NullArray };
+    }
+
+    public partial struct Prevoidance
+    {
+        public long? Integer;
+        public long[] IntegerArray;
+        public MonaziteClass MonaziteClass;
+
+        public static implicit operator Prevoidance(long Integer) => new Prevoidance { Integer = Integer };
+        public static implicit operator Prevoidance(long[] IntegerArray) => new Prevoidance { IntegerArray = IntegerArray };
+        public static implicit operator Prevoidance(MonaziteClass MonaziteClass) => new Prevoidance { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Protext
+    {
+        public bool? Bool;
+        public long[] IntegerArray;
+        public MonaziteClass MonaziteClass;
+
+        public static implicit operator Protext(bool Bool) => new Protext { Bool = Bool };
+        public static implicit operator Protext(long[] IntegerArray) => new Protext { IntegerArray = IntegerArray };
+        public static implicit operator Protext(MonaziteClass MonaziteClass) => new Protext { MonaziteClass = MonaziteClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                JurorElementConverter.Singleton,
+                KongoniConverter.Singleton,
+                LadronismElementConverter.Singleton,
+                LandlubberlyElementConverter.Singleton,
+                ListenerConverter.Singleton,
+                LupusElementConverter.Singleton,
+                MonaziteElementConverter.Singleton,
+                MonoliteralConverter.Singleton,
+                MonotheisticallyElementConverter.Singleton,
+                MontageConverter.Singleton,
+                MoralnessConverter.Singleton,
+                MulishlyConverter.Singleton,
+                MyoscopeConverter.Singleton,
+                NeuromasticConverter.Singleton,
+                NonnervousConverter.Singleton,
+                NonvaluationConverter.Singleton,
+                OccupationalistElementConverter.Singleton,
+                OutrivalElementConverter.Singleton,
+                PaleographicallyConverter.Singleton,
+                PamphletwiseConverter.Singleton,
+                PediatricConverter.Singleton,
+                PiaculumElementConverter.Singleton,
+                PiccadillyConverter.Singleton,
+                PifflerConverter.Singleton,
+                PithfulConverter.Singleton,
+                PlacuntitiConverter.Singleton,
+                PlectopterousConverter.Singleton,
+                PoliorceticConverter.Singleton,
+                PoormasterConverter.Singleton,
+                PotwhiskyElementConverter.Singleton,
+                PracticalizerConverter.Singleton,
+                PrefreshmanElementConverter.Singleton,
+                PrehensilityConverter.Singleton,
+                PrevoidanceConverter.Singleton,
+                ProtextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class JurorElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(JurorElement) || t == typeof(JurorElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new JurorElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<JurorClass>(reader);
+                    return new JurorElement { JurorClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type JurorElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (JurorElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.JurorClass != null)
+            {
+                serializer.Serialize(writer, value.JurorClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type JurorElement");
+        }
+
+        public static readonly JurorElementConverter Singleton = new JurorElementConverter();
+    }
+
+    internal class KongoniConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kongoni) || t == typeof(Kongoni?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Kongoni { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Kongoni { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Kongoni");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Kongoni)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Kongoni");
+        }
+
+        public static readonly KongoniConverter Singleton = new KongoniConverter();
+    }
+
+    internal class LadronismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LadronismElement) || t == typeof(LadronismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new LadronismElement { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LadronismElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LadronismClass>(reader);
+                    return new LadronismElement { LadronismClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LadronismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LadronismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LadronismClass != null)
+            {
+                serializer.Serialize(writer, value.LadronismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LadronismElement");
+        }
+
+        public static readonly LadronismElementConverter Singleton = new LadronismElementConverter();
+    }
+
+    internal class LandlubberlyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LandlubberlyElement) || t == typeof(LandlubberlyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LandlubberlyElement { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new LandlubberlyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LandlubberlyClass>(reader);
+                    return new LandlubberlyElement { LandlubberlyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LandlubberlyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LandlubberlyElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.LandlubberlyClass != null)
+            {
+                serializer.Serialize(writer, value.LandlubberlyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LandlubberlyElement");
+        }
+
+        public static readonly LandlubberlyElementConverter Singleton = new LandlubberlyElementConverter();
+    }
+
+    internal class ListenerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Listener) || t == typeof(Listener?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Listener { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Listener { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Listener");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Listener)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Listener");
+        }
+
+        public static readonly ListenerConverter Singleton = new ListenerConverter();
+    }
+
+    internal class LupusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LupusElement) || t == typeof(LupusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LupusElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LupusClass>(reader);
+                    return new LupusElement { LupusClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LupusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LupusElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.LupusClass != null)
+            {
+                serializer.Serialize(writer, value.LupusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LupusElement");
+        }
+
+        public static readonly LupusElementConverter Singleton = new LupusElementConverter();
+    }
+
+    internal class MonaziteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonaziteElement) || t == typeof(MonaziteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new MonaziteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new MonaziteElement { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type MonaziteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonaziteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonaziteElement");
+        }
+
+        public static readonly MonaziteElementConverter Singleton = new MonaziteElementConverter();
+    }
+
+    internal class MonoliteralConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Monoliteral) || t == typeof(Monoliteral?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Monoliteral { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Monoliteral { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Monoliteral");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Monoliteral)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Monoliteral");
+        }
+
+        public static readonly MonoliteralConverter Singleton = new MonoliteralConverter();
+    }
+
+    internal class MonotheisticallyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonotheisticallyElement) || t == typeof(MonotheisticallyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonotheisticallyClass>(reader);
+                    return new MonotheisticallyElement { MonotheisticallyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new MonotheisticallyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type MonotheisticallyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonotheisticallyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonotheisticallyClass != null)
+            {
+                serializer.Serialize(writer, value.MonotheisticallyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonotheisticallyElement");
+        }
+
+        public static readonly MonotheisticallyElementConverter Singleton = new MonotheisticallyElementConverter();
+    }
+
+    internal class MontageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Montage) || t == typeof(Montage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Montage { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Montage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Montage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Montage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Montage)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Montage");
+        }
+
+        public static readonly MontageConverter Singleton = new MontageConverter();
+    }
+
+    internal class MoralnessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Moralness) || t == typeof(Moralness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Moralness { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Moralness { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Moralness { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Moralness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Moralness)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Moralness");
+        }
+
+        public static readonly MoralnessConverter Singleton = new MoralnessConverter();
+    }
+
+    internal class MulishlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Mulishly) || t == typeof(Mulishly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Mulishly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Mulishly { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Mulishly { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Mulishly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Mulishly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Mulishly");
+        }
+
+        public static readonly MulishlyConverter Singleton = new MulishlyConverter();
+    }
+
+    internal class MyoscopeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Myoscope) || t == typeof(Myoscope?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Myoscope { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Myoscope { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Myoscope { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Myoscope");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Myoscope)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Myoscope");
+        }
+
+        public static readonly MyoscopeConverter Singleton = new MyoscopeConverter();
+    }
+
+    internal class NeuromasticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Neuromastic) || t == typeof(Neuromastic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Neuromastic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Neuromastic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Neuromastic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Neuromastic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Neuromastic");
+        }
+
+        public static readonly NeuromasticConverter Singleton = new NeuromasticConverter();
+    }
+
+    internal class NonnervousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonnervous) || t == typeof(Nonnervous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Nonnervous { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonnervous { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonnervous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonnervous)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonnervous");
+        }
+
+        public static readonly NonnervousConverter Singleton = new NonnervousConverter();
+    }
+
+    internal class NonvaluationConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonvaluation) || t == typeof(Nonvaluation?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Nonvaluation { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonvaluation { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Nonvaluation { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonvaluation");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonvaluation)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonvaluation");
+        }
+
+        public static readonly NonvaluationConverter Singleton = new NonvaluationConverter();
+    }
+
+    internal class OccupationalistElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OccupationalistElement) || t == typeof(OccupationalistElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OccupationalistElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OccupationalistClass>(reader);
+                    return new OccupationalistElement { OccupationalistClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new OccupationalistElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OccupationalistElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OccupationalistElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.OccupationalistClass != null)
+            {
+                serializer.Serialize(writer, value.OccupationalistClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OccupationalistElement");
+        }
+
+        public static readonly OccupationalistElementConverter Singleton = new OccupationalistElementConverter();
+    }
+
+    internal class OutrivalElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OutrivalElement) || t == typeof(OutrivalElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OutrivalElement { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new OutrivalElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OutrivalClass>(reader);
+                    return new OutrivalElement { OutrivalClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type OutrivalElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OutrivalElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OutrivalClass != null)
+            {
+                serializer.Serialize(writer, value.OutrivalClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OutrivalElement");
+        }
+
+        public static readonly OutrivalElementConverter Singleton = new OutrivalElementConverter();
+    }
+
+    internal class PaleographicallyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Paleographically) || t == typeof(Paleographically?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Paleographically { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Paleographically { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Paleographically");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Paleographically)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Paleographically");
+        }
+
+        public static readonly PaleographicallyConverter Singleton = new PaleographicallyConverter();
+    }
+
+    internal class PamphletwiseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pamphletwise) || t == typeof(Pamphletwise?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pamphletwise { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Pamphletwise { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Pamphletwise { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Pamphletwise");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pamphletwise)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pamphletwise");
+        }
+
+        public static readonly PamphletwiseConverter Singleton = new PamphletwiseConverter();
+    }
+
+    internal class PediatricConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pediatric) || t == typeof(Pediatric?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pediatric { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Pediatric { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pediatric { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pediatric");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pediatric)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pediatric");
+        }
+
+        public static readonly PediatricConverter Singleton = new PediatricConverter();
+    }
+
+    internal class PiaculumElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PiaculumElement) || t == typeof(PiaculumElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PiaculumElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PiaculumClass>(reader);
+                    return new PiaculumElement { PiaculumClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PiaculumElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PiaculumElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.PiaculumClass != null)
+            {
+                serializer.Serialize(writer, value.PiaculumClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PiaculumElement");
+        }
+
+        public static readonly PiaculumElementConverter Singleton = new PiaculumElementConverter();
+    }
+
+    internal class PiccadillyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piccadilly) || t == typeof(Piccadilly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Piccadilly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Piccadilly { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Piccadilly { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Piccadilly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piccadilly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piccadilly");
+        }
+
+        public static readonly PiccadillyConverter Singleton = new PiccadillyConverter();
+    }
+
+    internal class PifflerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piffler) || t == typeof(Piffler?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Piffler { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Piffler { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Piffler");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piffler)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piffler");
+        }
+
+        public static readonly PifflerConverter Singleton = new PifflerConverter();
+    }
+
+    internal class PithfulConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pithful) || t == typeof(Pithful?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pithful { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pithful { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pithful { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pithful");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pithful)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pithful");
+        }
+
+        public static readonly PithfulConverter Singleton = new PithfulConverter();
+    }
+
+    internal class PlacuntitiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Placuntiti) || t == typeof(Placuntiti?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Placuntiti { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Placuntiti { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Placuntiti");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Placuntiti)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Placuntiti");
+        }
+
+        public static readonly PlacuntitiConverter Singleton = new PlacuntitiConverter();
+    }
+
+    internal class PlectopterousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Plectopterous) || t == typeof(Plectopterous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Plectopterous { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Plectopterous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Plectopterous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Plectopterous)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Plectopterous");
+        }
+
+        public static readonly PlectopterousConverter Singleton = new PlectopterousConverter();
+    }
+
+    internal class PoliorceticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poliorcetic) || t == typeof(Poliorcetic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Poliorcetic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Poliorcetic { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Poliorcetic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poliorcetic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poliorcetic");
+        }
+
+        public static readonly PoliorceticConverter Singleton = new PoliorceticConverter();
+    }
+
+    internal class PoormasterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poormaster) || t == typeof(Poormaster?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Poormaster { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Poormaster { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Poormaster { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Poormaster");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poormaster)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poormaster");
+        }
+
+        public static readonly PoormasterConverter Singleton = new PoormasterConverter();
+    }
+
+    internal class PotwhiskyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PotwhiskyElement) || t == typeof(PotwhiskyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new PotwhiskyElement { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PotwhiskyElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PotwhiskyClass>(reader);
+                    return new PotwhiskyElement { PotwhiskyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PotwhiskyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PotwhiskyElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PotwhiskyClass != null)
+            {
+                serializer.Serialize(writer, value.PotwhiskyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PotwhiskyElement");
+        }
+
+        public static readonly PotwhiskyElementConverter Singleton = new PotwhiskyElementConverter();
+    }
+
+    internal class PracticalizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Practicalizer) || t == typeof(Practicalizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Practicalizer { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Practicalizer { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Practicalizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Practicalizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Practicalizer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Practicalizer");
+        }
+
+        public static readonly PracticalizerConverter Singleton = new PracticalizerConverter();
+    }
+
+    internal class PrefreshmanElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PrefreshmanElement) || t == typeof(PrefreshmanElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new PrefreshmanElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PrefreshmanClass>(reader);
+                    return new PrefreshmanElement { PrefreshmanClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new PrefreshmanElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PrefreshmanElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PrefreshmanElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.PrefreshmanClass != null)
+            {
+                serializer.Serialize(writer, value.PrefreshmanClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PrefreshmanElement");
+        }
+
+        public static readonly PrefreshmanElementConverter Singleton = new PrefreshmanElementConverter();
+    }
+
+    internal class PrehensilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prehensility) || t == typeof(Prehensility?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Prehensility { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prehensility { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Prehensility { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prehensility");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prehensility)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prehensility");
+        }
+
+        public static readonly PrehensilityConverter Singleton = new PrehensilityConverter();
+    }
+
+    internal class PrevoidanceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prevoidance) || t == typeof(Prevoidance?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Prevoidance { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prevoidance { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Prevoidance { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prevoidance");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prevoidance)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prevoidance");
+        }
+
+        public static readonly PrevoidanceConverter Singleton = new PrevoidanceConverter();
+    }
+
+    internal class ProtextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protext) || t == typeof(Protext?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Protext { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Protext { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Protext { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protext");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protext)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protext");
+        }
+
+        public static readonly ProtextConverter Singleton = new ProtextConverter();
+    }
+}
diff --git a/head/csharp-records/test/inputs/json/priority/combinations3.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations3.json/default/QuickType.cs
new file mode 100644
index 0000000..f1a54c6
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations3.json/default/QuickType.cs
@@ -0,0 +1,2957 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("juror", Required = Required.Always)]
+        public JurorElement[] Juror { get; set; }
+
+        [JsonProperty("kongoni", Required = Required.Always)]
+        public Kongoni[] Kongoni { get; set; }
+
+        [JsonProperty("ladronism", Required = Required.Always)]
+        public LadronismElement[] Ladronism { get; set; }
+
+        [JsonProperty("landlubberly", Required = Required.Always)]
+        public LandlubberlyElement[] Landlubberly { get; set; }
+
+        [JsonProperty("listener", Required = Required.Always)]
+        public Listener[] Listener { get; set; }
+
+        [JsonProperty("lupus", Required = Required.Always)]
+        public LupusElement[] Lupus { get; set; }
+
+        [JsonProperty("maslin", Required = Required.Always)]
+        public Maslin[] Maslin { get; set; }
+
+        [JsonProperty("monazite", Required = Required.Always)]
+        public MonaziteElement[] Monazite { get; set; }
+
+        [JsonProperty("monoliteral", Required = Required.Always)]
+        public Monoliteral[] Monoliteral { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.Always)]
+        public MonotheisticallyElement[] Monotheistically { get; set; }
+
+        [JsonProperty("montage", Required = Required.Always)]
+        public Montage[] Montage { get; set; }
+
+        [JsonProperty("moralness", Required = Required.Always)]
+        public Moralness[] Moralness { get; set; }
+
+        [JsonProperty("mowra", Required = Required.Always)]
+        public MonaziteClass?[] Mowra { get; set; }
+
+        [JsonProperty("mulishly", Required = Required.Always)]
+        public Mulishly[] Mulishly { get; set; }
+
+        [JsonProperty("myoscope", Required = Required.Always)]
+        public Myoscope[] Myoscope { get; set; }
+
+        [JsonProperty("nach", Required = Required.Always)]
+        public long?[]?[] Nach { get; set; }
+
+        [JsonProperty("neuromastic", Required = Required.Always)]
+        public Neuromastic[] Neuromastic { get; set; }
+
+        [JsonProperty("noncontributing", Required = Required.Always)]
+        public Noncontributing[] Noncontributing { get; set; }
+
+        [JsonProperty("nonnervous", Required = Required.Always)]
+        public Nonnervous[] Nonnervous { get; set; }
+
+        [JsonProperty("nonvaluation", Required = Required.Always)]
+        public Nonvaluation[] Nonvaluation { get; set; }
+
+        [JsonProperty("occupationalist", Required = Required.Always)]
+        public OccupationalistElement[] Occupationalist { get; set; }
+
+        [JsonProperty("outrival", Required = Required.Always)]
+        public OutrivalElement[] Outrival { get; set; }
+
+        [JsonProperty("paleographically", Required = Required.Always)]
+        public Paleographically[] Paleographically { get; set; }
+
+        [JsonProperty("pamphletwise", Required = Required.Always)]
+        public Pamphletwise[] Pamphletwise { get; set; }
+
+        [JsonProperty("pediatrics", Required = Required.Always)]
+        public Pediatric[] Pediatrics { get; set; }
+
+        [JsonProperty("perceptive", Required = Required.Always)]
+        public bool[] Perceptive { get; set; }
+
+        [JsonProperty("piaculum", Required = Required.Always)]
+        public PiaculumElement[] Piaculum { get; set; }
+
+        [JsonProperty("piccadilly", Required = Required.Always)]
+        public Piccadilly[] Piccadilly { get; set; }
+
+        [JsonProperty("piffler", Required = Required.Always)]
+        public Piffler[] Piffler { get; set; }
+
+        [JsonProperty("pithful", Required = Required.Always)]
+        public Pithful[] Pithful { get; set; }
+
+        [JsonProperty("placuntitis", Required = Required.Always)]
+        public Placuntiti[] Placuntitis { get; set; }
+
+        [JsonProperty("plectopterous", Required = Required.Always)]
+        public Plectopterous[] Plectopterous { get; set; }
+
+        [JsonProperty("pneumocele", Required = Required.Always)]
+        public Pneumocele?[] Pneumocele { get; set; }
+
+        [JsonProperty("poliorcetic", Required = Required.Always)]
+        public Poliorcetic[] Poliorcetic { get; set; }
+
+        [JsonProperty("poormaster", Required = Required.Always)]
+        public Poormaster[] Poormaster { get; set; }
+
+        [JsonProperty("potwhisky", Required = Required.Always)]
+        public PotwhiskyElement[] Potwhisky { get; set; }
+
+        [JsonProperty("practicalizer", Required = Required.Always)]
+        public Practicalizer[] Practicalizer { get; set; }
+
+        [JsonProperty("prefreshman", Required = Required.Always)]
+        public PrefreshmanElement[] Prefreshman { get; set; }
+
+        [JsonProperty("prehensility", Required = Required.Always)]
+        public Prehensility[] Prehensility { get; set; }
+
+        [JsonProperty("prevoidance", Required = Required.Always)]
+        public Prevoidance[] Prevoidance { get; set; }
+
+        [JsonProperty("probant", Required = Required.Always)]
+        public Dictionary<string, long?>[] Probant { get; set; }
+
+        [JsonProperty("protext", Required = Required.Always)]
+        public Protext[] Protext { get; set; }
+    }
+
+    public partial record JurorClass
+    {
+        [JsonProperty("adipsy", Required = Required.AllowNull)]
+        public object Adipsy { get; set; }
+
+        [JsonProperty("auxiliator", Required = Required.AllowNull)]
+        public object Auxiliator { get; set; }
+
+        [JsonProperty("benda", Required = Required.AllowNull)]
+        public object Benda { get; set; }
+
+        [JsonProperty("benjamin", Required = Required.AllowNull)]
+        public object Benjamin { get; set; }
+
+        [JsonProperty("brandling", Required = Required.AllowNull)]
+        public object Brandling { get; set; }
+
+        [JsonProperty("epicurishly", Required = Required.AllowNull)]
+        public object Epicurishly { get; set; }
+
+        [JsonProperty("eremochaetous", Required = Required.AllowNull)]
+        public object Eremochaetous { get; set; }
+
+        [JsonProperty("marten", Required = Required.AllowNull)]
+        public object Marten { get; set; }
+
+        [JsonProperty("monocline", Required = Required.AllowNull)]
+        public object Monocline { get; set; }
+
+        [JsonProperty("Olea", Required = Required.AllowNull)]
+        public object Olea { get; set; }
+
+        [JsonProperty("palgat", Required = Required.AllowNull)]
+        public object Palgat { get; set; }
+
+        [JsonProperty("pennyworth", Required = Required.AllowNull)]
+        public object Pennyworth { get; set; }
+
+        [JsonProperty("pioury", Required = Required.AllowNull)]
+        public object Pioury { get; set; }
+
+        [JsonProperty("pragmatistic", Required = Required.AllowNull)]
+        public object Pragmatistic { get; set; }
+
+        [JsonProperty("stylelessness", Required = Required.AllowNull)]
+        public object Stylelessness { get; set; }
+
+        [JsonProperty("systematical", Required = Required.AllowNull)]
+        public object Systematical { get; set; }
+
+        [JsonProperty("thready", Required = Required.AllowNull)]
+        public object Thready { get; set; }
+
+        [JsonProperty("uncontemporary", Required = Required.AllowNull)]
+        public object Uncontemporary { get; set; }
+
+        [JsonProperty("uncouched", Required = Required.AllowNull)]
+        public object Uncouched { get; set; }
+
+        [JsonProperty("uninhabitedness", Required = Required.AllowNull)]
+        public object Uninhabitedness { get; set; }
+    }
+
+    public partial record LadronismClass
+    {
+        [JsonProperty("acclaimer", Required = Required.AllowNull)]
+        public object Acclaimer { get; set; }
+
+        [JsonProperty("achree", Required = Required.AllowNull)]
+        public object Achree { get; set; }
+
+        [JsonProperty("base", Required = Required.AllowNull)]
+        public object Base { get; set; }
+
+        [JsonProperty("conundrumize", Required = Required.AllowNull)]
+        public object Conundrumize { get; set; }
+
+        [JsonProperty("degerminator", Required = Required.AllowNull)]
+        public object Degerminator { get; set; }
+
+        [JsonProperty("describable", Required = Required.AllowNull)]
+        public object Describable { get; set; }
+
+        [JsonProperty("exasperatedly", Required = Required.AllowNull)]
+        public object Exasperatedly { get; set; }
+
+        [JsonProperty("heroine", Required = Required.AllowNull)]
+        public object Heroine { get; set; }
+
+        [JsonProperty("indazin", Required = Required.AllowNull)]
+        public object Indazin { get; set; }
+
+        [JsonProperty("luteous", Required = Required.AllowNull)]
+        public object Luteous { get; set; }
+
+        [JsonProperty("papular", Required = Required.AllowNull)]
+        public object Papular { get; set; }
+
+        [JsonProperty("pritch", Required = Required.AllowNull)]
+        public object Pritch { get; set; }
+
+        [JsonProperty("Prodenia", Required = Required.AllowNull)]
+        public object Prodenia { get; set; }
+
+        [JsonProperty("seege", Required = Required.AllowNull)]
+        public object Seege { get; set; }
+
+        [JsonProperty("shopgirl", Required = Required.AllowNull)]
+        public object Shopgirl { get; set; }
+
+        [JsonProperty("tragedietta", Required = Required.AllowNull)]
+        public object Tragedietta { get; set; }
+
+        [JsonProperty("unsparse", Required = Required.AllowNull)]
+        public object Unsparse { get; set; }
+
+        [JsonProperty("uplook", Required = Required.AllowNull)]
+        public object Uplook { get; set; }
+
+        [JsonProperty("vermiformis", Required = Required.AllowNull)]
+        public object Vermiformis { get; set; }
+
+        [JsonProperty("whafabout", Required = Required.AllowNull)]
+        public object Whafabout { get; set; }
+    }
+
+    public partial record LandlubberlyClass
+    {
+        [JsonProperty("acropoleis", Required = Required.AllowNull)]
+        public object Acropoleis { get; set; }
+
+        [JsonProperty("aminate", Required = Required.AllowNull)]
+        public object Aminate { get; set; }
+
+        [JsonProperty("Amyraldism", Required = Required.AllowNull)]
+        public object Amyraldism { get; set; }
+
+        [JsonProperty("bipenniform", Required = Required.AllowNull)]
+        public object Bipenniform { get; set; }
+
+        [JsonProperty("bugre", Required = Required.AllowNull)]
+        public object Bugre { get; set; }
+
+        [JsonProperty("calycule", Required = Required.AllowNull)]
+        public object Calycule { get; set; }
+
+        [JsonProperty("caoutchouc", Required = Required.AllowNull)]
+        public object Caoutchouc { get; set; }
+
+        [JsonProperty("disprover", Required = Required.AllowNull)]
+        public object Disprover { get; set; }
+
+        [JsonProperty("fitroot", Required = Required.AllowNull)]
+        public object Fitroot { get; set; }
+
+        [JsonProperty("fulgently", Required = Required.AllowNull)]
+        public object Fulgently { get; set; }
+
+        [JsonProperty("kickup", Required = Required.AllowNull)]
+        public object Kickup { get; set; }
+
+        [JsonProperty("laevoversion", Required = Required.AllowNull)]
+        public object Laevoversion { get; set; }
+
+        [JsonProperty("moter", Required = Required.AllowNull)]
+        public object Moter { get; set; }
+
+        [JsonProperty("objectivity", Required = Required.AllowNull)]
+        public object Objectivity { get; set; }
+
+        [JsonProperty("posterity", Required = Required.AllowNull)]
+        public object Posterity { get; set; }
+
+        [JsonProperty("postnuptial", Required = Required.AllowNull)]
+        public object Postnuptial { get; set; }
+
+        [JsonProperty("precedentary", Required = Required.AllowNull)]
+        public object Precedentary { get; set; }
+
+        [JsonProperty("saddling", Required = Required.AllowNull)]
+        public object Saddling { get; set; }
+
+        [JsonProperty("subcurrent", Required = Required.AllowNull)]
+        public object Subcurrent { get; set; }
+
+        [JsonProperty("unrecriminative", Required = Required.AllowNull)]
+        public object Unrecriminative { get; set; }
+    }
+
+    public partial record LupusClass
+    {
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("Chlorioninae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorioninae { get; set; }
+
+        [JsonProperty("Corvinae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Corvinae { get; set; }
+
+        [JsonProperty("Crassina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crassina { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("exiguity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Exiguity { get; set; }
+
+        [JsonProperty("farcist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Farcist { get; set; }
+
+        [JsonProperty("holographical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Holographical { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("ichthyophagan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ichthyophagan { get; set; }
+
+        [JsonProperty("implacable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Implacable { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("outshiner", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Outshiner { get; set; }
+
+        [JsonProperty("overweather", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overweather { get; set; }
+
+        [JsonProperty("protonegroid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Protonegroid { get; set; }
+
+        [JsonProperty("shallowish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shallowish { get; set; }
+
+        [JsonProperty("snoke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snoke { get; set; }
+
+        [JsonProperty("snout", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snout { get; set; }
+
+        [JsonProperty("surveillance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Surveillance { get; set; }
+
+        [JsonProperty("threshingtime", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Threshingtime { get; set; }
+
+        [JsonProperty("Thysanocarpus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thysanocarpus { get; set; }
+
+        [JsonProperty("unsignificantly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsignificantly { get; set; }
+
+        [JsonProperty("unsnap", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsnap { get; set; }
+
+        [JsonProperty("vendible", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Vendible { get; set; }
+    }
+
+    public partial record Maslin
+    {
+        [JsonProperty("Alicant", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alicant { get; set; }
+
+        [JsonProperty("antiatonement")]
+        public object? Antiatonement { get; set; }
+
+        [JsonProperty("anticorrosive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Anticorrosive { get; set; }
+
+        [JsonProperty("aphidozer")]
+        public object? Aphidozer { get; set; }
+
+        [JsonProperty("Bakuninist")]
+        public object? Bakuninist { get; set; }
+
+        [JsonProperty("be", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Be { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chub", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chub { get; set; }
+
+        [JsonProperty("cuprosilicon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cuprosilicon { get; set; }
+
+        [JsonProperty("curtailedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Curtailedly { get; set; }
+
+        [JsonProperty("dellenite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dellenite { get; set; }
+
+        [JsonProperty("Dimitry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dimitry { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("edifying")]
+        public object? Edifying { get; set; }
+
+        [JsonProperty("ethmoiditis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ethmoiditis { get; set; }
+
+        [JsonProperty("gastralgy")]
+        public object? Gastralgy { get; set; }
+
+        [JsonProperty("goatherd", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goatherd { get; set; }
+
+        [JsonProperty("hammerdress", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hammerdress { get; set; }
+
+        [JsonProperty("hangfire")]
+        public object? Hangfire { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lacunosity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lacunosity { get; set; }
+
+        [JsonProperty("longiloquence")]
+        public object? Longiloquence { get; set; }
+
+        [JsonProperty("mameliere", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mameliere { get; set; }
+
+        [JsonProperty("motherless")]
+        public object? Motherless { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("noncorrodible")]
+        public object? Noncorrodible { get; set; }
+
+        [JsonProperty("nonsensicality")]
+        public object? Nonsensicality { get; set; }
+
+        [JsonProperty("oafishly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Oafishly { get; set; }
+
+        [JsonProperty("pfund")]
+        public object? Pfund { get; set; }
+
+        [JsonProperty("preadvisory")]
+        public object? Preadvisory { get; set; }
+
+        [JsonProperty("retroflexed")]
+        public object? Retroflexed { get; set; }
+
+        [JsonProperty("saccharulmic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Saccharulmic { get; set; }
+
+        [JsonProperty("scowlful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scowlful { get; set; }
+
+        [JsonProperty("secluded")]
+        public object? Secluded { get; set; }
+
+        [JsonProperty("slackage")]
+        public object? Slackage { get; set; }
+
+        [JsonProperty("sphaeridial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sphaeridial { get; set; }
+
+        [JsonProperty("spondulics")]
+        public object? Spondulics { get; set; }
+
+        [JsonProperty("subsecive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subsecive { get; set; }
+
+        [JsonProperty("swellmobsman")]
+        public object? Swellmobsman { get; set; }
+
+        [JsonProperty("trachyglossate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trachyglossate { get; set; }
+
+        [JsonProperty("trialogue")]
+        public object? Trialogue { get; set; }
+
+        [JsonProperty("unassuaged", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unassuaged { get; set; }
+
+        [JsonProperty("ungross")]
+        public object? Ungross { get; set; }
+
+        [JsonProperty("unjudiciously")]
+        public object? Unjudiciously { get; set; }
+    }
+
+    public partial record MonaziteClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record MonotheisticallyClass
+    {
+        [JsonProperty("blaspheme")]
+        public object? Blaspheme { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("celiosalpingectomy")]
+        public object? Celiosalpingectomy { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("consummativeness")]
+        public object? Consummativeness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("egestive")]
+        public object? Egestive { get; set; }
+
+        [JsonProperty("enchylema")]
+        public object? Enchylema { get; set; }
+
+        [JsonProperty("gasconade")]
+        public object? Gasconade { get; set; }
+
+        [JsonProperty("holidayer")]
+        public object? Holidayer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("intuitionalism")]
+        public object? Intuitionalism { get; set; }
+
+        [JsonProperty("lophiostomate")]
+        public object? Lophiostomate { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("nonvolition")]
+        public object? Nonvolition { get; set; }
+
+        [JsonProperty("palatableness")]
+        public object? Palatableness { get; set; }
+
+        [JsonProperty("pimpery")]
+        public object? Pimpery { get; set; }
+
+        [JsonProperty("previolation")]
+        public object? Previolation { get; set; }
+
+        [JsonProperty("reconveyance")]
+        public object? Reconveyance { get; set; }
+
+        [JsonProperty("registership")]
+        public object? Registership { get; set; }
+
+        [JsonProperty("rhyacolite")]
+        public object? Rhyacolite { get; set; }
+
+        [JsonProperty("smithereens")]
+        public object? Smithereens { get; set; }
+
+        [JsonProperty("superedification")]
+        public object? Superedification { get; set; }
+
+        [JsonProperty("trust")]
+        public object? Trust { get; set; }
+
+        [JsonProperty("whitestone")]
+        public object? Whitestone { get; set; }
+    }
+
+    public partial record Noncontributing
+    {
+        [JsonProperty("estevin", Required = Required.Always)]
+        public string Estevin { get; set; }
+
+        [JsonProperty("jolterhead", Required = Required.Always)]
+        public double Jolterhead { get; set; }
+
+        [JsonProperty("sauternes", Required = Required.Always)]
+        public long Sauternes { get; set; }
+
+        [JsonProperty("sparsely", Required = Required.Always)]
+        public bool Sparsely { get; set; }
+
+        [JsonProperty("unrequested", Required = Required.AllowNull)]
+        public object Unrequested { get; set; }
+    }
+
+    public partial record OccupationalistClass
+    {
+        [JsonProperty("beholdable", Required = Required.AllowNull)]
+        public object Beholdable { get; set; }
+
+        [JsonProperty("brotuliform", Required = Required.AllowNull)]
+        public object Brotuliform { get; set; }
+
+        [JsonProperty("Chimakum", Required = Required.AllowNull)]
+        public object Chimakum { get; set; }
+
+        [JsonProperty("doodler", Required = Required.AllowNull)]
+        public object Doodler { get; set; }
+
+        [JsonProperty("emulsin", Required = Required.AllowNull)]
+        public object Emulsin { get; set; }
+
+        [JsonProperty("Fin", Required = Required.AllowNull)]
+        public object Fin { get; set; }
+
+        [JsonProperty("flourishing", Required = Required.AllowNull)]
+        public object Flourishing { get; set; }
+
+        [JsonProperty("flueless", Required = Required.AllowNull)]
+        public object Flueless { get; set; }
+
+        [JsonProperty("furtively", Required = Required.AllowNull)]
+        public object Furtively { get; set; }
+
+        [JsonProperty("gritter", Required = Required.AllowNull)]
+        public object Gritter { get; set; }
+
+        [JsonProperty("interwish", Required = Required.AllowNull)]
+        public object Interwish { get; set; }
+
+        [JsonProperty("monoxylic", Required = Required.AllowNull)]
+        public object Monoxylic { get; set; }
+
+        [JsonProperty("myristic", Required = Required.AllowNull)]
+        public object Myristic { get; set; }
+
+        [JsonProperty("nightwear", Required = Required.AllowNull)]
+        public object Nightwear { get; set; }
+
+        [JsonProperty("peruser", Required = Required.AllowNull)]
+        public object Peruser { get; set; }
+
+        [JsonProperty("theoastrological", Required = Required.AllowNull)]
+        public object Theoastrological { get; set; }
+
+        [JsonProperty("thumby", Required = Required.AllowNull)]
+        public object Thumby { get; set; }
+
+        [JsonProperty("tingitid", Required = Required.AllowNull)]
+        public object Tingitid { get; set; }
+
+        [JsonProperty("trailless", Required = Required.AllowNull)]
+        public object Trailless { get; set; }
+
+        [JsonProperty("unpocketed", Required = Required.AllowNull)]
+        public object Unpocketed { get; set; }
+    }
+
+    public partial record OutrivalClass
+    {
+        [JsonProperty("adroitly", Required = Required.AllowNull)]
+        public object Adroitly { get; set; }
+
+        [JsonProperty("bridehood", Required = Required.AllowNull)]
+        public object Bridehood { get; set; }
+
+        [JsonProperty("Castoroides", Required = Required.AllowNull)]
+        public object Castoroides { get; set; }
+
+        [JsonProperty("Czechoslovak", Required = Required.AllowNull)]
+        public object Czechoslovak { get; set; }
+
+        [JsonProperty("diagenesis", Required = Required.AllowNull)]
+        public object Diagenesis { get; set; }
+
+        [JsonProperty("dihexahedron", Required = Required.AllowNull)]
+        public object Dihexahedron { get; set; }
+
+        [JsonProperty("dopester", Required = Required.AllowNull)]
+        public object Dopester { get; set; }
+
+        [JsonProperty("eumerism", Required = Required.AllowNull)]
+        public object Eumerism { get; set; }
+
+        [JsonProperty("flyness", Required = Required.AllowNull)]
+        public object Flyness { get; set; }
+
+        [JsonProperty("fouler", Required = Required.AllowNull)]
+        public object Fouler { get; set; }
+
+        [JsonProperty("laudanosine", Required = Required.AllowNull)]
+        public object Laudanosine { get; set; }
+
+        [JsonProperty("Lingulidae", Required = Required.AllowNull)]
+        public object Lingulidae { get; set; }
+
+        [JsonProperty("minutary", Required = Required.AllowNull)]
+        public object Minutary { get; set; }
+
+        [JsonProperty("mitra", Required = Required.AllowNull)]
+        public object Mitra { get; set; }
+
+        [JsonProperty("opisthorchiasis", Required = Required.AllowNull)]
+        public object Opisthorchiasis { get; set; }
+
+        [JsonProperty("pensively", Required = Required.AllowNull)]
+        public object Pensively { get; set; }
+
+        [JsonProperty("pubigerous", Required = Required.AllowNull)]
+        public object Pubigerous { get; set; }
+
+        [JsonProperty("rebellious", Required = Required.AllowNull)]
+        public object Rebellious { get; set; }
+
+        [JsonProperty("recodify", Required = Required.AllowNull)]
+        public object Recodify { get; set; }
+
+        [JsonProperty("unpaced", Required = Required.AllowNull)]
+        public object Unpaced { get; set; }
+    }
+
+    public partial record PiaculumClass
+    {
+        [JsonProperty("alada", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alada { get; set; }
+
+        [JsonProperty("amphistomous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amphistomous { get; set; }
+
+        [JsonProperty("boysenberry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Boysenberry { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("decardinalize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Decardinalize { get; set; }
+
+        [JsonProperty("discouragement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Discouragement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("doitrified", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Doitrified { get; set; }
+
+        [JsonProperty("hexaspermous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hexaspermous { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("insinking", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Insinking { get; set; }
+
+        [JsonProperty("loathfulness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loathfulness { get; set; }
+
+        [JsonProperty("miasmatical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Miasmatical { get; set; }
+
+        [JsonProperty("neurofibril", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Neurofibril { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("phonendoscope", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Phonendoscope { get; set; }
+
+        [JsonProperty("pilferment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Pilferment { get; set; }
+
+        [JsonProperty("predismissory", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Predismissory { get; set; }
+
+        [JsonProperty("preinscription", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preinscription { get; set; }
+
+        [JsonProperty("quotative", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quotative { get; set; }
+
+        [JsonProperty("sienna", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sienna { get; set; }
+
+        [JsonProperty("thorax", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thorax { get; set; }
+
+        [JsonProperty("yachting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yachting { get; set; }
+
+        [JsonProperty("Zipper", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Zipper { get; set; }
+    }
+
+    public partial record Pneumocele
+    {
+        [JsonProperty("Carbonarism")]
+        public object? Carbonarism { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cineolic")]
+        public object? Cineolic { get; set; }
+
+        [JsonProperty("cobbly")]
+        public object? Cobbly { get; set; }
+
+        [JsonProperty("conchyliferous")]
+        public object? Conchyliferous { get; set; }
+
+        [JsonProperty("congregation")]
+        public object? Congregation { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enterotomy")]
+        public object? Enterotomy { get; set; }
+
+        [JsonProperty("entophytal")]
+        public object? Entophytal { get; set; }
+
+        [JsonProperty("fewtrils")]
+        public object? Fewtrils { get; set; }
+
+        [JsonProperty("herem")]
+        public object? Herem { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Koniga")]
+        public object? Koniga { get; set; }
+
+        [JsonProperty("meticulosity")]
+        public object? Meticulosity { get; set; }
+
+        [JsonProperty("Micky")]
+        public object? Micky { get; set; }
+
+        [JsonProperty("mismarriage")]
+        public object? Mismarriage { get; set; }
+
+        [JsonProperty("neurotrophic")]
+        public object? Neurotrophic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("persuasively")]
+        public object? Persuasively { get; set; }
+
+        [JsonProperty("replaceable")]
+        public object? Replaceable { get; set; }
+
+        [JsonProperty("silex")]
+        public object? Silex { get; set; }
+
+        [JsonProperty("taillight")]
+        public object? Taillight { get; set; }
+
+        [JsonProperty("unjealous")]
+        public object? Unjealous { get; set; }
+
+        [JsonProperty("visitorial")]
+        public object? Visitorial { get; set; }
+    }
+
+    public partial record PotwhiskyClass
+    {
+        [JsonProperty("arciform", Required = Required.AllowNull)]
+        public object Arciform { get; set; }
+
+        [JsonProperty("cresolin", Required = Required.AllowNull)]
+        public object Cresolin { get; set; }
+
+        [JsonProperty("disheartener", Required = Required.AllowNull)]
+        public object Disheartener { get; set; }
+
+        [JsonProperty("disproportionable", Required = Required.AllowNull)]
+        public object Disproportionable { get; set; }
+
+        [JsonProperty("Euchorda", Required = Required.AllowNull)]
+        public object Euchorda { get; set; }
+
+        [JsonProperty("ferryway", Required = Required.AllowNull)]
+        public object Ferryway { get; set; }
+
+        [JsonProperty("filamentiferous", Required = Required.AllowNull)]
+        public object Filamentiferous { get; set; }
+
+        [JsonProperty("flemish", Required = Required.AllowNull)]
+        public object Flemish { get; set; }
+
+        [JsonProperty("forgainst", Required = Required.AllowNull)]
+        public object Forgainst { get; set; }
+
+        [JsonProperty("grainering", Required = Required.AllowNull)]
+        public object Grainering { get; set; }
+
+        [JsonProperty("irrevoluble", Required = Required.AllowNull)]
+        public object Irrevoluble { get; set; }
+
+        [JsonProperty("kindredship", Required = Required.AllowNull)]
+        public object Kindredship { get; set; }
+
+        [JsonProperty("pinguitudinous", Required = Required.AllowNull)]
+        public object Pinguitudinous { get; set; }
+
+        [JsonProperty("simpletonic", Required = Required.AllowNull)]
+        public object Simpletonic { get; set; }
+
+        [JsonProperty("singsong", Required = Required.AllowNull)]
+        public object Singsong { get; set; }
+
+        [JsonProperty("submergement", Required = Required.AllowNull)]
+        public object Submergement { get; set; }
+
+        [JsonProperty("supraoesophagal", Required = Required.AllowNull)]
+        public object Supraoesophagal { get; set; }
+
+        [JsonProperty("thrashel", Required = Required.AllowNull)]
+        public object Thrashel { get; set; }
+
+        [JsonProperty("tyremesis", Required = Required.AllowNull)]
+        public object Tyremesis { get; set; }
+
+        [JsonProperty("Yoruba", Required = Required.AllowNull)]
+        public object Yoruba { get; set; }
+    }
+
+    public partial record PrefreshmanClass
+    {
+        [JsonProperty("azorubine", Required = Required.AllowNull)]
+        public object Azorubine { get; set; }
+
+        [JsonProperty("choroiditis", Required = Required.AllowNull)]
+        public object Choroiditis { get; set; }
+
+        [JsonProperty("coagulatory", Required = Required.AllowNull)]
+        public object Coagulatory { get; set; }
+
+        [JsonProperty("cyclorama", Required = Required.AllowNull)]
+        public object Cyclorama { get; set; }
+
+        [JsonProperty("Dolphus", Required = Required.AllowNull)]
+        public object Dolphus { get; set; }
+
+        [JsonProperty("duckhearted", Required = Required.AllowNull)]
+        public object Duckhearted { get; set; }
+
+        [JsonProperty("Ficus", Required = Required.AllowNull)]
+        public object Ficus { get; set; }
+
+        [JsonProperty("Gemaric", Required = Required.AllowNull)]
+        public object Gemaric { get; set; }
+
+        [JsonProperty("jugation", Required = Required.AllowNull)]
+        public object Jugation { get; set; }
+
+        [JsonProperty("myoliposis", Required = Required.AllowNull)]
+        public object Myoliposis { get; set; }
+
+        [JsonProperty("nonnomination", Required = Required.AllowNull)]
+        public object Nonnomination { get; set; }
+
+        [JsonProperty("palay", Required = Required.AllowNull)]
+        public object Palay { get; set; }
+
+        [JsonProperty("pentactinal", Required = Required.AllowNull)]
+        public object Pentactinal { get; set; }
+
+        [JsonProperty("Phaet", Required = Required.AllowNull)]
+        public object Phaet { get; set; }
+
+        [JsonProperty("piquant", Required = Required.AllowNull)]
+        public object Piquant { get; set; }
+
+        [JsonProperty("registration", Required = Required.AllowNull)]
+        public object Registration { get; set; }
+
+        [JsonProperty("remancipation", Required = Required.AllowNull)]
+        public object Remancipation { get; set; }
+
+        [JsonProperty("scutatiform", Required = Required.AllowNull)]
+        public object Scutatiform { get; set; }
+
+        [JsonProperty("theodolite", Required = Required.AllowNull)]
+        public object Theodolite { get; set; }
+
+        [JsonProperty("underward", Required = Required.AllowNull)]
+        public object Underward { get; set; }
+    }
+
+    public partial struct JurorElement
+    {
+        public bool? Bool;
+        public JurorClass? JurorClass;
+
+        public static implicit operator JurorElement(bool Bool) => new JurorElement { Bool = Bool };
+        public static implicit operator JurorElement(JurorClass JurorClass) => new JurorElement { JurorClass = JurorClass };
+    }
+
+    public partial struct Kongoni
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Kongoni(long[] IntegerArray) => new Kongoni { IntegerArray = IntegerArray };
+        public static implicit operator Kongoni(Dictionary<string, long> IntegerMap) => new Kongoni { IntegerMap = IntegerMap };
+    }
+
+    public partial struct LadronismElement
+    {
+        public double? Double;
+        public LadronismClass? LadronismClass;
+        public string? String;
+
+        public static implicit operator LadronismElement(double Double) => new LadronismElement { Double = Double };
+        public static implicit operator LadronismElement(LadronismClass LadronismClass) => new LadronismElement { LadronismClass = LadronismClass };
+        public static implicit operator LadronismElement(string String) => new LadronismElement { String = String };
+    }
+
+    public partial struct LandlubberlyElement
+    {
+        public bool? Bool;
+        public long? Integer;
+        public LandlubberlyClass? LandlubberlyClass;
+
+        public static implicit operator LandlubberlyElement(bool Bool) => new LandlubberlyElement { Bool = Bool };
+        public static implicit operator LandlubberlyElement(long Integer) => new LandlubberlyElement { Integer = Integer };
+        public static implicit operator LandlubberlyElement(LandlubberlyClass LandlubberlyClass) => new LandlubberlyElement { LandlubberlyClass = LandlubberlyClass };
+    }
+
+    public partial struct Listener
+    {
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Listener(long Integer) => new Listener { Integer = Integer };
+        public static implicit operator Listener(object[] NullArray) => new Listener { NullArray = NullArray };
+    }
+
+    public partial struct LupusElement
+    {
+        public long? Integer;
+        public LupusClass? LupusClass;
+
+        public static implicit operator LupusElement(long Integer) => new LupusElement { Integer = Integer };
+        public static implicit operator LupusElement(LupusClass LupusClass) => new LupusElement { LupusClass = LupusClass };
+    }
+
+    public partial struct MonaziteElement
+    {
+        public double? Double;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator MonaziteElement(double Double) => new MonaziteElement { Double = Double };
+        public static implicit operator MonaziteElement(MonaziteClass MonaziteClass) => new MonaziteElement { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Monoliteral
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+
+        public static implicit operator Monoliteral(bool Bool) => new Monoliteral { Bool = Bool };
+        public static implicit operator Monoliteral(object[] NullArray) => new Monoliteral { NullArray = NullArray };
+    }
+
+    public partial struct MonotheisticallyElement
+    {
+        public MonotheisticallyClass? MonotheisticallyClass;
+        public object[]? NullArray;
+
+        public static implicit operator MonotheisticallyElement(MonotheisticallyClass MonotheisticallyClass) => new MonotheisticallyElement { MonotheisticallyClass = MonotheisticallyClass };
+        public static implicit operator MonotheisticallyElement(object[] NullArray) => new MonotheisticallyElement { NullArray = NullArray };
+    }
+
+    public partial struct Montage
+    {
+        public double? Double;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Montage(double Double) => new Montage { Double = Double };
+        public static implicit operator Montage(object[] NullArray) => new Montage { NullArray = NullArray };
+        public static implicit operator Montage(string String) => new Montage { String = String };
+    }
+
+    public partial struct Moralness
+    {
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Moralness(double Double) => new Moralness { Double = Double };
+        public static implicit operator Moralness(object[] NullArray) => new Moralness { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Double == null;
+    }
+
+    public partial struct Mulishly
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Mulishly(double Double) => new Mulishly { Double = Double };
+        public static implicit operator Mulishly(long[] IntegerArray) => new Mulishly { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Double == null;
+    }
+
+    public partial struct Myoscope
+    {
+        public bool? Bool;
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Myoscope(bool Bool) => new Myoscope { Bool = Bool };
+        public static implicit operator Myoscope(long Integer) => new Myoscope { Integer = Integer };
+        public static implicit operator Myoscope(object[] NullArray) => new Myoscope { NullArray = NullArray };
+    }
+
+    public partial struct Neuromastic
+    {
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Neuromastic(double Double) => new Neuromastic { Double = Double };
+        public static implicit operator Neuromastic(object[] NullArray) => new Neuromastic { NullArray = NullArray };
+    }
+
+    public partial struct Nonnervous
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Nonnervous(bool Bool) => new Nonnervous { Bool = Bool };
+        public static implicit operator Nonnervous(long Integer) => new Nonnervous { Integer = Integer };
+    }
+
+    public partial struct Nonvaluation
+    {
+        public bool? Bool;
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Nonvaluation(bool Bool) => new Nonvaluation { Bool = Bool };
+        public static implicit operator Nonvaluation(double Double) => new Nonvaluation { Double = Double };
+        public static implicit operator Nonvaluation(object[] NullArray) => new Nonvaluation { NullArray = NullArray };
+    }
+
+    public partial struct OccupationalistElement
+    {
+        public object[]? NullArray;
+        public OccupationalistClass? OccupationalistClass;
+
+        public static implicit operator OccupationalistElement(object[] NullArray) => new OccupationalistElement { NullArray = NullArray };
+        public static implicit operator OccupationalistElement(OccupationalistClass OccupationalistClass) => new OccupationalistElement { OccupationalistClass = OccupationalistClass };
+        public bool IsNull => NullArray == null && OccupationalistClass == null;
+    }
+
+    public partial struct OutrivalElement
+    {
+        public double? Double;
+        public OutrivalClass? OutrivalClass;
+
+        public static implicit operator OutrivalElement(double Double) => new OutrivalElement { Double = Double };
+        public static implicit operator OutrivalElement(OutrivalClass OutrivalClass) => new OutrivalElement { OutrivalClass = OutrivalClass };
+        public bool IsNull => OutrivalClass == null && Double == null;
+    }
+
+    public partial struct Paleographically
+    {
+        public double? Double;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Paleographically(double Double) => new Paleographically { Double = Double };
+        public static implicit operator Paleographically(Dictionary<string, long?> UnionMap) => new Paleographically { UnionMap = UnionMap };
+    }
+
+    public partial struct Pamphletwise
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Pamphletwise(long Integer) => new Pamphletwise { Integer = Integer };
+        public static implicit operator Pamphletwise(Dictionary<string, long> IntegerMap) => new Pamphletwise { IntegerMap = IntegerMap };
+        public static implicit operator Pamphletwise(string String) => new Pamphletwise { String = String };
+    }
+
+    public partial struct Pediatric
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Pediatric(bool Bool) => new Pediatric { Bool = Bool };
+        public static implicit operator Pediatric(double Double) => new Pediatric { Double = Double };
+        public bool IsNull => Bool == null && Double == null;
+    }
+
+    public partial struct PiaculumElement
+    {
+        public double? Double;
+        public PiaculumClass? PiaculumClass;
+
+        public static implicit operator PiaculumElement(double Double) => new PiaculumElement { Double = Double };
+        public static implicit operator PiaculumElement(PiaculumClass PiaculumClass) => new PiaculumElement { PiaculumClass = PiaculumClass };
+    }
+
+    public partial struct Piccadilly
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Piccadilly(double Double) => new Piccadilly { Double = Double };
+        public static implicit operator Piccadilly(string String) => new Piccadilly { String = String };
+        public bool IsNull => Double == null && String == null;
+    }
+
+    public partial struct Piffler
+    {
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+
+        public static implicit operator Piffler(MonaziteClass MonaziteClass) => new Piffler { MonaziteClass = MonaziteClass };
+        public static implicit operator Piffler(object[] NullArray) => new Piffler { NullArray = NullArray };
+    }
+
+    public partial struct Pithful
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Pithful(bool Bool) => new Pithful { Bool = Bool };
+        public static implicit operator Pithful(long Integer) => new Pithful { Integer = Integer };
+        public bool IsNull => Bool == null && Integer == null;
+    }
+
+    public partial struct Placuntiti
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Placuntiti(long Integer) => new Placuntiti { Integer = Integer };
+        public static implicit operator Placuntiti(Dictionary<string, long> IntegerMap) => new Placuntiti { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Plectopterous
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Plectopterous(double Double) => new Plectopterous { Double = Double };
+        public static implicit operator Plectopterous(Dictionary<string, long> IntegerMap) => new Plectopterous { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Poliorcetic
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Poliorcetic(bool Bool) => new Poliorcetic { Bool = Bool };
+        public static implicit operator Poliorcetic(MonaziteClass MonaziteClass) => new Poliorcetic { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Poormaster
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Poormaster(long[] IntegerArray) => new Poormaster { IntegerArray = IntegerArray };
+        public static implicit operator Poormaster(Dictionary<string, long> IntegerMap) => new Poormaster { IntegerMap = IntegerMap };
+        public bool IsNull => IntegerArray == null && IntegerMap == null;
+    }
+
+    public partial struct PotwhiskyElement
+    {
+        public long? Integer;
+        public PotwhiskyClass? PotwhiskyClass;
+
+        public static implicit operator PotwhiskyElement(long Integer) => new PotwhiskyElement { Integer = Integer };
+        public static implicit operator PotwhiskyElement(PotwhiskyClass PotwhiskyClass) => new PotwhiskyElement { PotwhiskyClass = PotwhiskyClass };
+        public bool IsNull => PotwhiskyClass == null && Integer == null;
+    }
+
+    public partial struct Practicalizer
+    {
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Practicalizer(MonaziteClass MonaziteClass) => new Practicalizer { MonaziteClass = MonaziteClass };
+        public static implicit operator Practicalizer(object[] NullArray) => new Practicalizer { NullArray = NullArray };
+        public static implicit operator Practicalizer(string String) => new Practicalizer { String = String };
+    }
+
+    public partial struct PrefreshmanElement
+    {
+        public object[]? NullArray;
+        public PrefreshmanClass? PrefreshmanClass;
+        public string? String;
+
+        public static implicit operator PrefreshmanElement(object[] NullArray) => new PrefreshmanElement { NullArray = NullArray };
+        public static implicit operator PrefreshmanElement(PrefreshmanClass PrefreshmanClass) => new PrefreshmanElement { PrefreshmanClass = PrefreshmanClass };
+        public static implicit operator PrefreshmanElement(string String) => new PrefreshmanElement { String = String };
+    }
+
+    public partial struct Prehensility
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+
+        public static implicit operator Prehensility(bool Bool) => new Prehensility { Bool = Bool };
+        public static implicit operator Prehensility(MonaziteClass MonaziteClass) => new Prehensility { MonaziteClass = MonaziteClass };
+        public static implicit operator Prehensility(object[] NullArray) => new Prehensility { NullArray = NullArray };
+    }
+
+    public partial struct Prevoidance
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Prevoidance(long Integer) => new Prevoidance { Integer = Integer };
+        public static implicit operator Prevoidance(long[] IntegerArray) => new Prevoidance { IntegerArray = IntegerArray };
+        public static implicit operator Prevoidance(MonaziteClass MonaziteClass) => new Prevoidance { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Protext
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Protext(bool Bool) => new Protext { Bool = Bool };
+        public static implicit operator Protext(long[] IntegerArray) => new Protext { IntegerArray = IntegerArray };
+        public static implicit operator Protext(MonaziteClass MonaziteClass) => new Protext { MonaziteClass = MonaziteClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                JurorElementConverter.Singleton,
+                KongoniConverter.Singleton,
+                LadronismElementConverter.Singleton,
+                LandlubberlyElementConverter.Singleton,
+                ListenerConverter.Singleton,
+                LupusElementConverter.Singleton,
+                MonaziteElementConverter.Singleton,
+                MonoliteralConverter.Singleton,
+                MonotheisticallyElementConverter.Singleton,
+                MontageConverter.Singleton,
+                MoralnessConverter.Singleton,
+                MulishlyConverter.Singleton,
+                MyoscopeConverter.Singleton,
+                NeuromasticConverter.Singleton,
+                NonnervousConverter.Singleton,
+                NonvaluationConverter.Singleton,
+                OccupationalistElementConverter.Singleton,
+                OutrivalElementConverter.Singleton,
+                PaleographicallyConverter.Singleton,
+                PamphletwiseConverter.Singleton,
+                PediatricConverter.Singleton,
+                PiaculumElementConverter.Singleton,
+                PiccadillyConverter.Singleton,
+                PifflerConverter.Singleton,
+                PithfulConverter.Singleton,
+                PlacuntitiConverter.Singleton,
+                PlectopterousConverter.Singleton,
+                PoliorceticConverter.Singleton,
+                PoormasterConverter.Singleton,
+                PotwhiskyElementConverter.Singleton,
+                PracticalizerConverter.Singleton,
+                PrefreshmanElementConverter.Singleton,
+                PrehensilityConverter.Singleton,
+                PrevoidanceConverter.Singleton,
+                ProtextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class JurorElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(JurorElement) || t == typeof(JurorElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new JurorElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<JurorClass>(reader);
+                    return new JurorElement { JurorClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type JurorElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (JurorElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.JurorClass != null)
+            {
+                serializer.Serialize(writer, value.JurorClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type JurorElement");
+        }
+
+        public static readonly JurorElementConverter Singleton = new JurorElementConverter();
+    }
+
+    internal class KongoniConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kongoni) || t == typeof(Kongoni?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Kongoni { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Kongoni { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Kongoni");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Kongoni)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Kongoni");
+        }
+
+        public static readonly KongoniConverter Singleton = new KongoniConverter();
+    }
+
+    internal class LadronismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LadronismElement) || t == typeof(LadronismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new LadronismElement { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LadronismElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LadronismClass>(reader);
+                    return new LadronismElement { LadronismClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LadronismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LadronismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LadronismClass != null)
+            {
+                serializer.Serialize(writer, value.LadronismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LadronismElement");
+        }
+
+        public static readonly LadronismElementConverter Singleton = new LadronismElementConverter();
+    }
+
+    internal class LandlubberlyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LandlubberlyElement) || t == typeof(LandlubberlyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LandlubberlyElement { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new LandlubberlyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LandlubberlyClass>(reader);
+                    return new LandlubberlyElement { LandlubberlyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LandlubberlyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LandlubberlyElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.LandlubberlyClass != null)
+            {
+                serializer.Serialize(writer, value.LandlubberlyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LandlubberlyElement");
+        }
+
+        public static readonly LandlubberlyElementConverter Singleton = new LandlubberlyElementConverter();
+    }
+
+    internal class ListenerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Listener) || t == typeof(Listener?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Listener { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Listener { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Listener");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Listener)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Listener");
+        }
+
+        public static readonly ListenerConverter Singleton = new ListenerConverter();
+    }
+
+    internal class LupusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LupusElement) || t == typeof(LupusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LupusElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LupusClass>(reader);
+                    return new LupusElement { LupusClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LupusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LupusElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.LupusClass != null)
+            {
+                serializer.Serialize(writer, value.LupusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LupusElement");
+        }
+
+        public static readonly LupusElementConverter Singleton = new LupusElementConverter();
+    }
+
+    internal class MonaziteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonaziteElement) || t == typeof(MonaziteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new MonaziteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new MonaziteElement { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type MonaziteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonaziteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonaziteElement");
+        }
+
+        public static readonly MonaziteElementConverter Singleton = new MonaziteElementConverter();
+    }
+
+    internal class MonoliteralConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Monoliteral) || t == typeof(Monoliteral?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Monoliteral { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Monoliteral { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Monoliteral");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Monoliteral)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Monoliteral");
+        }
+
+        public static readonly MonoliteralConverter Singleton = new MonoliteralConverter();
+    }
+
+    internal class MonotheisticallyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonotheisticallyElement) || t == typeof(MonotheisticallyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonotheisticallyClass>(reader);
+                    return new MonotheisticallyElement { MonotheisticallyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new MonotheisticallyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type MonotheisticallyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonotheisticallyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonotheisticallyClass != null)
+            {
+                serializer.Serialize(writer, value.MonotheisticallyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonotheisticallyElement");
+        }
+
+        public static readonly MonotheisticallyElementConverter Singleton = new MonotheisticallyElementConverter();
+    }
+
+    internal class MontageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Montage) || t == typeof(Montage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Montage { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Montage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Montage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Montage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Montage)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Montage");
+        }
+
+        public static readonly MontageConverter Singleton = new MontageConverter();
+    }
+
+    internal class MoralnessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Moralness) || t == typeof(Moralness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Moralness { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Moralness { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Moralness { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Moralness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Moralness)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Moralness");
+        }
+
+        public static readonly MoralnessConverter Singleton = new MoralnessConverter();
+    }
+
+    internal class MulishlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Mulishly) || t == typeof(Mulishly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Mulishly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Mulishly { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Mulishly { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Mulishly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Mulishly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Mulishly");
+        }
+
+        public static readonly MulishlyConverter Singleton = new MulishlyConverter();
+    }
+
+    internal class MyoscopeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Myoscope) || t == typeof(Myoscope?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Myoscope { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Myoscope { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Myoscope { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Myoscope");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Myoscope)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Myoscope");
+        }
+
+        public static readonly MyoscopeConverter Singleton = new MyoscopeConverter();
+    }
+
+    internal class NeuromasticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Neuromastic) || t == typeof(Neuromastic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Neuromastic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Neuromastic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Neuromastic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Neuromastic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Neuromastic");
+        }
+
+        public static readonly NeuromasticConverter Singleton = new NeuromasticConverter();
+    }
+
+    internal class NonnervousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonnervous) || t == typeof(Nonnervous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Nonnervous { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonnervous { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonnervous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonnervous)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonnervous");
+        }
+
+        public static readonly NonnervousConverter Singleton = new NonnervousConverter();
+    }
+
+    internal class NonvaluationConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonvaluation) || t == typeof(Nonvaluation?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Nonvaluation { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonvaluation { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Nonvaluation { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonvaluation");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonvaluation)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonvaluation");
+        }
+
+        public static readonly NonvaluationConverter Singleton = new NonvaluationConverter();
+    }
+
+    internal class OccupationalistElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OccupationalistElement) || t == typeof(OccupationalistElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OccupationalistElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OccupationalistClass>(reader);
+                    return new OccupationalistElement { OccupationalistClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new OccupationalistElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OccupationalistElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OccupationalistElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.OccupationalistClass != null)
+            {
+                serializer.Serialize(writer, value.OccupationalistClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OccupationalistElement");
+        }
+
+        public static readonly OccupationalistElementConverter Singleton = new OccupationalistElementConverter();
+    }
+
+    internal class OutrivalElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OutrivalElement) || t == typeof(OutrivalElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OutrivalElement { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new OutrivalElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OutrivalClass>(reader);
+                    return new OutrivalElement { OutrivalClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type OutrivalElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OutrivalElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OutrivalClass != null)
+            {
+                serializer.Serialize(writer, value.OutrivalClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OutrivalElement");
+        }
+
+        public static readonly OutrivalElementConverter Singleton = new OutrivalElementConverter();
+    }
+
+    internal class PaleographicallyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Paleographically) || t == typeof(Paleographically?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Paleographically { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Paleographically { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Paleographically");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Paleographically)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Paleographically");
+        }
+
+        public static readonly PaleographicallyConverter Singleton = new PaleographicallyConverter();
+    }
+
+    internal class PamphletwiseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pamphletwise) || t == typeof(Pamphletwise?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pamphletwise { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Pamphletwise { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Pamphletwise { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Pamphletwise");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pamphletwise)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pamphletwise");
+        }
+
+        public static readonly PamphletwiseConverter Singleton = new PamphletwiseConverter();
+    }
+
+    internal class PediatricConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pediatric) || t == typeof(Pediatric?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pediatric { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Pediatric { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pediatric { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pediatric");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pediatric)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pediatric");
+        }
+
+        public static readonly PediatricConverter Singleton = new PediatricConverter();
+    }
+
+    internal class PiaculumElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PiaculumElement) || t == typeof(PiaculumElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PiaculumElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PiaculumClass>(reader);
+                    return new PiaculumElement { PiaculumClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PiaculumElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PiaculumElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.PiaculumClass != null)
+            {
+                serializer.Serialize(writer, value.PiaculumClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PiaculumElement");
+        }
+
+        public static readonly PiaculumElementConverter Singleton = new PiaculumElementConverter();
+    }
+
+    internal class PiccadillyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piccadilly) || t == typeof(Piccadilly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Piccadilly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Piccadilly { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Piccadilly { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Piccadilly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piccadilly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piccadilly");
+        }
+
+        public static readonly PiccadillyConverter Singleton = new PiccadillyConverter();
+    }
+
+    internal class PifflerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piffler) || t == typeof(Piffler?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Piffler { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Piffler { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Piffler");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piffler)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piffler");
+        }
+
+        public static readonly PifflerConverter Singleton = new PifflerConverter();
+    }
+
+    internal class PithfulConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pithful) || t == typeof(Pithful?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pithful { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pithful { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pithful { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pithful");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pithful)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pithful");
+        }
+
+        public static readonly PithfulConverter Singleton = new PithfulConverter();
+    }
+
+    internal class PlacuntitiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Placuntiti) || t == typeof(Placuntiti?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Placuntiti { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Placuntiti { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Placuntiti");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Placuntiti)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Placuntiti");
+        }
+
+        public static readonly PlacuntitiConverter Singleton = new PlacuntitiConverter();
+    }
+
+    internal class PlectopterousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Plectopterous) || t == typeof(Plectopterous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Plectopterous { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Plectopterous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Plectopterous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Plectopterous)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Plectopterous");
+        }
+
+        public static readonly PlectopterousConverter Singleton = new PlectopterousConverter();
+    }
+
+    internal class PoliorceticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poliorcetic) || t == typeof(Poliorcetic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Poliorcetic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Poliorcetic { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Poliorcetic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poliorcetic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poliorcetic");
+        }
+
+        public static readonly PoliorceticConverter Singleton = new PoliorceticConverter();
+    }
+
+    internal class PoormasterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poormaster) || t == typeof(Poormaster?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Poormaster { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Poormaster { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Poormaster { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Poormaster");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poormaster)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poormaster");
+        }
+
+        public static readonly PoormasterConverter Singleton = new PoormasterConverter();
+    }
+
+    internal class PotwhiskyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PotwhiskyElement) || t == typeof(PotwhiskyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new PotwhiskyElement { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PotwhiskyElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PotwhiskyClass>(reader);
+                    return new PotwhiskyElement { PotwhiskyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PotwhiskyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PotwhiskyElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PotwhiskyClass != null)
+            {
+                serializer.Serialize(writer, value.PotwhiskyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PotwhiskyElement");
+        }
+
+        public static readonly PotwhiskyElementConverter Singleton = new PotwhiskyElementConverter();
+    }
+
+    internal class PracticalizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Practicalizer) || t == typeof(Practicalizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Practicalizer { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Practicalizer { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Practicalizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Practicalizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Practicalizer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Practicalizer");
+        }
+
+        public static readonly PracticalizerConverter Singleton = new PracticalizerConverter();
+    }
+
+    internal class PrefreshmanElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PrefreshmanElement) || t == typeof(PrefreshmanElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new PrefreshmanElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PrefreshmanClass>(reader);
+                    return new PrefreshmanElement { PrefreshmanClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new PrefreshmanElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PrefreshmanElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PrefreshmanElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.PrefreshmanClass != null)
+            {
+                serializer.Serialize(writer, value.PrefreshmanClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PrefreshmanElement");
+        }
+
+        public static readonly PrefreshmanElementConverter Singleton = new PrefreshmanElementConverter();
+    }
+
+    internal class PrehensilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prehensility) || t == typeof(Prehensility?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Prehensility { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prehensility { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Prehensility { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prehensility");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prehensility)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prehensility");
+        }
+
+        public static readonly PrehensilityConverter Singleton = new PrehensilityConverter();
+    }
+
+    internal class PrevoidanceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prevoidance) || t == typeof(Prevoidance?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Prevoidance { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prevoidance { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Prevoidance { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prevoidance");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prevoidance)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prevoidance");
+        }
+
+        public static readonly PrevoidanceConverter Singleton = new PrevoidanceConverter();
+    }
+
+    internal class ProtextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protext) || t == typeof(Protext?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Protext { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Protext { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Protext { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protext");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protext)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protext");
+        }
+
+        public static readonly ProtextConverter Singleton = new ProtextConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations3.json/density-dense--3bfb4c22cfd0/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations3.json/density-dense--3bfb4c22cfd0/QuickType.cs
new file mode 100644
index 0000000..1dbca43
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations3.json/density-dense--3bfb4c22cfd0/QuickType.cs
@@ -0,0 +1,2301 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+    using J = Newtonsoft.Json.JsonPropertyAttribute;
+    using R = Newtonsoft.Json.Required;
+    using N = Newtonsoft.Json.NullValueHandling;
+
+    public partial record TopLevel
+    {
+        [J("juror", Required = R.Always)]            public JurorElement[] Juror { get; set; }                      
+        [J("kongoni", Required = R.Always)]          public Kongoni[] Kongoni { get; set; }                         
+        [J("ladronism", Required = R.Always)]        public LadronismElement[] Ladronism { get; set; }              
+        [J("landlubberly", Required = R.Always)]     public LandlubberlyElement[] Landlubberly { get; set; }        
+        [J("listener", Required = R.Always)]         public Listener[] Listener { get; set; }                       
+        [J("lupus", Required = R.Always)]            public LupusElement[] Lupus { get; set; }                      
+        [J("maslin", Required = R.Always)]           public Maslin[] Maslin { get; set; }                           
+        [J("monazite", Required = R.Always)]         public MonaziteElement[] Monazite { get; set; }                
+        [J("monoliteral", Required = R.Always)]      public Monoliteral[] Monoliteral { get; set; }                 
+        [J("monotheistically", Required = R.Always)] public MonotheisticallyElement[] Monotheistically { get; set; }
+        [J("montage", Required = R.Always)]          public Montage[] Montage { get; set; }                         
+        [J("moralness", Required = R.Always)]        public Moralness[] Moralness { get; set; }                     
+        [J("mowra", Required = R.Always)]            public MonaziteClass?[] Mowra { get; set; }                    
+        [J("mulishly", Required = R.Always)]         public Mulishly[] Mulishly { get; set; }                       
+        [J("myoscope", Required = R.Always)]         public Myoscope[] Myoscope { get; set; }                       
+        [J("nach", Required = R.Always)]             public long?[]?[] Nach { get; set; }                           
+        [J("neuromastic", Required = R.Always)]      public Neuromastic[] Neuromastic { get; set; }                 
+        [J("noncontributing", Required = R.Always)]  public Noncontributing[] Noncontributing { get; set; }         
+        [J("nonnervous", Required = R.Always)]       public Nonnervous[] Nonnervous { get; set; }                   
+        [J("nonvaluation", Required = R.Always)]     public Nonvaluation[] Nonvaluation { get; set; }               
+        [J("occupationalist", Required = R.Always)]  public OccupationalistElement[] Occupationalist { get; set; }  
+        [J("outrival", Required = R.Always)]         public OutrivalElement[] Outrival { get; set; }                
+        [J("paleographically", Required = R.Always)] public Paleographically[] Paleographically { get; set; }       
+        [J("pamphletwise", Required = R.Always)]     public Pamphletwise[] Pamphletwise { get; set; }               
+        [J("pediatrics", Required = R.Always)]       public Pediatric[] Pediatrics { get; set; }                    
+        [J("perceptive", Required = R.Always)]       public bool[] Perceptive { get; set; }                         
+        [J("piaculum", Required = R.Always)]         public PiaculumElement[] Piaculum { get; set; }                
+        [J("piccadilly", Required = R.Always)]       public Piccadilly[] Piccadilly { get; set; }                   
+        [J("piffler", Required = R.Always)]          public Piffler[] Piffler { get; set; }                         
+        [J("pithful", Required = R.Always)]          public Pithful[] Pithful { get; set; }                         
+        [J("placuntitis", Required = R.Always)]      public Placuntiti[] Placuntitis { get; set; }                  
+        [J("plectopterous", Required = R.Always)]    public Plectopterous[] Plectopterous { get; set; }             
+        [J("pneumocele", Required = R.Always)]       public Pneumocele?[] Pneumocele { get; set; }                  
+        [J("poliorcetic", Required = R.Always)]      public Poliorcetic[] Poliorcetic { get; set; }                 
+        [J("poormaster", Required = R.Always)]       public Poormaster[] Poormaster { get; set; }                   
+        [J("potwhisky", Required = R.Always)]        public PotwhiskyElement[] Potwhisky { get; set; }              
+        [J("practicalizer", Required = R.Always)]    public Practicalizer[] Practicalizer { get; set; }             
+        [J("prefreshman", Required = R.Always)]      public PrefreshmanElement[] Prefreshman { get; set; }          
+        [J("prehensility", Required = R.Always)]     public Prehensility[] Prehensility { get; set; }               
+        [J("prevoidance", Required = R.Always)]      public Prevoidance[] Prevoidance { get; set; }                 
+        [J("probant", Required = R.Always)]          public Dictionary<string, long?>[] Probant { get; set; }       
+        [J("protext", Required = R.Always)]          public Protext[] Protext { get; set; }                         
+    }
+
+    public partial record JurorClass
+    {
+        [J("adipsy", Required = R.AllowNull)]          public object Adipsy { get; set; }         
+        [J("auxiliator", Required = R.AllowNull)]      public object Auxiliator { get; set; }     
+        [J("benda", Required = R.AllowNull)]           public object Benda { get; set; }          
+        [J("benjamin", Required = R.AllowNull)]        public object Benjamin { get; set; }       
+        [J("brandling", Required = R.AllowNull)]       public object Brandling { get; set; }      
+        [J("epicurishly", Required = R.AllowNull)]     public object Epicurishly { get; set; }    
+        [J("eremochaetous", Required = R.AllowNull)]   public object Eremochaetous { get; set; }  
+        [J("marten", Required = R.AllowNull)]          public object Marten { get; set; }         
+        [J("monocline", Required = R.AllowNull)]       public object Monocline { get; set; }      
+        [J("Olea", Required = R.AllowNull)]            public object Olea { get; set; }           
+        [J("palgat", Required = R.AllowNull)]          public object Palgat { get; set; }         
+        [J("pennyworth", Required = R.AllowNull)]      public object Pennyworth { get; set; }     
+        [J("pioury", Required = R.AllowNull)]          public object Pioury { get; set; }         
+        [J("pragmatistic", Required = R.AllowNull)]    public object Pragmatistic { get; set; }   
+        [J("stylelessness", Required = R.AllowNull)]   public object Stylelessness { get; set; }  
+        [J("systematical", Required = R.AllowNull)]    public object Systematical { get; set; }   
+        [J("thready", Required = R.AllowNull)]         public object Thready { get; set; }        
+        [J("uncontemporary", Required = R.AllowNull)]  public object Uncontemporary { get; set; } 
+        [J("uncouched", Required = R.AllowNull)]       public object Uncouched { get; set; }      
+        [J("uninhabitedness", Required = R.AllowNull)] public object Uninhabitedness { get; set; }
+    }
+
+    public partial record LadronismClass
+    {
+        [J("acclaimer", Required = R.AllowNull)]     public object Acclaimer { get; set; }    
+        [J("achree", Required = R.AllowNull)]        public object Achree { get; set; }       
+        [J("base", Required = R.AllowNull)]          public object Base { get; set; }         
+        [J("conundrumize", Required = R.AllowNull)]  public object Conundrumize { get; set; } 
+        [J("degerminator", Required = R.AllowNull)]  public object Degerminator { get; set; } 
+        [J("describable", Required = R.AllowNull)]   public object Describable { get; set; }  
+        [J("exasperatedly", Required = R.AllowNull)] public object Exasperatedly { get; set; }
+        [J("heroine", Required = R.AllowNull)]       public object Heroine { get; set; }      
+        [J("indazin", Required = R.AllowNull)]       public object Indazin { get; set; }      
+        [J("luteous", Required = R.AllowNull)]       public object Luteous { get; set; }      
+        [J("papular", Required = R.AllowNull)]       public object Papular { get; set; }      
+        [J("pritch", Required = R.AllowNull)]        public object Pritch { get; set; }       
+        [J("Prodenia", Required = R.AllowNull)]      public object Prodenia { get; set; }     
+        [J("seege", Required = R.AllowNull)]         public object Seege { get; set; }        
+        [J("shopgirl", Required = R.AllowNull)]      public object Shopgirl { get; set; }     
+        [J("tragedietta", Required = R.AllowNull)]   public object Tragedietta { get; set; }  
+        [J("unsparse", Required = R.AllowNull)]      public object Unsparse { get; set; }     
+        [J("uplook", Required = R.AllowNull)]        public object Uplook { get; set; }       
+        [J("vermiformis", Required = R.AllowNull)]   public object Vermiformis { get; set; }  
+        [J("whafabout", Required = R.AllowNull)]     public object Whafabout { get; set; }    
+    }
+
+    public partial record LandlubberlyClass
+    {
+        [J("acropoleis", Required = R.AllowNull)]      public object Acropoleis { get; set; }     
+        [J("aminate", Required = R.AllowNull)]         public object Aminate { get; set; }        
+        [J("Amyraldism", Required = R.AllowNull)]      public object Amyraldism { get; set; }     
+        [J("bipenniform", Required = R.AllowNull)]     public object Bipenniform { get; set; }    
+        [J("bugre", Required = R.AllowNull)]           public object Bugre { get; set; }          
+        [J("calycule", Required = R.AllowNull)]        public object Calycule { get; set; }       
+        [J("caoutchouc", Required = R.AllowNull)]      public object Caoutchouc { get; set; }     
+        [J("disprover", Required = R.AllowNull)]       public object Disprover { get; set; }      
+        [J("fitroot", Required = R.AllowNull)]         public object Fitroot { get; set; }        
+        [J("fulgently", Required = R.AllowNull)]       public object Fulgently { get; set; }      
+        [J("kickup", Required = R.AllowNull)]          public object Kickup { get; set; }         
+        [J("laevoversion", Required = R.AllowNull)]    public object Laevoversion { get; set; }   
+        [J("moter", Required = R.AllowNull)]           public object Moter { get; set; }          
+        [J("objectivity", Required = R.AllowNull)]     public object Objectivity { get; set; }    
+        [J("posterity", Required = R.AllowNull)]       public object Posterity { get; set; }      
+        [J("postnuptial", Required = R.AllowNull)]     public object Postnuptial { get; set; }    
+        [J("precedentary", Required = R.AllowNull)]    public object Precedentary { get; set; }   
+        [J("saddling", Required = R.AllowNull)]        public object Saddling { get; set; }       
+        [J("subcurrent", Required = R.AllowNull)]      public object Subcurrent { get; set; }     
+        [J("unrecriminative", Required = R.AllowNull)] public object Unrecriminative { get; set; }
+    }
+
+    public partial record LupusClass
+    {
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }     
+        [J("Chlorioninae", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chlorioninae { get; set; }     
+        [J("Corvinae", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Corvinae { get; set; }         
+        [J("Crassina", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Crassina { get; set; }         
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }    
+        [J("exiguity", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Exiguity { get; set; }         
+        [J("farcist", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Farcist { get; set; }          
+        [J("holographical", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Holographical { get; set; }    
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }         
+        [J("ichthyophagan", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Ichthyophagan { get; set; }    
+        [J("implacable", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Implacable { get; set; }       
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }     
+        [J("outshiner", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Outshiner { get; set; }        
+        [J("overweather", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Overweather { get; set; }      
+        [J("protonegroid", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Protonegroid { get; set; }     
+        [J("shallowish", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Shallowish { get; set; }       
+        [J("snoke", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Snoke { get; set; }            
+        [J("snout", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Snout { get; set; }            
+        [J("surveillance", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Surveillance { get; set; }     
+        [J("threshingtime", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Threshingtime { get; set; }    
+        [J("Thysanocarpus", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Thysanocarpus { get; set; }    
+        [J("unsignificantly", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public long? Unsignificantly { get; set; }  
+        [J("unsnap", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Unsnap { get; set; }           
+        [J("vendible", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Vendible { get; set; }         
+    }
+
+    public partial record Maslin
+    {
+        [J("Alicant", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Alicant { get; set; }          
+        [J("antiatonement")]                                                            public object? Antiatonement { get; set; }  
+        [J("anticorrosive", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Anticorrosive { get; set; }    
+        [J("aphidozer")]                                                                public object? Aphidozer { get; set; }      
+        [J("Bakuninist")]                                                               public object? Bakuninist { get; set; }     
+        [J("be", Required = R.DisallowNull, NullValueHandling = N.Ignore)]              public long? Be { get; set; }               
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }     
+        [J("chub", Required = R.DisallowNull, NullValueHandling = N.Ignore)]            public long? Chub { get; set; }             
+        [J("cuprosilicon", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Cuprosilicon { get; set; }     
+        [J("curtailedly", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Curtailedly { get; set; }      
+        [J("dellenite", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Dellenite { get; set; }        
+        [J("Dimitry", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Dimitry { get; set; }          
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }    
+        [J("edifying")]                                                                 public object? Edifying { get; set; }       
+        [J("ethmoiditis", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Ethmoiditis { get; set; }      
+        [J("gastralgy")]                                                                public object? Gastralgy { get; set; }      
+        [J("goatherd", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Goatherd { get; set; }         
+        [J("hammerdress", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Hammerdress { get; set; }      
+        [J("hangfire")]                                                                 public object? Hangfire { get; set; }       
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }         
+        [J("lacunosity", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Lacunosity { get; set; }       
+        [J("longiloquence")]                                                            public object? Longiloquence { get; set; }  
+        [J("mameliere", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Mameliere { get; set; }        
+        [J("motherless")]                                                               public object? Motherless { get; set; }     
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }     
+        [J("noncorrodible")]                                                            public object? Noncorrodible { get; set; }  
+        [J("nonsensicality")]                                                           public object? Nonsensicality { get; set; } 
+        [J("oafishly", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Oafishly { get; set; }         
+        [J("pfund")]                                                                    public object? Pfund { get; set; }          
+        [J("preadvisory")]                                                              public object? Preadvisory { get; set; }    
+        [J("retroflexed")]                                                              public object? Retroflexed { get; set; }    
+        [J("saccharulmic", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Saccharulmic { get; set; }     
+        [J("scowlful", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Scowlful { get; set; }         
+        [J("secluded")]                                                                 public object? Secluded { get; set; }       
+        [J("slackage")]                                                                 public object? Slackage { get; set; }       
+        [J("sphaeridial", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Sphaeridial { get; set; }      
+        [J("spondulics")]                                                               public object? Spondulics { get; set; }     
+        [J("subsecive", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Subsecive { get; set; }        
+        [J("swellmobsman")]                                                             public object? Swellmobsman { get; set; }   
+        [J("trachyglossate", Required = R.DisallowNull, NullValueHandling = N.Ignore)]  public long? Trachyglossate { get; set; }   
+        [J("trialogue")]                                                                public object? Trialogue { get; set; }      
+        [J("unassuaged", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Unassuaged { get; set; }       
+        [J("ungross")]                                                                  public object? Ungross { get; set; }        
+        [J("unjudiciously")]                                                            public object? Unjudiciously { get; set; }  
+    }
+
+    public partial record MonaziteClass
+    {
+        [J("catharticalness", Required = R.Always)] public double Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.Always)]    public long Chirotherium { get; set; }     
+        [J("disdiapason", Required = R.Always)]     public string Disdiapason { get; set; }    
+        [J("homocerc", Required = R.Always)]        public bool Homocerc { get; set; }         
+        [J("nonbookish", Required = R.AllowNull)]   public object Nonbookish { get; set; }     
+    }
+
+    public partial record MonotheisticallyClass
+    {
+        [J("blaspheme")]                                                                public object? Blaspheme { get; set; }         
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }   
+        [J("celiosalpingectomy")]                                                       public object? Celiosalpingectomy { get; set; }
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }        
+        [J("consummativeness")]                                                         public object? Consummativeness { get; set; }  
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }       
+        [J("egestive")]                                                                 public object? Egestive { get; set; }          
+        [J("enchylema")]                                                                public object? Enchylema { get; set; }         
+        [J("gasconade")]                                                                public object? Gasconade { get; set; }         
+        [J("holidayer")]                                                                public object? Holidayer { get; set; }         
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }            
+        [J("intuitionalism")]                                                           public object? Intuitionalism { get; set; }    
+        [J("lophiostomate")]                                                            public object? Lophiostomate { get; set; }     
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }        
+        [J("nonvolition")]                                                              public object? Nonvolition { get; set; }       
+        [J("palatableness")]                                                            public object? Palatableness { get; set; }     
+        [J("pimpery")]                                                                  public object? Pimpery { get; set; }           
+        [J("previolation")]                                                             public object? Previolation { get; set; }      
+        [J("reconveyance")]                                                             public object? Reconveyance { get; set; }      
+        [J("registership")]                                                             public object? Registership { get; set; }      
+        [J("rhyacolite")]                                                               public object? Rhyacolite { get; set; }        
+        [J("smithereens")]                                                              public object? Smithereens { get; set; }       
+        [J("superedification")]                                                         public object? Superedification { get; set; }  
+        [J("trust")]                                                                    public object? Trust { get; set; }             
+        [J("whitestone")]                                                               public object? Whitestone { get; set; }        
+    }
+
+    public partial record Noncontributing
+    {
+        [J("estevin", Required = R.Always)]        public string Estevin { get; set; }    
+        [J("jolterhead", Required = R.Always)]     public double Jolterhead { get; set; } 
+        [J("sauternes", Required = R.Always)]      public long Sauternes { get; set; }    
+        [J("sparsely", Required = R.Always)]       public bool Sparsely { get; set; }     
+        [J("unrequested", Required = R.AllowNull)] public object Unrequested { get; set; }
+    }
+
+    public partial record OccupationalistClass
+    {
+        [J("beholdable", Required = R.AllowNull)]       public object Beholdable { get; set; }      
+        [J("brotuliform", Required = R.AllowNull)]      public object Brotuliform { get; set; }     
+        [J("Chimakum", Required = R.AllowNull)]         public object Chimakum { get; set; }        
+        [J("doodler", Required = R.AllowNull)]          public object Doodler { get; set; }         
+        [J("emulsin", Required = R.AllowNull)]          public object Emulsin { get; set; }         
+        [J("Fin", Required = R.AllowNull)]              public object Fin { get; set; }             
+        [J("flourishing", Required = R.AllowNull)]      public object Flourishing { get; set; }     
+        [J("flueless", Required = R.AllowNull)]         public object Flueless { get; set; }        
+        [J("furtively", Required = R.AllowNull)]        public object Furtively { get; set; }       
+        [J("gritter", Required = R.AllowNull)]          public object Gritter { get; set; }         
+        [J("interwish", Required = R.AllowNull)]        public object Interwish { get; set; }       
+        [J("monoxylic", Required = R.AllowNull)]        public object Monoxylic { get; set; }       
+        [J("myristic", Required = R.AllowNull)]         public object Myristic { get; set; }        
+        [J("nightwear", Required = R.AllowNull)]        public object Nightwear { get; set; }       
+        [J("peruser", Required = R.AllowNull)]          public object Peruser { get; set; }         
+        [J("theoastrological", Required = R.AllowNull)] public object Theoastrological { get; set; }
+        [J("thumby", Required = R.AllowNull)]           public object Thumby { get; set; }          
+        [J("tingitid", Required = R.AllowNull)]         public object Tingitid { get; set; }        
+        [J("trailless", Required = R.AllowNull)]        public object Trailless { get; set; }       
+        [J("unpocketed", Required = R.AllowNull)]       public object Unpocketed { get; set; }      
+    }
+
+    public partial record OutrivalClass
+    {
+        [J("adroitly", Required = R.AllowNull)]        public object Adroitly { get; set; }       
+        [J("bridehood", Required = R.AllowNull)]       public object Bridehood { get; set; }      
+        [J("Castoroides", Required = R.AllowNull)]     public object Castoroides { get; set; }    
+        [J("Czechoslovak", Required = R.AllowNull)]    public object Czechoslovak { get; set; }   
+        [J("diagenesis", Required = R.AllowNull)]      public object Diagenesis { get; set; }     
+        [J("dihexahedron", Required = R.AllowNull)]    public object Dihexahedron { get; set; }   
+        [J("dopester", Required = R.AllowNull)]        public object Dopester { get; set; }       
+        [J("eumerism", Required = R.AllowNull)]        public object Eumerism { get; set; }       
+        [J("flyness", Required = R.AllowNull)]         public object Flyness { get; set; }        
+        [J("fouler", Required = R.AllowNull)]          public object Fouler { get; set; }         
+        [J("laudanosine", Required = R.AllowNull)]     public object Laudanosine { get; set; }    
+        [J("Lingulidae", Required = R.AllowNull)]      public object Lingulidae { get; set; }     
+        [J("minutary", Required = R.AllowNull)]        public object Minutary { get; set; }       
+        [J("mitra", Required = R.AllowNull)]           public object Mitra { get; set; }          
+        [J("opisthorchiasis", Required = R.AllowNull)] public object Opisthorchiasis { get; set; }
+        [J("pensively", Required = R.AllowNull)]       public object Pensively { get; set; }      
+        [J("pubigerous", Required = R.AllowNull)]      public object Pubigerous { get; set; }     
+        [J("rebellious", Required = R.AllowNull)]      public object Rebellious { get; set; }     
+        [J("recodify", Required = R.AllowNull)]        public object Recodify { get; set; }       
+        [J("unpaced", Required = R.AllowNull)]         public object Unpaced { get; set; }        
+    }
+
+    public partial record PiaculumClass
+    {
+        [J("alada", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Alada { get; set; }            
+        [J("amphistomous", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Amphistomous { get; set; }     
+        [J("boysenberry", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Boysenberry { get; set; }      
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }     
+        [J("decardinalize", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Decardinalize { get; set; }    
+        [J("discouragement", Required = R.DisallowNull, NullValueHandling = N.Ignore)]  public long? Discouragement { get; set; }   
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }    
+        [J("doitrified", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Doitrified { get; set; }       
+        [J("hexaspermous", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Hexaspermous { get; set; }     
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }         
+        [J("insinking", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Insinking { get; set; }        
+        [J("loathfulness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Loathfulness { get; set; }     
+        [J("miasmatical", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Miasmatical { get; set; }      
+        [J("neurofibril", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Neurofibril { get; set; }      
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }     
+        [J("phonendoscope", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Phonendoscope { get; set; }    
+        [J("pilferment", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Pilferment { get; set; }       
+        [J("predismissory", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Predismissory { get; set; }    
+        [J("preinscription", Required = R.DisallowNull, NullValueHandling = N.Ignore)]  public long? Preinscription { get; set; }   
+        [J("quotative", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Quotative { get; set; }        
+        [J("sienna", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Sienna { get; set; }           
+        [J("thorax", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Thorax { get; set; }           
+        [J("yachting", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Yachting { get; set; }         
+        [J("Zipper", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Zipper { get; set; }           
+    }
+
+    public partial record Pneumocele
+    {
+        [J("Carbonarism")]                                                              public object? Carbonarism { get; set; }    
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }     
+        [J("cineolic")]                                                                 public object? Cineolic { get; set; }       
+        [J("cobbly")]                                                                   public object? Cobbly { get; set; }         
+        [J("conchyliferous")]                                                           public object? Conchyliferous { get; set; } 
+        [J("congregation")]                                                             public object? Congregation { get; set; }   
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }    
+        [J("enterotomy")]                                                               public object? Enterotomy { get; set; }     
+        [J("entophytal")]                                                               public object? Entophytal { get; set; }     
+        [J("fewtrils")]                                                                 public object? Fewtrils { get; set; }       
+        [J("herem")]                                                                    public object? Herem { get; set; }          
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }         
+        [J("Koniga")]                                                                   public object? Koniga { get; set; }         
+        [J("meticulosity")]                                                             public object? Meticulosity { get; set; }   
+        [J("Micky")]                                                                    public object? Micky { get; set; }          
+        [J("mismarriage")]                                                              public object? Mismarriage { get; set; }    
+        [J("neurotrophic")]                                                             public object? Neurotrophic { get; set; }   
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }     
+        [J("persuasively")]                                                             public object? Persuasively { get; set; }   
+        [J("replaceable")]                                                              public object? Replaceable { get; set; }    
+        [J("silex")]                                                                    public object? Silex { get; set; }          
+        [J("taillight")]                                                                public object? Taillight { get; set; }      
+        [J("unjealous")]                                                                public object? Unjealous { get; set; }      
+        [J("visitorial")]                                                               public object? Visitorial { get; set; }     
+    }
+
+    public partial record PotwhiskyClass
+    {
+        [J("arciform", Required = R.AllowNull)]          public object Arciform { get; set; }         
+        [J("cresolin", Required = R.AllowNull)]          public object Cresolin { get; set; }         
+        [J("disheartener", Required = R.AllowNull)]      public object Disheartener { get; set; }     
+        [J("disproportionable", Required = R.AllowNull)] public object Disproportionable { get; set; }
+        [J("Euchorda", Required = R.AllowNull)]          public object Euchorda { get; set; }         
+        [J("ferryway", Required = R.AllowNull)]          public object Ferryway { get; set; }         
+        [J("filamentiferous", Required = R.AllowNull)]   public object Filamentiferous { get; set; }  
+        [J("flemish", Required = R.AllowNull)]           public object Flemish { get; set; }          
+        [J("forgainst", Required = R.AllowNull)]         public object Forgainst { get; set; }        
+        [J("grainering", Required = R.AllowNull)]        public object Grainering { get; set; }       
+        [J("irrevoluble", Required = R.AllowNull)]       public object Irrevoluble { get; set; }      
+        [J("kindredship", Required = R.AllowNull)]       public object Kindredship { get; set; }      
+        [J("pinguitudinous", Required = R.AllowNull)]    public object Pinguitudinous { get; set; }   
+        [J("simpletonic", Required = R.AllowNull)]       public object Simpletonic { get; set; }      
+        [J("singsong", Required = R.AllowNull)]          public object Singsong { get; set; }         
+        [J("submergement", Required = R.AllowNull)]      public object Submergement { get; set; }     
+        [J("supraoesophagal", Required = R.AllowNull)]   public object Supraoesophagal { get; set; }  
+        [J("thrashel", Required = R.AllowNull)]          public object Thrashel { get; set; }         
+        [J("tyremesis", Required = R.AllowNull)]         public object Tyremesis { get; set; }        
+        [J("Yoruba", Required = R.AllowNull)]            public object Yoruba { get; set; }           
+    }
+
+    public partial record PrefreshmanClass
+    {
+        [J("azorubine", Required = R.AllowNull)]     public object Azorubine { get; set; }    
+        [J("choroiditis", Required = R.AllowNull)]   public object Choroiditis { get; set; }  
+        [J("coagulatory", Required = R.AllowNull)]   public object Coagulatory { get; set; }  
+        [J("cyclorama", Required = R.AllowNull)]     public object Cyclorama { get; set; }    
+        [J("Dolphus", Required = R.AllowNull)]       public object Dolphus { get; set; }      
+        [J("duckhearted", Required = R.AllowNull)]   public object Duckhearted { get; set; }  
+        [J("Ficus", Required = R.AllowNull)]         public object Ficus { get; set; }        
+        [J("Gemaric", Required = R.AllowNull)]       public object Gemaric { get; set; }      
+        [J("jugation", Required = R.AllowNull)]      public object Jugation { get; set; }     
+        [J("myoliposis", Required = R.AllowNull)]    public object Myoliposis { get; set; }   
+        [J("nonnomination", Required = R.AllowNull)] public object Nonnomination { get; set; }
+        [J("palay", Required = R.AllowNull)]         public object Palay { get; set; }        
+        [J("pentactinal", Required = R.AllowNull)]   public object Pentactinal { get; set; }  
+        [J("Phaet", Required = R.AllowNull)]         public object Phaet { get; set; }        
+        [J("piquant", Required = R.AllowNull)]       public object Piquant { get; set; }      
+        [J("registration", Required = R.AllowNull)]  public object Registration { get; set; } 
+        [J("remancipation", Required = R.AllowNull)] public object Remancipation { get; set; }
+        [J("scutatiform", Required = R.AllowNull)]   public object Scutatiform { get; set; }  
+        [J("theodolite", Required = R.AllowNull)]    public object Theodolite { get; set; }   
+        [J("underward", Required = R.AllowNull)]     public object Underward { get; set; }    
+    }
+
+    public partial struct JurorElement
+    {
+        public bool? Bool;
+        public JurorClass? JurorClass;
+
+        public static implicit operator JurorElement(bool Bool) => new JurorElement { Bool = Bool };
+        public static implicit operator JurorElement(JurorClass JurorClass) => new JurorElement { JurorClass = JurorClass };
+    }
+
+    public partial struct Kongoni
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Kongoni(long[] IntegerArray) => new Kongoni { IntegerArray = IntegerArray };
+        public static implicit operator Kongoni(Dictionary<string, long> IntegerMap) => new Kongoni { IntegerMap = IntegerMap };
+    }
+
+    public partial struct LadronismElement
+    {
+        public double? Double;
+        public LadronismClass? LadronismClass;
+        public string? String;
+
+        public static implicit operator LadronismElement(double Double) => new LadronismElement { Double = Double };
+        public static implicit operator LadronismElement(LadronismClass LadronismClass) => new LadronismElement { LadronismClass = LadronismClass };
+        public static implicit operator LadronismElement(string String) => new LadronismElement { String = String };
+    }
+
+    public partial struct LandlubberlyElement
+    {
+        public bool? Bool;
+        public long? Integer;
+        public LandlubberlyClass? LandlubberlyClass;
+
+        public static implicit operator LandlubberlyElement(bool Bool) => new LandlubberlyElement { Bool = Bool };
+        public static implicit operator LandlubberlyElement(long Integer) => new LandlubberlyElement { Integer = Integer };
+        public static implicit operator LandlubberlyElement(LandlubberlyClass LandlubberlyClass) => new LandlubberlyElement { LandlubberlyClass = LandlubberlyClass };
+    }
+
+    public partial struct Listener
+    {
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Listener(long Integer) => new Listener { Integer = Integer };
+        public static implicit operator Listener(object[] NullArray) => new Listener { NullArray = NullArray };
+    }
+
+    public partial struct LupusElement
+    {
+        public long? Integer;
+        public LupusClass? LupusClass;
+
+        public static implicit operator LupusElement(long Integer) => new LupusElement { Integer = Integer };
+        public static implicit operator LupusElement(LupusClass LupusClass) => new LupusElement { LupusClass = LupusClass };
+    }
+
+    public partial struct MonaziteElement
+    {
+        public double? Double;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator MonaziteElement(double Double) => new MonaziteElement { Double = Double };
+        public static implicit operator MonaziteElement(MonaziteClass MonaziteClass) => new MonaziteElement { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Monoliteral
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+
+        public static implicit operator Monoliteral(bool Bool) => new Monoliteral { Bool = Bool };
+        public static implicit operator Monoliteral(object[] NullArray) => new Monoliteral { NullArray = NullArray };
+    }
+
+    public partial struct MonotheisticallyElement
+    {
+        public MonotheisticallyClass? MonotheisticallyClass;
+        public object[]? NullArray;
+
+        public static implicit operator MonotheisticallyElement(MonotheisticallyClass MonotheisticallyClass) => new MonotheisticallyElement { MonotheisticallyClass = MonotheisticallyClass };
+        public static implicit operator MonotheisticallyElement(object[] NullArray) => new MonotheisticallyElement { NullArray = NullArray };
+    }
+
+    public partial struct Montage
+    {
+        public double? Double;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Montage(double Double) => new Montage { Double = Double };
+        public static implicit operator Montage(object[] NullArray) => new Montage { NullArray = NullArray };
+        public static implicit operator Montage(string String) => new Montage { String = String };
+    }
+
+    public partial struct Moralness
+    {
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Moralness(double Double) => new Moralness { Double = Double };
+        public static implicit operator Moralness(object[] NullArray) => new Moralness { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Double == null;
+    }
+
+    public partial struct Mulishly
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Mulishly(double Double) => new Mulishly { Double = Double };
+        public static implicit operator Mulishly(long[] IntegerArray) => new Mulishly { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Double == null;
+    }
+
+    public partial struct Myoscope
+    {
+        public bool? Bool;
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Myoscope(bool Bool) => new Myoscope { Bool = Bool };
+        public static implicit operator Myoscope(long Integer) => new Myoscope { Integer = Integer };
+        public static implicit operator Myoscope(object[] NullArray) => new Myoscope { NullArray = NullArray };
+    }
+
+    public partial struct Neuromastic
+    {
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Neuromastic(double Double) => new Neuromastic { Double = Double };
+        public static implicit operator Neuromastic(object[] NullArray) => new Neuromastic { NullArray = NullArray };
+    }
+
+    public partial struct Nonnervous
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Nonnervous(bool Bool) => new Nonnervous { Bool = Bool };
+        public static implicit operator Nonnervous(long Integer) => new Nonnervous { Integer = Integer };
+    }
+
+    public partial struct Nonvaluation
+    {
+        public bool? Bool;
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Nonvaluation(bool Bool) => new Nonvaluation { Bool = Bool };
+        public static implicit operator Nonvaluation(double Double) => new Nonvaluation { Double = Double };
+        public static implicit operator Nonvaluation(object[] NullArray) => new Nonvaluation { NullArray = NullArray };
+    }
+
+    public partial struct OccupationalistElement
+    {
+        public object[]? NullArray;
+        public OccupationalistClass? OccupationalistClass;
+
+        public static implicit operator OccupationalistElement(object[] NullArray) => new OccupationalistElement { NullArray = NullArray };
+        public static implicit operator OccupationalistElement(OccupationalistClass OccupationalistClass) => new OccupationalistElement { OccupationalistClass = OccupationalistClass };
+        public bool IsNull => NullArray == null && OccupationalistClass == null;
+    }
+
+    public partial struct OutrivalElement
+    {
+        public double? Double;
+        public OutrivalClass? OutrivalClass;
+
+        public static implicit operator OutrivalElement(double Double) => new OutrivalElement { Double = Double };
+        public static implicit operator OutrivalElement(OutrivalClass OutrivalClass) => new OutrivalElement { OutrivalClass = OutrivalClass };
+        public bool IsNull => OutrivalClass == null && Double == null;
+    }
+
+    public partial struct Paleographically
+    {
+        public double? Double;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Paleographically(double Double) => new Paleographically { Double = Double };
+        public static implicit operator Paleographically(Dictionary<string, long?> UnionMap) => new Paleographically { UnionMap = UnionMap };
+    }
+
+    public partial struct Pamphletwise
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Pamphletwise(long Integer) => new Pamphletwise { Integer = Integer };
+        public static implicit operator Pamphletwise(Dictionary<string, long> IntegerMap) => new Pamphletwise { IntegerMap = IntegerMap };
+        public static implicit operator Pamphletwise(string String) => new Pamphletwise { String = String };
+    }
+
+    public partial struct Pediatric
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Pediatric(bool Bool) => new Pediatric { Bool = Bool };
+        public static implicit operator Pediatric(double Double) => new Pediatric { Double = Double };
+        public bool IsNull => Bool == null && Double == null;
+    }
+
+    public partial struct PiaculumElement
+    {
+        public double? Double;
+        public PiaculumClass? PiaculumClass;
+
+        public static implicit operator PiaculumElement(double Double) => new PiaculumElement { Double = Double };
+        public static implicit operator PiaculumElement(PiaculumClass PiaculumClass) => new PiaculumElement { PiaculumClass = PiaculumClass };
+    }
+
+    public partial struct Piccadilly
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Piccadilly(double Double) => new Piccadilly { Double = Double };
+        public static implicit operator Piccadilly(string String) => new Piccadilly { String = String };
+        public bool IsNull => Double == null && String == null;
+    }
+
+    public partial struct Piffler
+    {
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+
+        public static implicit operator Piffler(MonaziteClass MonaziteClass) => new Piffler { MonaziteClass = MonaziteClass };
+        public static implicit operator Piffler(object[] NullArray) => new Piffler { NullArray = NullArray };
+    }
+
+    public partial struct Pithful
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Pithful(bool Bool) => new Pithful { Bool = Bool };
+        public static implicit operator Pithful(long Integer) => new Pithful { Integer = Integer };
+        public bool IsNull => Bool == null && Integer == null;
+    }
+
+    public partial struct Placuntiti
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Placuntiti(long Integer) => new Placuntiti { Integer = Integer };
+        public static implicit operator Placuntiti(Dictionary<string, long> IntegerMap) => new Placuntiti { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Plectopterous
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Plectopterous(double Double) => new Plectopterous { Double = Double };
+        public static implicit operator Plectopterous(Dictionary<string, long> IntegerMap) => new Plectopterous { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Poliorcetic
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Poliorcetic(bool Bool) => new Poliorcetic { Bool = Bool };
+        public static implicit operator Poliorcetic(MonaziteClass MonaziteClass) => new Poliorcetic { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Poormaster
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Poormaster(long[] IntegerArray) => new Poormaster { IntegerArray = IntegerArray };
+        public static implicit operator Poormaster(Dictionary<string, long> IntegerMap) => new Poormaster { IntegerMap = IntegerMap };
+        public bool IsNull => IntegerArray == null && IntegerMap == null;
+    }
+
+    public partial struct PotwhiskyElement
+    {
+        public long? Integer;
+        public PotwhiskyClass? PotwhiskyClass;
+
+        public static implicit operator PotwhiskyElement(long Integer) => new PotwhiskyElement { Integer = Integer };
+        public static implicit operator PotwhiskyElement(PotwhiskyClass PotwhiskyClass) => new PotwhiskyElement { PotwhiskyClass = PotwhiskyClass };
+        public bool IsNull => PotwhiskyClass == null && Integer == null;
+    }
+
+    public partial struct Practicalizer
+    {
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Practicalizer(MonaziteClass MonaziteClass) => new Practicalizer { MonaziteClass = MonaziteClass };
+        public static implicit operator Practicalizer(object[] NullArray) => new Practicalizer { NullArray = NullArray };
+        public static implicit operator Practicalizer(string String) => new Practicalizer { String = String };
+    }
+
+    public partial struct PrefreshmanElement
+    {
+        public object[]? NullArray;
+        public PrefreshmanClass? PrefreshmanClass;
+        public string? String;
+
+        public static implicit operator PrefreshmanElement(object[] NullArray) => new PrefreshmanElement { NullArray = NullArray };
+        public static implicit operator PrefreshmanElement(PrefreshmanClass PrefreshmanClass) => new PrefreshmanElement { PrefreshmanClass = PrefreshmanClass };
+        public static implicit operator PrefreshmanElement(string String) => new PrefreshmanElement { String = String };
+    }
+
+    public partial struct Prehensility
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+
+        public static implicit operator Prehensility(bool Bool) => new Prehensility { Bool = Bool };
+        public static implicit operator Prehensility(MonaziteClass MonaziteClass) => new Prehensility { MonaziteClass = MonaziteClass };
+        public static implicit operator Prehensility(object[] NullArray) => new Prehensility { NullArray = NullArray };
+    }
+
+    public partial struct Prevoidance
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Prevoidance(long Integer) => new Prevoidance { Integer = Integer };
+        public static implicit operator Prevoidance(long[] IntegerArray) => new Prevoidance { IntegerArray = IntegerArray };
+        public static implicit operator Prevoidance(MonaziteClass MonaziteClass) => new Prevoidance { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Protext
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Protext(bool Bool) => new Protext { Bool = Bool };
+        public static implicit operator Protext(long[] IntegerArray) => new Protext { IntegerArray = IntegerArray };
+        public static implicit operator Protext(MonaziteClass MonaziteClass) => new Protext { MonaziteClass = MonaziteClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                JurorElementConverter.Singleton,
+                KongoniConverter.Singleton,
+                LadronismElementConverter.Singleton,
+                LandlubberlyElementConverter.Singleton,
+                ListenerConverter.Singleton,
+                LupusElementConverter.Singleton,
+                MonaziteElementConverter.Singleton,
+                MonoliteralConverter.Singleton,
+                MonotheisticallyElementConverter.Singleton,
+                MontageConverter.Singleton,
+                MoralnessConverter.Singleton,
+                MulishlyConverter.Singleton,
+                MyoscopeConverter.Singleton,
+                NeuromasticConverter.Singleton,
+                NonnervousConverter.Singleton,
+                NonvaluationConverter.Singleton,
+                OccupationalistElementConverter.Singleton,
+                OutrivalElementConverter.Singleton,
+                PaleographicallyConverter.Singleton,
+                PamphletwiseConverter.Singleton,
+                PediatricConverter.Singleton,
+                PiaculumElementConverter.Singleton,
+                PiccadillyConverter.Singleton,
+                PifflerConverter.Singleton,
+                PithfulConverter.Singleton,
+                PlacuntitiConverter.Singleton,
+                PlectopterousConverter.Singleton,
+                PoliorceticConverter.Singleton,
+                PoormasterConverter.Singleton,
+                PotwhiskyElementConverter.Singleton,
+                PracticalizerConverter.Singleton,
+                PrefreshmanElementConverter.Singleton,
+                PrehensilityConverter.Singleton,
+                PrevoidanceConverter.Singleton,
+                ProtextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class JurorElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(JurorElement) || t == typeof(JurorElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new JurorElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<JurorClass>(reader);
+                    return new JurorElement { JurorClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type JurorElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (JurorElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.JurorClass != null)
+            {
+                serializer.Serialize(writer, value.JurorClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type JurorElement");
+        }
+
+        public static readonly JurorElementConverter Singleton = new JurorElementConverter();
+    }
+
+    internal class KongoniConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kongoni) || t == typeof(Kongoni?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Kongoni { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Kongoni { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Kongoni");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Kongoni)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Kongoni");
+        }
+
+        public static readonly KongoniConverter Singleton = new KongoniConverter();
+    }
+
+    internal class LadronismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LadronismElement) || t == typeof(LadronismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new LadronismElement { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LadronismElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LadronismClass>(reader);
+                    return new LadronismElement { LadronismClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LadronismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LadronismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LadronismClass != null)
+            {
+                serializer.Serialize(writer, value.LadronismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LadronismElement");
+        }
+
+        public static readonly LadronismElementConverter Singleton = new LadronismElementConverter();
+    }
+
+    internal class LandlubberlyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LandlubberlyElement) || t == typeof(LandlubberlyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LandlubberlyElement { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new LandlubberlyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LandlubberlyClass>(reader);
+                    return new LandlubberlyElement { LandlubberlyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LandlubberlyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LandlubberlyElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.LandlubberlyClass != null)
+            {
+                serializer.Serialize(writer, value.LandlubberlyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LandlubberlyElement");
+        }
+
+        public static readonly LandlubberlyElementConverter Singleton = new LandlubberlyElementConverter();
+    }
+
+    internal class ListenerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Listener) || t == typeof(Listener?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Listener { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Listener { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Listener");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Listener)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Listener");
+        }
+
+        public static readonly ListenerConverter Singleton = new ListenerConverter();
+    }
+
+    internal class LupusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LupusElement) || t == typeof(LupusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LupusElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LupusClass>(reader);
+                    return new LupusElement { LupusClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LupusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LupusElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.LupusClass != null)
+            {
+                serializer.Serialize(writer, value.LupusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LupusElement");
+        }
+
+        public static readonly LupusElementConverter Singleton = new LupusElementConverter();
+    }
+
+    internal class MonaziteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonaziteElement) || t == typeof(MonaziteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new MonaziteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new MonaziteElement { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type MonaziteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonaziteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonaziteElement");
+        }
+
+        public static readonly MonaziteElementConverter Singleton = new MonaziteElementConverter();
+    }
+
+    internal class MonoliteralConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Monoliteral) || t == typeof(Monoliteral?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Monoliteral { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Monoliteral { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Monoliteral");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Monoliteral)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Monoliteral");
+        }
+
+        public static readonly MonoliteralConverter Singleton = new MonoliteralConverter();
+    }
+
+    internal class MonotheisticallyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonotheisticallyElement) || t == typeof(MonotheisticallyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonotheisticallyClass>(reader);
+                    return new MonotheisticallyElement { MonotheisticallyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new MonotheisticallyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type MonotheisticallyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonotheisticallyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonotheisticallyClass != null)
+            {
+                serializer.Serialize(writer, value.MonotheisticallyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonotheisticallyElement");
+        }
+
+        public static readonly MonotheisticallyElementConverter Singleton = new MonotheisticallyElementConverter();
+    }
+
+    internal class MontageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Montage) || t == typeof(Montage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Montage { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Montage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Montage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Montage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Montage)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Montage");
+        }
+
+        public static readonly MontageConverter Singleton = new MontageConverter();
+    }
+
+    internal class MoralnessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Moralness) || t == typeof(Moralness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Moralness { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Moralness { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Moralness { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Moralness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Moralness)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Moralness");
+        }
+
+        public static readonly MoralnessConverter Singleton = new MoralnessConverter();
+    }
+
+    internal class MulishlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Mulishly) || t == typeof(Mulishly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Mulishly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Mulishly { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Mulishly { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Mulishly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Mulishly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Mulishly");
+        }
+
+        public static readonly MulishlyConverter Singleton = new MulishlyConverter();
+    }
+
+    internal class MyoscopeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Myoscope) || t == typeof(Myoscope?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Myoscope { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Myoscope { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Myoscope { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Myoscope");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Myoscope)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Myoscope");
+        }
+
+        public static readonly MyoscopeConverter Singleton = new MyoscopeConverter();
+    }
+
+    internal class NeuromasticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Neuromastic) || t == typeof(Neuromastic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Neuromastic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Neuromastic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Neuromastic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Neuromastic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Neuromastic");
+        }
+
+        public static readonly NeuromasticConverter Singleton = new NeuromasticConverter();
+    }
+
+    internal class NonnervousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonnervous) || t == typeof(Nonnervous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Nonnervous { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonnervous { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonnervous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonnervous)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonnervous");
+        }
+
+        public static readonly NonnervousConverter Singleton = new NonnervousConverter();
+    }
+
+    internal class NonvaluationConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonvaluation) || t == typeof(Nonvaluation?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Nonvaluation { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonvaluation { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Nonvaluation { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonvaluation");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonvaluation)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonvaluation");
+        }
+
+        public static readonly NonvaluationConverter Singleton = new NonvaluationConverter();
+    }
+
+    internal class OccupationalistElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OccupationalistElement) || t == typeof(OccupationalistElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OccupationalistElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OccupationalistClass>(reader);
+                    return new OccupationalistElement { OccupationalistClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new OccupationalistElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OccupationalistElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OccupationalistElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.OccupationalistClass != null)
+            {
+                serializer.Serialize(writer, value.OccupationalistClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OccupationalistElement");
+        }
+
+        public static readonly OccupationalistElementConverter Singleton = new OccupationalistElementConverter();
+    }
+
+    internal class OutrivalElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OutrivalElement) || t == typeof(OutrivalElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OutrivalElement { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new OutrivalElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OutrivalClass>(reader);
+                    return new OutrivalElement { OutrivalClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type OutrivalElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OutrivalElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OutrivalClass != null)
+            {
+                serializer.Serialize(writer, value.OutrivalClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OutrivalElement");
+        }
+
+        public static readonly OutrivalElementConverter Singleton = new OutrivalElementConverter();
+    }
+
+    internal class PaleographicallyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Paleographically) || t == typeof(Paleographically?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Paleographically { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Paleographically { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Paleographically");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Paleographically)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Paleographically");
+        }
+
+        public static readonly PaleographicallyConverter Singleton = new PaleographicallyConverter();
+    }
+
+    internal class PamphletwiseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pamphletwise) || t == typeof(Pamphletwise?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pamphletwise { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Pamphletwise { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Pamphletwise { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Pamphletwise");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pamphletwise)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pamphletwise");
+        }
+
+        public static readonly PamphletwiseConverter Singleton = new PamphletwiseConverter();
+    }
+
+    internal class PediatricConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pediatric) || t == typeof(Pediatric?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pediatric { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Pediatric { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pediatric { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pediatric");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pediatric)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pediatric");
+        }
+
+        public static readonly PediatricConverter Singleton = new PediatricConverter();
+    }
+
+    internal class PiaculumElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PiaculumElement) || t == typeof(PiaculumElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PiaculumElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PiaculumClass>(reader);
+                    return new PiaculumElement { PiaculumClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PiaculumElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PiaculumElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.PiaculumClass != null)
+            {
+                serializer.Serialize(writer, value.PiaculumClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PiaculumElement");
+        }
+
+        public static readonly PiaculumElementConverter Singleton = new PiaculumElementConverter();
+    }
+
+    internal class PiccadillyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piccadilly) || t == typeof(Piccadilly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Piccadilly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Piccadilly { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Piccadilly { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Piccadilly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piccadilly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piccadilly");
+        }
+
+        public static readonly PiccadillyConverter Singleton = new PiccadillyConverter();
+    }
+
+    internal class PifflerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piffler) || t == typeof(Piffler?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Piffler { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Piffler { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Piffler");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piffler)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piffler");
+        }
+
+        public static readonly PifflerConverter Singleton = new PifflerConverter();
+    }
+
+    internal class PithfulConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pithful) || t == typeof(Pithful?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pithful { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pithful { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pithful { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pithful");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pithful)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pithful");
+        }
+
+        public static readonly PithfulConverter Singleton = new PithfulConverter();
+    }
+
+    internal class PlacuntitiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Placuntiti) || t == typeof(Placuntiti?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Placuntiti { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Placuntiti { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Placuntiti");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Placuntiti)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Placuntiti");
+        }
+
+        public static readonly PlacuntitiConverter Singleton = new PlacuntitiConverter();
+    }
+
+    internal class PlectopterousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Plectopterous) || t == typeof(Plectopterous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Plectopterous { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Plectopterous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Plectopterous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Plectopterous)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Plectopterous");
+        }
+
+        public static readonly PlectopterousConverter Singleton = new PlectopterousConverter();
+    }
+
+    internal class PoliorceticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poliorcetic) || t == typeof(Poliorcetic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Poliorcetic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Poliorcetic { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Poliorcetic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poliorcetic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poliorcetic");
+        }
+
+        public static readonly PoliorceticConverter Singleton = new PoliorceticConverter();
+    }
+
+    internal class PoormasterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poormaster) || t == typeof(Poormaster?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Poormaster { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Poormaster { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Poormaster { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Poormaster");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poormaster)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poormaster");
+        }
+
+        public static readonly PoormasterConverter Singleton = new PoormasterConverter();
+    }
+
+    internal class PotwhiskyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PotwhiskyElement) || t == typeof(PotwhiskyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new PotwhiskyElement { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PotwhiskyElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PotwhiskyClass>(reader);
+                    return new PotwhiskyElement { PotwhiskyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PotwhiskyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PotwhiskyElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PotwhiskyClass != null)
+            {
+                serializer.Serialize(writer, value.PotwhiskyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PotwhiskyElement");
+        }
+
+        public static readonly PotwhiskyElementConverter Singleton = new PotwhiskyElementConverter();
+    }
+
+    internal class PracticalizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Practicalizer) || t == typeof(Practicalizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Practicalizer { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Practicalizer { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Practicalizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Practicalizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Practicalizer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Practicalizer");
+        }
+
+        public static readonly PracticalizerConverter Singleton = new PracticalizerConverter();
+    }
+
+    internal class PrefreshmanElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PrefreshmanElement) || t == typeof(PrefreshmanElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new PrefreshmanElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PrefreshmanClass>(reader);
+                    return new PrefreshmanElement { PrefreshmanClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new PrefreshmanElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PrefreshmanElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PrefreshmanElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.PrefreshmanClass != null)
+            {
+                serializer.Serialize(writer, value.PrefreshmanClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PrefreshmanElement");
+        }
+
+        public static readonly PrefreshmanElementConverter Singleton = new PrefreshmanElementConverter();
+    }
+
+    internal class PrehensilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prehensility) || t == typeof(Prehensility?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Prehensility { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prehensility { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Prehensility { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prehensility");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prehensility)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prehensility");
+        }
+
+        public static readonly PrehensilityConverter Singleton = new PrehensilityConverter();
+    }
+
+    internal class PrevoidanceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prevoidance) || t == typeof(Prevoidance?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Prevoidance { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prevoidance { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Prevoidance { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prevoidance");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prevoidance)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prevoidance");
+        }
+
+        public static readonly PrevoidanceConverter Singleton = new PrevoidanceConverter();
+    }
+
+    internal class ProtextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protext) || t == typeof(Protext?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Protext { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Protext { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Protext { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protext");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protext)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protext");
+        }
+
+        public static readonly ProtextConverter Singleton = new ProtextConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations3.json/number-type-decimal--20a123601b5a/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations3.json/number-type-decimal--20a123601b5a/QuickType.cs
new file mode 100644
index 0000000..1ab48fc
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations3.json/number-type-decimal--20a123601b5a/QuickType.cs
@@ -0,0 +1,2957 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("juror", Required = Required.Always)]
+        public JurorElement[] Juror { get; set; }
+
+        [JsonProperty("kongoni", Required = Required.Always)]
+        public Kongoni[] Kongoni { get; set; }
+
+        [JsonProperty("ladronism", Required = Required.Always)]
+        public LadronismElement[] Ladronism { get; set; }
+
+        [JsonProperty("landlubberly", Required = Required.Always)]
+        public LandlubberlyElement[] Landlubberly { get; set; }
+
+        [JsonProperty("listener", Required = Required.Always)]
+        public Listener[] Listener { get; set; }
+
+        [JsonProperty("lupus", Required = Required.Always)]
+        public LupusElement[] Lupus { get; set; }
+
+        [JsonProperty("maslin", Required = Required.Always)]
+        public Maslin[] Maslin { get; set; }
+
+        [JsonProperty("monazite", Required = Required.Always)]
+        public MonaziteElement[] Monazite { get; set; }
+
+        [JsonProperty("monoliteral", Required = Required.Always)]
+        public Monoliteral[] Monoliteral { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.Always)]
+        public MonotheisticallyElement[] Monotheistically { get; set; }
+
+        [JsonProperty("montage", Required = Required.Always)]
+        public Montage[] Montage { get; set; }
+
+        [JsonProperty("moralness", Required = Required.Always)]
+        public Moralness[] Moralness { get; set; }
+
+        [JsonProperty("mowra", Required = Required.Always)]
+        public MonaziteClass?[] Mowra { get; set; }
+
+        [JsonProperty("mulishly", Required = Required.Always)]
+        public Mulishly[] Mulishly { get; set; }
+
+        [JsonProperty("myoscope", Required = Required.Always)]
+        public Myoscope[] Myoscope { get; set; }
+
+        [JsonProperty("nach", Required = Required.Always)]
+        public long?[]?[] Nach { get; set; }
+
+        [JsonProperty("neuromastic", Required = Required.Always)]
+        public Neuromastic[] Neuromastic { get; set; }
+
+        [JsonProperty("noncontributing", Required = Required.Always)]
+        public Noncontributing[] Noncontributing { get; set; }
+
+        [JsonProperty("nonnervous", Required = Required.Always)]
+        public Nonnervous[] Nonnervous { get; set; }
+
+        [JsonProperty("nonvaluation", Required = Required.Always)]
+        public Nonvaluation[] Nonvaluation { get; set; }
+
+        [JsonProperty("occupationalist", Required = Required.Always)]
+        public OccupationalistElement[] Occupationalist { get; set; }
+
+        [JsonProperty("outrival", Required = Required.Always)]
+        public OutrivalElement[] Outrival { get; set; }
+
+        [JsonProperty("paleographically", Required = Required.Always)]
+        public Paleographically[] Paleographically { get; set; }
+
+        [JsonProperty("pamphletwise", Required = Required.Always)]
+        public Pamphletwise[] Pamphletwise { get; set; }
+
+        [JsonProperty("pediatrics", Required = Required.Always)]
+        public Pediatric[] Pediatrics { get; set; }
+
+        [JsonProperty("perceptive", Required = Required.Always)]
+        public bool[] Perceptive { get; set; }
+
+        [JsonProperty("piaculum", Required = Required.Always)]
+        public PiaculumElement[] Piaculum { get; set; }
+
+        [JsonProperty("piccadilly", Required = Required.Always)]
+        public Piccadilly[] Piccadilly { get; set; }
+
+        [JsonProperty("piffler", Required = Required.Always)]
+        public Piffler[] Piffler { get; set; }
+
+        [JsonProperty("pithful", Required = Required.Always)]
+        public Pithful[] Pithful { get; set; }
+
+        [JsonProperty("placuntitis", Required = Required.Always)]
+        public Placuntiti[] Placuntitis { get; set; }
+
+        [JsonProperty("plectopterous", Required = Required.Always)]
+        public Plectopterous[] Plectopterous { get; set; }
+
+        [JsonProperty("pneumocele", Required = Required.Always)]
+        public Pneumocele?[] Pneumocele { get; set; }
+
+        [JsonProperty("poliorcetic", Required = Required.Always)]
+        public Poliorcetic[] Poliorcetic { get; set; }
+
+        [JsonProperty("poormaster", Required = Required.Always)]
+        public Poormaster[] Poormaster { get; set; }
+
+        [JsonProperty("potwhisky", Required = Required.Always)]
+        public PotwhiskyElement[] Potwhisky { get; set; }
+
+        [JsonProperty("practicalizer", Required = Required.Always)]
+        public Practicalizer[] Practicalizer { get; set; }
+
+        [JsonProperty("prefreshman", Required = Required.Always)]
+        public PrefreshmanElement[] Prefreshman { get; set; }
+
+        [JsonProperty("prehensility", Required = Required.Always)]
+        public Prehensility[] Prehensility { get; set; }
+
+        [JsonProperty("prevoidance", Required = Required.Always)]
+        public Prevoidance[] Prevoidance { get; set; }
+
+        [JsonProperty("probant", Required = Required.Always)]
+        public Dictionary<string, long?>[] Probant { get; set; }
+
+        [JsonProperty("protext", Required = Required.Always)]
+        public Protext[] Protext { get; set; }
+    }
+
+    public partial record JurorClass
+    {
+        [JsonProperty("adipsy", Required = Required.AllowNull)]
+        public object Adipsy { get; set; }
+
+        [JsonProperty("auxiliator", Required = Required.AllowNull)]
+        public object Auxiliator { get; set; }
+
+        [JsonProperty("benda", Required = Required.AllowNull)]
+        public object Benda { get; set; }
+
+        [JsonProperty("benjamin", Required = Required.AllowNull)]
+        public object Benjamin { get; set; }
+
+        [JsonProperty("brandling", Required = Required.AllowNull)]
+        public object Brandling { get; set; }
+
+        [JsonProperty("epicurishly", Required = Required.AllowNull)]
+        public object Epicurishly { get; set; }
+
+        [JsonProperty("eremochaetous", Required = Required.AllowNull)]
+        public object Eremochaetous { get; set; }
+
+        [JsonProperty("marten", Required = Required.AllowNull)]
+        public object Marten { get; set; }
+
+        [JsonProperty("monocline", Required = Required.AllowNull)]
+        public object Monocline { get; set; }
+
+        [JsonProperty("Olea", Required = Required.AllowNull)]
+        public object Olea { get; set; }
+
+        [JsonProperty("palgat", Required = Required.AllowNull)]
+        public object Palgat { get; set; }
+
+        [JsonProperty("pennyworth", Required = Required.AllowNull)]
+        public object Pennyworth { get; set; }
+
+        [JsonProperty("pioury", Required = Required.AllowNull)]
+        public object Pioury { get; set; }
+
+        [JsonProperty("pragmatistic", Required = Required.AllowNull)]
+        public object Pragmatistic { get; set; }
+
+        [JsonProperty("stylelessness", Required = Required.AllowNull)]
+        public object Stylelessness { get; set; }
+
+        [JsonProperty("systematical", Required = Required.AllowNull)]
+        public object Systematical { get; set; }
+
+        [JsonProperty("thready", Required = Required.AllowNull)]
+        public object Thready { get; set; }
+
+        [JsonProperty("uncontemporary", Required = Required.AllowNull)]
+        public object Uncontemporary { get; set; }
+
+        [JsonProperty("uncouched", Required = Required.AllowNull)]
+        public object Uncouched { get; set; }
+
+        [JsonProperty("uninhabitedness", Required = Required.AllowNull)]
+        public object Uninhabitedness { get; set; }
+    }
+
+    public partial record LadronismClass
+    {
+        [JsonProperty("acclaimer", Required = Required.AllowNull)]
+        public object Acclaimer { get; set; }
+
+        [JsonProperty("achree", Required = Required.AllowNull)]
+        public object Achree { get; set; }
+
+        [JsonProperty("base", Required = Required.AllowNull)]
+        public object Base { get; set; }
+
+        [JsonProperty("conundrumize", Required = Required.AllowNull)]
+        public object Conundrumize { get; set; }
+
+        [JsonProperty("degerminator", Required = Required.AllowNull)]
+        public object Degerminator { get; set; }
+
+        [JsonProperty("describable", Required = Required.AllowNull)]
+        public object Describable { get; set; }
+
+        [JsonProperty("exasperatedly", Required = Required.AllowNull)]
+        public object Exasperatedly { get; set; }
+
+        [JsonProperty("heroine", Required = Required.AllowNull)]
+        public object Heroine { get; set; }
+
+        [JsonProperty("indazin", Required = Required.AllowNull)]
+        public object Indazin { get; set; }
+
+        [JsonProperty("luteous", Required = Required.AllowNull)]
+        public object Luteous { get; set; }
+
+        [JsonProperty("papular", Required = Required.AllowNull)]
+        public object Papular { get; set; }
+
+        [JsonProperty("pritch", Required = Required.AllowNull)]
+        public object Pritch { get; set; }
+
+        [JsonProperty("Prodenia", Required = Required.AllowNull)]
+        public object Prodenia { get; set; }
+
+        [JsonProperty("seege", Required = Required.AllowNull)]
+        public object Seege { get; set; }
+
+        [JsonProperty("shopgirl", Required = Required.AllowNull)]
+        public object Shopgirl { get; set; }
+
+        [JsonProperty("tragedietta", Required = Required.AllowNull)]
+        public object Tragedietta { get; set; }
+
+        [JsonProperty("unsparse", Required = Required.AllowNull)]
+        public object Unsparse { get; set; }
+
+        [JsonProperty("uplook", Required = Required.AllowNull)]
+        public object Uplook { get; set; }
+
+        [JsonProperty("vermiformis", Required = Required.AllowNull)]
+        public object Vermiformis { get; set; }
+
+        [JsonProperty("whafabout", Required = Required.AllowNull)]
+        public object Whafabout { get; set; }
+    }
+
+    public partial record LandlubberlyClass
+    {
+        [JsonProperty("acropoleis", Required = Required.AllowNull)]
+        public object Acropoleis { get; set; }
+
+        [JsonProperty("aminate", Required = Required.AllowNull)]
+        public object Aminate { get; set; }
+
+        [JsonProperty("Amyraldism", Required = Required.AllowNull)]
+        public object Amyraldism { get; set; }
+
+        [JsonProperty("bipenniform", Required = Required.AllowNull)]
+        public object Bipenniform { get; set; }
+
+        [JsonProperty("bugre", Required = Required.AllowNull)]
+        public object Bugre { get; set; }
+
+        [JsonProperty("calycule", Required = Required.AllowNull)]
+        public object Calycule { get; set; }
+
+        [JsonProperty("caoutchouc", Required = Required.AllowNull)]
+        public object Caoutchouc { get; set; }
+
+        [JsonProperty("disprover", Required = Required.AllowNull)]
+        public object Disprover { get; set; }
+
+        [JsonProperty("fitroot", Required = Required.AllowNull)]
+        public object Fitroot { get; set; }
+
+        [JsonProperty("fulgently", Required = Required.AllowNull)]
+        public object Fulgently { get; set; }
+
+        [JsonProperty("kickup", Required = Required.AllowNull)]
+        public object Kickup { get; set; }
+
+        [JsonProperty("laevoversion", Required = Required.AllowNull)]
+        public object Laevoversion { get; set; }
+
+        [JsonProperty("moter", Required = Required.AllowNull)]
+        public object Moter { get; set; }
+
+        [JsonProperty("objectivity", Required = Required.AllowNull)]
+        public object Objectivity { get; set; }
+
+        [JsonProperty("posterity", Required = Required.AllowNull)]
+        public object Posterity { get; set; }
+
+        [JsonProperty("postnuptial", Required = Required.AllowNull)]
+        public object Postnuptial { get; set; }
+
+        [JsonProperty("precedentary", Required = Required.AllowNull)]
+        public object Precedentary { get; set; }
+
+        [JsonProperty("saddling", Required = Required.AllowNull)]
+        public object Saddling { get; set; }
+
+        [JsonProperty("subcurrent", Required = Required.AllowNull)]
+        public object Subcurrent { get; set; }
+
+        [JsonProperty("unrecriminative", Required = Required.AllowNull)]
+        public object Unrecriminative { get; set; }
+    }
+
+    public partial record LupusClass
+    {
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("Chlorioninae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorioninae { get; set; }
+
+        [JsonProperty("Corvinae", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Corvinae { get; set; }
+
+        [JsonProperty("Crassina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crassina { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("exiguity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Exiguity { get; set; }
+
+        [JsonProperty("farcist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Farcist { get; set; }
+
+        [JsonProperty("holographical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Holographical { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("ichthyophagan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ichthyophagan { get; set; }
+
+        [JsonProperty("implacable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Implacable { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("outshiner", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Outshiner { get; set; }
+
+        [JsonProperty("overweather", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overweather { get; set; }
+
+        [JsonProperty("protonegroid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Protonegroid { get; set; }
+
+        [JsonProperty("shallowish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Shallowish { get; set; }
+
+        [JsonProperty("snoke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snoke { get; set; }
+
+        [JsonProperty("snout", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Snout { get; set; }
+
+        [JsonProperty("surveillance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Surveillance { get; set; }
+
+        [JsonProperty("threshingtime", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Threshingtime { get; set; }
+
+        [JsonProperty("Thysanocarpus", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thysanocarpus { get; set; }
+
+        [JsonProperty("unsignificantly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsignificantly { get; set; }
+
+        [JsonProperty("unsnap", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsnap { get; set; }
+
+        [JsonProperty("vendible", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Vendible { get; set; }
+    }
+
+    public partial record Maslin
+    {
+        [JsonProperty("Alicant", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alicant { get; set; }
+
+        [JsonProperty("antiatonement")]
+        public object? Antiatonement { get; set; }
+
+        [JsonProperty("anticorrosive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Anticorrosive { get; set; }
+
+        [JsonProperty("aphidozer")]
+        public object? Aphidozer { get; set; }
+
+        [JsonProperty("Bakuninist")]
+        public object? Bakuninist { get; set; }
+
+        [JsonProperty("be", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Be { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chub", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chub { get; set; }
+
+        [JsonProperty("cuprosilicon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Cuprosilicon { get; set; }
+
+        [JsonProperty("curtailedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Curtailedly { get; set; }
+
+        [JsonProperty("dellenite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dellenite { get; set; }
+
+        [JsonProperty("Dimitry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Dimitry { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("edifying")]
+        public object? Edifying { get; set; }
+
+        [JsonProperty("ethmoiditis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ethmoiditis { get; set; }
+
+        [JsonProperty("gastralgy")]
+        public object? Gastralgy { get; set; }
+
+        [JsonProperty("goatherd", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Goatherd { get; set; }
+
+        [JsonProperty("hammerdress", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hammerdress { get; set; }
+
+        [JsonProperty("hangfire")]
+        public object? Hangfire { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lacunosity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lacunosity { get; set; }
+
+        [JsonProperty("longiloquence")]
+        public object? Longiloquence { get; set; }
+
+        [JsonProperty("mameliere", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mameliere { get; set; }
+
+        [JsonProperty("motherless")]
+        public object? Motherless { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("noncorrodible")]
+        public object? Noncorrodible { get; set; }
+
+        [JsonProperty("nonsensicality")]
+        public object? Nonsensicality { get; set; }
+
+        [JsonProperty("oafishly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Oafishly { get; set; }
+
+        [JsonProperty("pfund")]
+        public object? Pfund { get; set; }
+
+        [JsonProperty("preadvisory")]
+        public object? Preadvisory { get; set; }
+
+        [JsonProperty("retroflexed")]
+        public object? Retroflexed { get; set; }
+
+        [JsonProperty("saccharulmic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Saccharulmic { get; set; }
+
+        [JsonProperty("scowlful", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scowlful { get; set; }
+
+        [JsonProperty("secluded")]
+        public object? Secluded { get; set; }
+
+        [JsonProperty("slackage")]
+        public object? Slackage { get; set; }
+
+        [JsonProperty("sphaeridial", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sphaeridial { get; set; }
+
+        [JsonProperty("spondulics")]
+        public object? Spondulics { get; set; }
+
+        [JsonProperty("subsecive", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subsecive { get; set; }
+
+        [JsonProperty("swellmobsman")]
+        public object? Swellmobsman { get; set; }
+
+        [JsonProperty("trachyglossate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trachyglossate { get; set; }
+
+        [JsonProperty("trialogue")]
+        public object? Trialogue { get; set; }
+
+        [JsonProperty("unassuaged", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unassuaged { get; set; }
+
+        [JsonProperty("ungross")]
+        public object? Ungross { get; set; }
+
+        [JsonProperty("unjudiciously")]
+        public object? Unjudiciously { get; set; }
+    }
+
+    public partial record MonaziteClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public decimal Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record MonotheisticallyClass
+    {
+        [JsonProperty("blaspheme")]
+        public object? Blaspheme { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("celiosalpingectomy")]
+        public object? Celiosalpingectomy { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("consummativeness")]
+        public object? Consummativeness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("egestive")]
+        public object? Egestive { get; set; }
+
+        [JsonProperty("enchylema")]
+        public object? Enchylema { get; set; }
+
+        [JsonProperty("gasconade")]
+        public object? Gasconade { get; set; }
+
+        [JsonProperty("holidayer")]
+        public object? Holidayer { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("intuitionalism")]
+        public object? Intuitionalism { get; set; }
+
+        [JsonProperty("lophiostomate")]
+        public object? Lophiostomate { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("nonvolition")]
+        public object? Nonvolition { get; set; }
+
+        [JsonProperty("palatableness")]
+        public object? Palatableness { get; set; }
+
+        [JsonProperty("pimpery")]
+        public object? Pimpery { get; set; }
+
+        [JsonProperty("previolation")]
+        public object? Previolation { get; set; }
+
+        [JsonProperty("reconveyance")]
+        public object? Reconveyance { get; set; }
+
+        [JsonProperty("registership")]
+        public object? Registership { get; set; }
+
+        [JsonProperty("rhyacolite")]
+        public object? Rhyacolite { get; set; }
+
+        [JsonProperty("smithereens")]
+        public object? Smithereens { get; set; }
+
+        [JsonProperty("superedification")]
+        public object? Superedification { get; set; }
+
+        [JsonProperty("trust")]
+        public object? Trust { get; set; }
+
+        [JsonProperty("whitestone")]
+        public object? Whitestone { get; set; }
+    }
+
+    public partial record Noncontributing
+    {
+        [JsonProperty("estevin", Required = Required.Always)]
+        public string Estevin { get; set; }
+
+        [JsonProperty("jolterhead", Required = Required.Always)]
+        public decimal Jolterhead { get; set; }
+
+        [JsonProperty("sauternes", Required = Required.Always)]
+        public long Sauternes { get; set; }
+
+        [JsonProperty("sparsely", Required = Required.Always)]
+        public bool Sparsely { get; set; }
+
+        [JsonProperty("unrequested", Required = Required.AllowNull)]
+        public object Unrequested { get; set; }
+    }
+
+    public partial record OccupationalistClass
+    {
+        [JsonProperty("beholdable", Required = Required.AllowNull)]
+        public object Beholdable { get; set; }
+
+        [JsonProperty("brotuliform", Required = Required.AllowNull)]
+        public object Brotuliform { get; set; }
+
+        [JsonProperty("Chimakum", Required = Required.AllowNull)]
+        public object Chimakum { get; set; }
+
+        [JsonProperty("doodler", Required = Required.AllowNull)]
+        public object Doodler { get; set; }
+
+        [JsonProperty("emulsin", Required = Required.AllowNull)]
+        public object Emulsin { get; set; }
+
+        [JsonProperty("Fin", Required = Required.AllowNull)]
+        public object Fin { get; set; }
+
+        [JsonProperty("flourishing", Required = Required.AllowNull)]
+        public object Flourishing { get; set; }
+
+        [JsonProperty("flueless", Required = Required.AllowNull)]
+        public object Flueless { get; set; }
+
+        [JsonProperty("furtively", Required = Required.AllowNull)]
+        public object Furtively { get; set; }
+
+        [JsonProperty("gritter", Required = Required.AllowNull)]
+        public object Gritter { get; set; }
+
+        [JsonProperty("interwish", Required = Required.AllowNull)]
+        public object Interwish { get; set; }
+
+        [JsonProperty("monoxylic", Required = Required.AllowNull)]
+        public object Monoxylic { get; set; }
+
+        [JsonProperty("myristic", Required = Required.AllowNull)]
+        public object Myristic { get; set; }
+
+        [JsonProperty("nightwear", Required = Required.AllowNull)]
+        public object Nightwear { get; set; }
+
+        [JsonProperty("peruser", Required = Required.AllowNull)]
+        public object Peruser { get; set; }
+
+        [JsonProperty("theoastrological", Required = Required.AllowNull)]
+        public object Theoastrological { get; set; }
+
+        [JsonProperty("thumby", Required = Required.AllowNull)]
+        public object Thumby { get; set; }
+
+        [JsonProperty("tingitid", Required = Required.AllowNull)]
+        public object Tingitid { get; set; }
+
+        [JsonProperty("trailless", Required = Required.AllowNull)]
+        public object Trailless { get; set; }
+
+        [JsonProperty("unpocketed", Required = Required.AllowNull)]
+        public object Unpocketed { get; set; }
+    }
+
+    public partial record OutrivalClass
+    {
+        [JsonProperty("adroitly", Required = Required.AllowNull)]
+        public object Adroitly { get; set; }
+
+        [JsonProperty("bridehood", Required = Required.AllowNull)]
+        public object Bridehood { get; set; }
+
+        [JsonProperty("Castoroides", Required = Required.AllowNull)]
+        public object Castoroides { get; set; }
+
+        [JsonProperty("Czechoslovak", Required = Required.AllowNull)]
+        public object Czechoslovak { get; set; }
+
+        [JsonProperty("diagenesis", Required = Required.AllowNull)]
+        public object Diagenesis { get; set; }
+
+        [JsonProperty("dihexahedron", Required = Required.AllowNull)]
+        public object Dihexahedron { get; set; }
+
+        [JsonProperty("dopester", Required = Required.AllowNull)]
+        public object Dopester { get; set; }
+
+        [JsonProperty("eumerism", Required = Required.AllowNull)]
+        public object Eumerism { get; set; }
+
+        [JsonProperty("flyness", Required = Required.AllowNull)]
+        public object Flyness { get; set; }
+
+        [JsonProperty("fouler", Required = Required.AllowNull)]
+        public object Fouler { get; set; }
+
+        [JsonProperty("laudanosine", Required = Required.AllowNull)]
+        public object Laudanosine { get; set; }
+
+        [JsonProperty("Lingulidae", Required = Required.AllowNull)]
+        public object Lingulidae { get; set; }
+
+        [JsonProperty("minutary", Required = Required.AllowNull)]
+        public object Minutary { get; set; }
+
+        [JsonProperty("mitra", Required = Required.AllowNull)]
+        public object Mitra { get; set; }
+
+        [JsonProperty("opisthorchiasis", Required = Required.AllowNull)]
+        public object Opisthorchiasis { get; set; }
+
+        [JsonProperty("pensively", Required = Required.AllowNull)]
+        public object Pensively { get; set; }
+
+        [JsonProperty("pubigerous", Required = Required.AllowNull)]
+        public object Pubigerous { get; set; }
+
+        [JsonProperty("rebellious", Required = Required.AllowNull)]
+        public object Rebellious { get; set; }
+
+        [JsonProperty("recodify", Required = Required.AllowNull)]
+        public object Recodify { get; set; }
+
+        [JsonProperty("unpaced", Required = Required.AllowNull)]
+        public object Unpaced { get; set; }
+    }
+
+    public partial record PiaculumClass
+    {
+        [JsonProperty("alada", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Alada { get; set; }
+
+        [JsonProperty("amphistomous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Amphistomous { get; set; }
+
+        [JsonProperty("boysenberry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Boysenberry { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("decardinalize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Decardinalize { get; set; }
+
+        [JsonProperty("discouragement", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Discouragement { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("doitrified", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Doitrified { get; set; }
+
+        [JsonProperty("hexaspermous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hexaspermous { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("insinking", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Insinking { get; set; }
+
+        [JsonProperty("loathfulness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loathfulness { get; set; }
+
+        [JsonProperty("miasmatical", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Miasmatical { get; set; }
+
+        [JsonProperty("neurofibril", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Neurofibril { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("phonendoscope", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Phonendoscope { get; set; }
+
+        [JsonProperty("pilferment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Pilferment { get; set; }
+
+        [JsonProperty("predismissory", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Predismissory { get; set; }
+
+        [JsonProperty("preinscription", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Preinscription { get; set; }
+
+        [JsonProperty("quotative", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quotative { get; set; }
+
+        [JsonProperty("sienna", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sienna { get; set; }
+
+        [JsonProperty("thorax", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Thorax { get; set; }
+
+        [JsonProperty("yachting", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yachting { get; set; }
+
+        [JsonProperty("Zipper", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Zipper { get; set; }
+    }
+
+    public partial record Pneumocele
+    {
+        [JsonProperty("Carbonarism")]
+        public object? Carbonarism { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("cineolic")]
+        public object? Cineolic { get; set; }
+
+        [JsonProperty("cobbly")]
+        public object? Cobbly { get; set; }
+
+        [JsonProperty("conchyliferous")]
+        public object? Conchyliferous { get; set; }
+
+        [JsonProperty("congregation")]
+        public object? Congregation { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enterotomy")]
+        public object? Enterotomy { get; set; }
+
+        [JsonProperty("entophytal")]
+        public object? Entophytal { get; set; }
+
+        [JsonProperty("fewtrils")]
+        public object? Fewtrils { get; set; }
+
+        [JsonProperty("herem")]
+        public object? Herem { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("Koniga")]
+        public object? Koniga { get; set; }
+
+        [JsonProperty("meticulosity")]
+        public object? Meticulosity { get; set; }
+
+        [JsonProperty("Micky")]
+        public object? Micky { get; set; }
+
+        [JsonProperty("mismarriage")]
+        public object? Mismarriage { get; set; }
+
+        [JsonProperty("neurotrophic")]
+        public object? Neurotrophic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("persuasively")]
+        public object? Persuasively { get; set; }
+
+        [JsonProperty("replaceable")]
+        public object? Replaceable { get; set; }
+
+        [JsonProperty("silex")]
+        public object? Silex { get; set; }
+
+        [JsonProperty("taillight")]
+        public object? Taillight { get; set; }
+
+        [JsonProperty("unjealous")]
+        public object? Unjealous { get; set; }
+
+        [JsonProperty("visitorial")]
+        public object? Visitorial { get; set; }
+    }
+
+    public partial record PotwhiskyClass
+    {
+        [JsonProperty("arciform", Required = Required.AllowNull)]
+        public object Arciform { get; set; }
+
+        [JsonProperty("cresolin", Required = Required.AllowNull)]
+        public object Cresolin { get; set; }
+
+        [JsonProperty("disheartener", Required = Required.AllowNull)]
+        public object Disheartener { get; set; }
+
+        [JsonProperty("disproportionable", Required = Required.AllowNull)]
+        public object Disproportionable { get; set; }
+
+        [JsonProperty("Euchorda", Required = Required.AllowNull)]
+        public object Euchorda { get; set; }
+
+        [JsonProperty("ferryway", Required = Required.AllowNull)]
+        public object Ferryway { get; set; }
+
+        [JsonProperty("filamentiferous", Required = Required.AllowNull)]
+        public object Filamentiferous { get; set; }
+
+        [JsonProperty("flemish", Required = Required.AllowNull)]
+        public object Flemish { get; set; }
+
+        [JsonProperty("forgainst", Required = Required.AllowNull)]
+        public object Forgainst { get; set; }
+
+        [JsonProperty("grainering", Required = Required.AllowNull)]
+        public object Grainering { get; set; }
+
+        [JsonProperty("irrevoluble", Required = Required.AllowNull)]
+        public object Irrevoluble { get; set; }
+
+        [JsonProperty("kindredship", Required = Required.AllowNull)]
+        public object Kindredship { get; set; }
+
+        [JsonProperty("pinguitudinous", Required = Required.AllowNull)]
+        public object Pinguitudinous { get; set; }
+
+        [JsonProperty("simpletonic", Required = Required.AllowNull)]
+        public object Simpletonic { get; set; }
+
+        [JsonProperty("singsong", Required = Required.AllowNull)]
+        public object Singsong { get; set; }
+
+        [JsonProperty("submergement", Required = Required.AllowNull)]
+        public object Submergement { get; set; }
+
+        [JsonProperty("supraoesophagal", Required = Required.AllowNull)]
+        public object Supraoesophagal { get; set; }
+
+        [JsonProperty("thrashel", Required = Required.AllowNull)]
+        public object Thrashel { get; set; }
+
+        [JsonProperty("tyremesis", Required = Required.AllowNull)]
+        public object Tyremesis { get; set; }
+
+        [JsonProperty("Yoruba", Required = Required.AllowNull)]
+        public object Yoruba { get; set; }
+    }
+
+    public partial record PrefreshmanClass
+    {
+        [JsonProperty("azorubine", Required = Required.AllowNull)]
+        public object Azorubine { get; set; }
+
+        [JsonProperty("choroiditis", Required = Required.AllowNull)]
+        public object Choroiditis { get; set; }
+
+        [JsonProperty("coagulatory", Required = Required.AllowNull)]
+        public object Coagulatory { get; set; }
+
+        [JsonProperty("cyclorama", Required = Required.AllowNull)]
+        public object Cyclorama { get; set; }
+
+        [JsonProperty("Dolphus", Required = Required.AllowNull)]
+        public object Dolphus { get; set; }
+
+        [JsonProperty("duckhearted", Required = Required.AllowNull)]
+        public object Duckhearted { get; set; }
+
+        [JsonProperty("Ficus", Required = Required.AllowNull)]
+        public object Ficus { get; set; }
+
+        [JsonProperty("Gemaric", Required = Required.AllowNull)]
+        public object Gemaric { get; set; }
+
+        [JsonProperty("jugation", Required = Required.AllowNull)]
+        public object Jugation { get; set; }
+
+        [JsonProperty("myoliposis", Required = Required.AllowNull)]
+        public object Myoliposis { get; set; }
+
+        [JsonProperty("nonnomination", Required = Required.AllowNull)]
+        public object Nonnomination { get; set; }
+
+        [JsonProperty("palay", Required = Required.AllowNull)]
+        public object Palay { get; set; }
+
+        [JsonProperty("pentactinal", Required = Required.AllowNull)]
+        public object Pentactinal { get; set; }
+
+        [JsonProperty("Phaet", Required = Required.AllowNull)]
+        public object Phaet { get; set; }
+
+        [JsonProperty("piquant", Required = Required.AllowNull)]
+        public object Piquant { get; set; }
+
+        [JsonProperty("registration", Required = Required.AllowNull)]
+        public object Registration { get; set; }
+
+        [JsonProperty("remancipation", Required = Required.AllowNull)]
+        public object Remancipation { get; set; }
+
+        [JsonProperty("scutatiform", Required = Required.AllowNull)]
+        public object Scutatiform { get; set; }
+
+        [JsonProperty("theodolite", Required = Required.AllowNull)]
+        public object Theodolite { get; set; }
+
+        [JsonProperty("underward", Required = Required.AllowNull)]
+        public object Underward { get; set; }
+    }
+
+    public partial struct JurorElement
+    {
+        public bool? Bool;
+        public JurorClass? JurorClass;
+
+        public static implicit operator JurorElement(bool Bool) => new JurorElement { Bool = Bool };
+        public static implicit operator JurorElement(JurorClass JurorClass) => new JurorElement { JurorClass = JurorClass };
+    }
+
+    public partial struct Kongoni
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Kongoni(long[] IntegerArray) => new Kongoni { IntegerArray = IntegerArray };
+        public static implicit operator Kongoni(Dictionary<string, long> IntegerMap) => new Kongoni { IntegerMap = IntegerMap };
+    }
+
+    public partial struct LadronismElement
+    {
+        public decimal? Double;
+        public LadronismClass? LadronismClass;
+        public string? String;
+
+        public static implicit operator LadronismElement(decimal Double) => new LadronismElement { Double = Double };
+        public static implicit operator LadronismElement(LadronismClass LadronismClass) => new LadronismElement { LadronismClass = LadronismClass };
+        public static implicit operator LadronismElement(string String) => new LadronismElement { String = String };
+    }
+
+    public partial struct LandlubberlyElement
+    {
+        public bool? Bool;
+        public long? Integer;
+        public LandlubberlyClass? LandlubberlyClass;
+
+        public static implicit operator LandlubberlyElement(bool Bool) => new LandlubberlyElement { Bool = Bool };
+        public static implicit operator LandlubberlyElement(long Integer) => new LandlubberlyElement { Integer = Integer };
+        public static implicit operator LandlubberlyElement(LandlubberlyClass LandlubberlyClass) => new LandlubberlyElement { LandlubberlyClass = LandlubberlyClass };
+    }
+
+    public partial struct Listener
+    {
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Listener(long Integer) => new Listener { Integer = Integer };
+        public static implicit operator Listener(object[] NullArray) => new Listener { NullArray = NullArray };
+    }
+
+    public partial struct LupusElement
+    {
+        public long? Integer;
+        public LupusClass? LupusClass;
+
+        public static implicit operator LupusElement(long Integer) => new LupusElement { Integer = Integer };
+        public static implicit operator LupusElement(LupusClass LupusClass) => new LupusElement { LupusClass = LupusClass };
+    }
+
+    public partial struct MonaziteElement
+    {
+        public decimal? Double;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator MonaziteElement(decimal Double) => new MonaziteElement { Double = Double };
+        public static implicit operator MonaziteElement(MonaziteClass MonaziteClass) => new MonaziteElement { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Monoliteral
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+
+        public static implicit operator Monoliteral(bool Bool) => new Monoliteral { Bool = Bool };
+        public static implicit operator Monoliteral(object[] NullArray) => new Monoliteral { NullArray = NullArray };
+    }
+
+    public partial struct MonotheisticallyElement
+    {
+        public MonotheisticallyClass? MonotheisticallyClass;
+        public object[]? NullArray;
+
+        public static implicit operator MonotheisticallyElement(MonotheisticallyClass MonotheisticallyClass) => new MonotheisticallyElement { MonotheisticallyClass = MonotheisticallyClass };
+        public static implicit operator MonotheisticallyElement(object[] NullArray) => new MonotheisticallyElement { NullArray = NullArray };
+    }
+
+    public partial struct Montage
+    {
+        public decimal? Double;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Montage(decimal Double) => new Montage { Double = Double };
+        public static implicit operator Montage(object[] NullArray) => new Montage { NullArray = NullArray };
+        public static implicit operator Montage(string String) => new Montage { String = String };
+    }
+
+    public partial struct Moralness
+    {
+        public decimal? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Moralness(decimal Double) => new Moralness { Double = Double };
+        public static implicit operator Moralness(object[] NullArray) => new Moralness { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Double == null;
+    }
+
+    public partial struct Mulishly
+    {
+        public decimal? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Mulishly(decimal Double) => new Mulishly { Double = Double };
+        public static implicit operator Mulishly(long[] IntegerArray) => new Mulishly { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Double == null;
+    }
+
+    public partial struct Myoscope
+    {
+        public bool? Bool;
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Myoscope(bool Bool) => new Myoscope { Bool = Bool };
+        public static implicit operator Myoscope(long Integer) => new Myoscope { Integer = Integer };
+        public static implicit operator Myoscope(object[] NullArray) => new Myoscope { NullArray = NullArray };
+    }
+
+    public partial struct Neuromastic
+    {
+        public decimal? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Neuromastic(decimal Double) => new Neuromastic { Double = Double };
+        public static implicit operator Neuromastic(object[] NullArray) => new Neuromastic { NullArray = NullArray };
+    }
+
+    public partial struct Nonnervous
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Nonnervous(bool Bool) => new Nonnervous { Bool = Bool };
+        public static implicit operator Nonnervous(long Integer) => new Nonnervous { Integer = Integer };
+    }
+
+    public partial struct Nonvaluation
+    {
+        public bool? Bool;
+        public decimal? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Nonvaluation(bool Bool) => new Nonvaluation { Bool = Bool };
+        public static implicit operator Nonvaluation(decimal Double) => new Nonvaluation { Double = Double };
+        public static implicit operator Nonvaluation(object[] NullArray) => new Nonvaluation { NullArray = NullArray };
+    }
+
+    public partial struct OccupationalistElement
+    {
+        public object[]? NullArray;
+        public OccupationalistClass? OccupationalistClass;
+
+        public static implicit operator OccupationalistElement(object[] NullArray) => new OccupationalistElement { NullArray = NullArray };
+        public static implicit operator OccupationalistElement(OccupationalistClass OccupationalistClass) => new OccupationalistElement { OccupationalistClass = OccupationalistClass };
+        public bool IsNull => NullArray == null && OccupationalistClass == null;
+    }
+
+    public partial struct OutrivalElement
+    {
+        public decimal? Double;
+        public OutrivalClass? OutrivalClass;
+
+        public static implicit operator OutrivalElement(decimal Double) => new OutrivalElement { Double = Double };
+        public static implicit operator OutrivalElement(OutrivalClass OutrivalClass) => new OutrivalElement { OutrivalClass = OutrivalClass };
+        public bool IsNull => OutrivalClass == null && Double == null;
+    }
+
+    public partial struct Paleographically
+    {
+        public decimal? Double;
+        public Dictionary<string, long?>? UnionMap;
+
+        public static implicit operator Paleographically(decimal Double) => new Paleographically { Double = Double };
+        public static implicit operator Paleographically(Dictionary<string, long?> UnionMap) => new Paleographically { UnionMap = UnionMap };
+    }
+
+    public partial struct Pamphletwise
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Pamphletwise(long Integer) => new Pamphletwise { Integer = Integer };
+        public static implicit operator Pamphletwise(Dictionary<string, long> IntegerMap) => new Pamphletwise { IntegerMap = IntegerMap };
+        public static implicit operator Pamphletwise(string String) => new Pamphletwise { String = String };
+    }
+
+    public partial struct Pediatric
+    {
+        public bool? Bool;
+        public decimal? Double;
+
+        public static implicit operator Pediatric(bool Bool) => new Pediatric { Bool = Bool };
+        public static implicit operator Pediatric(decimal Double) => new Pediatric { Double = Double };
+        public bool IsNull => Bool == null && Double == null;
+    }
+
+    public partial struct PiaculumElement
+    {
+        public decimal? Double;
+        public PiaculumClass? PiaculumClass;
+
+        public static implicit operator PiaculumElement(decimal Double) => new PiaculumElement { Double = Double };
+        public static implicit operator PiaculumElement(PiaculumClass PiaculumClass) => new PiaculumElement { PiaculumClass = PiaculumClass };
+    }
+
+    public partial struct Piccadilly
+    {
+        public decimal? Double;
+        public string? String;
+
+        public static implicit operator Piccadilly(decimal Double) => new Piccadilly { Double = Double };
+        public static implicit operator Piccadilly(string String) => new Piccadilly { String = String };
+        public bool IsNull => Double == null && String == null;
+    }
+
+    public partial struct Piffler
+    {
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+
+        public static implicit operator Piffler(MonaziteClass MonaziteClass) => new Piffler { MonaziteClass = MonaziteClass };
+        public static implicit operator Piffler(object[] NullArray) => new Piffler { NullArray = NullArray };
+    }
+
+    public partial struct Pithful
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Pithful(bool Bool) => new Pithful { Bool = Bool };
+        public static implicit operator Pithful(long Integer) => new Pithful { Integer = Integer };
+        public bool IsNull => Bool == null && Integer == null;
+    }
+
+    public partial struct Placuntiti
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Placuntiti(long Integer) => new Placuntiti { Integer = Integer };
+        public static implicit operator Placuntiti(Dictionary<string, long> IntegerMap) => new Placuntiti { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Plectopterous
+    {
+        public decimal? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Plectopterous(decimal Double) => new Plectopterous { Double = Double };
+        public static implicit operator Plectopterous(Dictionary<string, long> IntegerMap) => new Plectopterous { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Poliorcetic
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Poliorcetic(bool Bool) => new Poliorcetic { Bool = Bool };
+        public static implicit operator Poliorcetic(MonaziteClass MonaziteClass) => new Poliorcetic { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Poormaster
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Poormaster(long[] IntegerArray) => new Poormaster { IntegerArray = IntegerArray };
+        public static implicit operator Poormaster(Dictionary<string, long> IntegerMap) => new Poormaster { IntegerMap = IntegerMap };
+        public bool IsNull => IntegerArray == null && IntegerMap == null;
+    }
+
+    public partial struct PotwhiskyElement
+    {
+        public long? Integer;
+        public PotwhiskyClass? PotwhiskyClass;
+
+        public static implicit operator PotwhiskyElement(long Integer) => new PotwhiskyElement { Integer = Integer };
+        public static implicit operator PotwhiskyElement(PotwhiskyClass PotwhiskyClass) => new PotwhiskyElement { PotwhiskyClass = PotwhiskyClass };
+        public bool IsNull => PotwhiskyClass == null && Integer == null;
+    }
+
+    public partial struct Practicalizer
+    {
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Practicalizer(MonaziteClass MonaziteClass) => new Practicalizer { MonaziteClass = MonaziteClass };
+        public static implicit operator Practicalizer(object[] NullArray) => new Practicalizer { NullArray = NullArray };
+        public static implicit operator Practicalizer(string String) => new Practicalizer { String = String };
+    }
+
+    public partial struct PrefreshmanElement
+    {
+        public object[]? NullArray;
+        public PrefreshmanClass? PrefreshmanClass;
+        public string? String;
+
+        public static implicit operator PrefreshmanElement(object[] NullArray) => new PrefreshmanElement { NullArray = NullArray };
+        public static implicit operator PrefreshmanElement(PrefreshmanClass PrefreshmanClass) => new PrefreshmanElement { PrefreshmanClass = PrefreshmanClass };
+        public static implicit operator PrefreshmanElement(string String) => new PrefreshmanElement { String = String };
+    }
+
+    public partial struct Prehensility
+    {
+        public bool? Bool;
+        public MonaziteClass? MonaziteClass;
+        public object[]? NullArray;
+
+        public static implicit operator Prehensility(bool Bool) => new Prehensility { Bool = Bool };
+        public static implicit operator Prehensility(MonaziteClass MonaziteClass) => new Prehensility { MonaziteClass = MonaziteClass };
+        public static implicit operator Prehensility(object[] NullArray) => new Prehensility { NullArray = NullArray };
+    }
+
+    public partial struct Prevoidance
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Prevoidance(long Integer) => new Prevoidance { Integer = Integer };
+        public static implicit operator Prevoidance(long[] IntegerArray) => new Prevoidance { IntegerArray = IntegerArray };
+        public static implicit operator Prevoidance(MonaziteClass MonaziteClass) => new Prevoidance { MonaziteClass = MonaziteClass };
+    }
+
+    public partial struct Protext
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+        public MonaziteClass? MonaziteClass;
+
+        public static implicit operator Protext(bool Bool) => new Protext { Bool = Bool };
+        public static implicit operator Protext(long[] IntegerArray) => new Protext { IntegerArray = IntegerArray };
+        public static implicit operator Protext(MonaziteClass MonaziteClass) => new Protext { MonaziteClass = MonaziteClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                JurorElementConverter.Singleton,
+                KongoniConverter.Singleton,
+                LadronismElementConverter.Singleton,
+                LandlubberlyElementConverter.Singleton,
+                ListenerConverter.Singleton,
+                LupusElementConverter.Singleton,
+                MonaziteElementConverter.Singleton,
+                MonoliteralConverter.Singleton,
+                MonotheisticallyElementConverter.Singleton,
+                MontageConverter.Singleton,
+                MoralnessConverter.Singleton,
+                MulishlyConverter.Singleton,
+                MyoscopeConverter.Singleton,
+                NeuromasticConverter.Singleton,
+                NonnervousConverter.Singleton,
+                NonvaluationConverter.Singleton,
+                OccupationalistElementConverter.Singleton,
+                OutrivalElementConverter.Singleton,
+                PaleographicallyConverter.Singleton,
+                PamphletwiseConverter.Singleton,
+                PediatricConverter.Singleton,
+                PiaculumElementConverter.Singleton,
+                PiccadillyConverter.Singleton,
+                PifflerConverter.Singleton,
+                PithfulConverter.Singleton,
+                PlacuntitiConverter.Singleton,
+                PlectopterousConverter.Singleton,
+                PoliorceticConverter.Singleton,
+                PoormasterConverter.Singleton,
+                PotwhiskyElementConverter.Singleton,
+                PracticalizerConverter.Singleton,
+                PrefreshmanElementConverter.Singleton,
+                PrehensilityConverter.Singleton,
+                PrevoidanceConverter.Singleton,
+                ProtextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class JurorElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(JurorElement) || t == typeof(JurorElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new JurorElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<JurorClass>(reader);
+                    return new JurorElement { JurorClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type JurorElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (JurorElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.JurorClass != null)
+            {
+                serializer.Serialize(writer, value.JurorClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type JurorElement");
+        }
+
+        public static readonly JurorElementConverter Singleton = new JurorElementConverter();
+    }
+
+    internal class KongoniConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kongoni) || t == typeof(Kongoni?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Kongoni { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Kongoni { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Kongoni");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Kongoni)untypedValue;
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Kongoni");
+        }
+
+        public static readonly KongoniConverter Singleton = new KongoniConverter();
+    }
+
+    internal class LadronismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LadronismElement) || t == typeof(LadronismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new LadronismElement { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LadronismElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LadronismClass>(reader);
+                    return new LadronismElement { LadronismClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LadronismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LadronismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.LadronismClass != null)
+            {
+                serializer.Serialize(writer, value.LadronismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LadronismElement");
+        }
+
+        public static readonly LadronismElementConverter Singleton = new LadronismElementConverter();
+    }
+
+    internal class LandlubberlyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LandlubberlyElement) || t == typeof(LandlubberlyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LandlubberlyElement { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new LandlubberlyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LandlubberlyClass>(reader);
+                    return new LandlubberlyElement { LandlubberlyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LandlubberlyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LandlubberlyElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.LandlubberlyClass != null)
+            {
+                serializer.Serialize(writer, value.LandlubberlyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LandlubberlyElement");
+        }
+
+        public static readonly LandlubberlyElementConverter Singleton = new LandlubberlyElementConverter();
+    }
+
+    internal class ListenerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Listener) || t == typeof(Listener?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Listener { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Listener { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Listener");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Listener)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Listener");
+        }
+
+        public static readonly ListenerConverter Singleton = new ListenerConverter();
+    }
+
+    internal class LupusElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LupusElement) || t == typeof(LupusElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new LupusElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LupusClass>(reader);
+                    return new LupusElement { LupusClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LupusElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LupusElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.LupusClass != null)
+            {
+                serializer.Serialize(writer, value.LupusClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type LupusElement");
+        }
+
+        public static readonly LupusElementConverter Singleton = new LupusElementConverter();
+    }
+
+    internal class MonaziteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonaziteElement) || t == typeof(MonaziteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new MonaziteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new MonaziteElement { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type MonaziteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonaziteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonaziteElement");
+        }
+
+        public static readonly MonaziteElementConverter Singleton = new MonaziteElementConverter();
+    }
+
+    internal class MonoliteralConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Monoliteral) || t == typeof(Monoliteral?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Monoliteral { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Monoliteral { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Monoliteral");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Monoliteral)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Monoliteral");
+        }
+
+        public static readonly MonoliteralConverter Singleton = new MonoliteralConverter();
+    }
+
+    internal class MonotheisticallyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MonotheisticallyElement) || t == typeof(MonotheisticallyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonotheisticallyClass>(reader);
+                    return new MonotheisticallyElement { MonotheisticallyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new MonotheisticallyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type MonotheisticallyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MonotheisticallyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonotheisticallyClass != null)
+            {
+                serializer.Serialize(writer, value.MonotheisticallyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MonotheisticallyElement");
+        }
+
+        public static readonly MonotheisticallyElementConverter Singleton = new MonotheisticallyElementConverter();
+    }
+
+    internal class MontageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Montage) || t == typeof(Montage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Montage { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Montage { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Montage { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Montage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Montage)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Montage");
+        }
+
+        public static readonly MontageConverter Singleton = new MontageConverter();
+    }
+
+    internal class MoralnessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Moralness) || t == typeof(Moralness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Moralness { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Moralness { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Moralness { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Moralness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Moralness)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Moralness");
+        }
+
+        public static readonly MoralnessConverter Singleton = new MoralnessConverter();
+    }
+
+    internal class MulishlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Mulishly) || t == typeof(Mulishly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Mulishly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Mulishly { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Mulishly { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Mulishly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Mulishly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Mulishly");
+        }
+
+        public static readonly MulishlyConverter Singleton = new MulishlyConverter();
+    }
+
+    internal class MyoscopeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Myoscope) || t == typeof(Myoscope?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Myoscope { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Myoscope { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Myoscope { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Myoscope");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Myoscope)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Myoscope");
+        }
+
+        public static readonly MyoscopeConverter Singleton = new MyoscopeConverter();
+    }
+
+    internal class NeuromasticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Neuromastic) || t == typeof(Neuromastic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Neuromastic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Neuromastic { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Neuromastic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Neuromastic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Neuromastic");
+        }
+
+        public static readonly NeuromasticConverter Singleton = new NeuromasticConverter();
+    }
+
+    internal class NonnervousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonnervous) || t == typeof(Nonnervous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Nonnervous { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonnervous { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonnervous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonnervous)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonnervous");
+        }
+
+        public static readonly NonnervousConverter Singleton = new NonnervousConverter();
+    }
+
+    internal class NonvaluationConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Nonvaluation) || t == typeof(Nonvaluation?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Nonvaluation { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Nonvaluation { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Nonvaluation { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Nonvaluation");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Nonvaluation)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Nonvaluation");
+        }
+
+        public static readonly NonvaluationConverter Singleton = new NonvaluationConverter();
+    }
+
+    internal class OccupationalistElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OccupationalistElement) || t == typeof(OccupationalistElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OccupationalistElement { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OccupationalistClass>(reader);
+                    return new OccupationalistElement { OccupationalistClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new OccupationalistElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type OccupationalistElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OccupationalistElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.OccupationalistClass != null)
+            {
+                serializer.Serialize(writer, value.OccupationalistClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OccupationalistElement");
+        }
+
+        public static readonly OccupationalistElementConverter Singleton = new OccupationalistElementConverter();
+    }
+
+    internal class OutrivalElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OutrivalElement) || t == typeof(OutrivalElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new OutrivalElement { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new OutrivalElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OutrivalClass>(reader);
+                    return new OutrivalElement { OutrivalClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type OutrivalElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (OutrivalElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OutrivalClass != null)
+            {
+                serializer.Serialize(writer, value.OutrivalClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type OutrivalElement");
+        }
+
+        public static readonly OutrivalElementConverter Singleton = new OutrivalElementConverter();
+    }
+
+    internal class PaleographicallyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Paleographically) || t == typeof(Paleographically?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Paleographically { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long?>>(reader);
+                    return new Paleographically { UnionMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Paleographically");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Paleographically)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionMap != null)
+            {
+                serializer.Serialize(writer, value.UnionMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Paleographically");
+        }
+
+        public static readonly PaleographicallyConverter Singleton = new PaleographicallyConverter();
+    }
+
+    internal class PamphletwiseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pamphletwise) || t == typeof(Pamphletwise?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pamphletwise { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Pamphletwise { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Pamphletwise { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Pamphletwise");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pamphletwise)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pamphletwise");
+        }
+
+        public static readonly PamphletwiseConverter Singleton = new PamphletwiseConverter();
+    }
+
+    internal class PediatricConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pediatric) || t == typeof(Pediatric?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pediatric { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Pediatric { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pediatric { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pediatric");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pediatric)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pediatric");
+        }
+
+        public static readonly PediatricConverter Singleton = new PediatricConverter();
+    }
+
+    internal class PiaculumElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PiaculumElement) || t == typeof(PiaculumElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new PiaculumElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PiaculumClass>(reader);
+                    return new PiaculumElement { PiaculumClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PiaculumElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PiaculumElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.PiaculumClass != null)
+            {
+                serializer.Serialize(writer, value.PiaculumClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PiaculumElement");
+        }
+
+        public static readonly PiaculumElementConverter Singleton = new PiaculumElementConverter();
+    }
+
+    internal class PiccadillyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piccadilly) || t == typeof(Piccadilly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Piccadilly { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Piccadilly { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Piccadilly { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Piccadilly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piccadilly)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piccadilly");
+        }
+
+        public static readonly PiccadillyConverter Singleton = new PiccadillyConverter();
+    }
+
+    internal class PifflerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Piffler) || t == typeof(Piffler?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Piffler { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Piffler { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Piffler");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Piffler)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Piffler");
+        }
+
+        public static readonly PifflerConverter Singleton = new PifflerConverter();
+    }
+
+    internal class PithfulConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Pithful) || t == typeof(Pithful?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Pithful { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Pithful { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Pithful { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Pithful");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Pithful)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Pithful");
+        }
+
+        public static readonly PithfulConverter Singleton = new PithfulConverter();
+    }
+
+    internal class PlacuntitiConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Placuntiti) || t == typeof(Placuntiti?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Placuntiti { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Placuntiti { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Placuntiti");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Placuntiti)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Placuntiti");
+        }
+
+        public static readonly PlacuntitiConverter Singleton = new PlacuntitiConverter();
+    }
+
+    internal class PlectopterousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Plectopterous) || t == typeof(Plectopterous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Plectopterous { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Plectopterous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Plectopterous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Plectopterous)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Plectopterous");
+        }
+
+        public static readonly PlectopterousConverter Singleton = new PlectopterousConverter();
+    }
+
+    internal class PoliorceticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poliorcetic) || t == typeof(Poliorcetic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Poliorcetic { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Poliorcetic { MonaziteClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Poliorcetic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poliorcetic)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poliorcetic");
+        }
+
+        public static readonly PoliorceticConverter Singleton = new PoliorceticConverter();
+    }
+
+    internal class PoormasterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Poormaster) || t == typeof(Poormaster?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Poormaster { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Poormaster { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Poormaster { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Poormaster");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Poormaster)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Poormaster");
+        }
+
+        public static readonly PoormasterConverter Singleton = new PoormasterConverter();
+    }
+
+    internal class PotwhiskyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PotwhiskyElement) || t == typeof(PotwhiskyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new PotwhiskyElement { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PotwhiskyElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PotwhiskyClass>(reader);
+                    return new PotwhiskyElement { PotwhiskyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PotwhiskyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PotwhiskyElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PotwhiskyClass != null)
+            {
+                serializer.Serialize(writer, value.PotwhiskyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PotwhiskyElement");
+        }
+
+        public static readonly PotwhiskyElementConverter Singleton = new PotwhiskyElementConverter();
+    }
+
+    internal class PracticalizerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Practicalizer) || t == typeof(Practicalizer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Practicalizer { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Practicalizer { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Practicalizer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Practicalizer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Practicalizer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Practicalizer");
+        }
+
+        public static readonly PracticalizerConverter Singleton = new PracticalizerConverter();
+    }
+
+    internal class PrefreshmanElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PrefreshmanElement) || t == typeof(PrefreshmanElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new PrefreshmanElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PrefreshmanClass>(reader);
+                    return new PrefreshmanElement { PrefreshmanClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new PrefreshmanElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PrefreshmanElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PrefreshmanElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.PrefreshmanClass != null)
+            {
+                serializer.Serialize(writer, value.PrefreshmanClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PrefreshmanElement");
+        }
+
+        public static readonly PrefreshmanElementConverter Singleton = new PrefreshmanElementConverter();
+    }
+
+    internal class PrehensilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prehensility) || t == typeof(Prehensility?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Prehensility { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prehensility { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Prehensility { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prehensility");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prehensility)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prehensility");
+        }
+
+        public static readonly PrehensilityConverter Singleton = new PrehensilityConverter();
+    }
+
+    internal class PrevoidanceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Prevoidance) || t == typeof(Prevoidance?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Prevoidance { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Prevoidance { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Prevoidance { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Prevoidance");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Prevoidance)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Prevoidance");
+        }
+
+        public static readonly PrevoidanceConverter Singleton = new PrevoidanceConverter();
+    }
+
+    internal class ProtextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protext) || t == typeof(Protext?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Protext { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MonaziteClass>(reader);
+                    return new Protext { MonaziteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Protext { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protext");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protext)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.MonaziteClass != null)
+            {
+                serializer.Serialize(writer, value.MonaziteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protext");
+        }
+
+        public static readonly ProtextConverter Singleton = new ProtextConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations4.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations4.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs
new file mode 100644
index 0000000..871d287
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations4.json/any-type-dynamic--c1ed06bd14d8/QuickType.cs
@@ -0,0 +1,3484 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("protrusive", Required = Required.Always)]
+        public Protrusive[] Protrusive { get; set; }
+
+        [JsonProperty("pulpitism", Required = Required.Always)]
+        public PulpitismElement[] Pulpitism { get; set; }
+
+        [JsonProperty("pyodermia", Required = Required.Always)]
+        public PyodermiaElement[] Pyodermia { get; set; }
+
+        [JsonProperty("quebrachine", Required = Required.Always)]
+        public QuebrachineElement[] Quebrachine { get; set; }
+
+        [JsonProperty("querier", Required = Required.Always)]
+        public Querier[] Querier { get; set; }
+
+        [JsonProperty("rebarbative", Required = Required.Always)]
+        public Rebarbative[] Rebarbative { get; set; }
+
+        [JsonProperty("reimagine", Required = Required.Always)]
+        public Reimagine[] Reimagine { get; set; }
+
+        [JsonProperty("ressaut", Required = Required.Always)]
+        public Ressaut Ressaut { get; set; }
+
+        [JsonProperty("retrocervical", Required = Required.Always)]
+        public Retrocervical[] Retrocervical { get; set; }
+
+        [JsonProperty("revert", Required = Required.Always)]
+        public Revert[] Revert { get; set; }
+
+        [JsonProperty("rewrite", Required = Required.Always)]
+        public RewriteElement[] Rewrite { get; set; }
+
+        [JsonProperty("saccoderm", Required = Required.Always)]
+        public Saccoderm[] Saccoderm { get; set; }
+
+        [JsonProperty("santir", Required = Required.Always)]
+        public SantirElement[] Santir { get; set; }
+
+        [JsonProperty("saprophilous", Required = Required.Always)]
+        public Saprophilous[] Saprophilous { get; set; }
+
+        [JsonProperty("saxten", Required = Required.Always)]
+        public SaxtenElement[] Saxten { get; set; }
+
+        [JsonProperty("scatty", Required = Required.Always)]
+        public Scatty?[] Scatty { get; set; }
+
+        [JsonProperty("scoffer", Required = Required.Always)]
+        public Scoffer[] Scoffer { get; set; }
+
+        [JsonProperty("scrampum", Required = Required.Always)]
+        public Scrampum[] Scrampum { get; set; }
+
+        [JsonProperty("semantic", Required = Required.Always)]
+        public double Semantic { get; set; }
+
+        [JsonProperty("serpentinic", Required = Required.Always)]
+        public Serpentinic[] Serpentinic { get; set; }
+
+        [JsonProperty("shadowable", Required = Required.Always)]
+        public Shadowable[] Shadowable { get; set; }
+
+        [JsonProperty("sistering", Required = Required.Always)]
+        public SisteringElement[] Sistering { get; set; }
+
+        [JsonProperty("staghunting", Required = Required.Always)]
+        public Staghunting[] Staghunting { get; set; }
+
+        [JsonProperty("stagmometer", Required = Required.Always)]
+        public Stagmometer[] Stagmometer { get; set; }
+
+        [JsonProperty("stimulability", Required = Required.Always)]
+        public Stimulability[] Stimulability { get; set; }
+
+        [JsonProperty("strangleable", Required = Required.Always)]
+        public Strangleable[] Strangleable { get; set; }
+
+        [JsonProperty("strenuosity", Required = Required.Always)]
+        public StrenuosityElement[] Strenuosity { get; set; }
+
+        [JsonProperty("tabaxir", Required = Required.Always)]
+        public Tabaxir[] Tabaxir { get; set; }
+
+        [JsonProperty("talpiform", Required = Required.Always)]
+        public Talpiform[] Talpiform { get; set; }
+
+        [JsonProperty("thwack", Required = Required.Always)]
+        public Thwack[] Thwack { get; set; }
+
+        [JsonProperty("to", Required = Required.Always)]
+        public double?[] To { get; set; }
+
+        [JsonProperty("tortricine", Required = Required.Always)]
+        public Tortricine[] Tortricine { get; set; }
+
+        [JsonProperty("truantcy", Required = Required.Always)]
+        public TruantcyElement[] Truantcy { get; set; }
+
+        [JsonProperty("turgesce", Required = Required.Always)]
+        public string[] Turgesce { get; set; }
+
+        [JsonProperty("unbeginning", Required = Required.Always)]
+        public Unbeginning[] Unbeginning { get; set; }
+
+        [JsonProperty("underdunged", Required = Required.Always)]
+        public double[] Underdunged { get; set; }
+
+        [JsonProperty("undesirability", Required = Required.Always)]
+        public Undesirability[] Undesirability { get; set; }
+
+        [JsonProperty("unerasing", Required = Required.Always)]
+        public Unerasing[] Unerasing { get; set; }
+
+        [JsonProperty("unguentarium", Required = Required.Always)]
+        public Unguentarium[] Unguentarium { get; set; }
+
+        [JsonProperty("unimpeachably", Required = Required.Always)]
+        public UnimpeachablyElement[] Unimpeachably { get; set; }
+
+        [JsonProperty("unmortgaged", Required = Required.Always)]
+        public Unmortgaged[] Unmortgaged { get; set; }
+
+        [JsonProperty("unobstructed", Required = Required.Always)]
+        public Unobstructed[] Unobstructed { get; set; }
+
+        [JsonProperty("unreceptivity", Required = Required.Always)]
+        public Unreceptivity[] Unreceptivity { get; set; }
+
+        [JsonProperty("unsatisfactoriness", Required = Required.Always)]
+        public Unsatisfactoriness[] Unsatisfactoriness { get; set; }
+
+        [JsonProperty("unsecurity", Required = Required.Always)]
+        public long[] Unsecurity { get; set; }
+
+        [JsonProperty("unstressed", Required = Required.Always)]
+        public UnstressedElement[] Unstressed { get; set; }
+
+        [JsonProperty("untasked", Required = Required.Always)]
+        public Untasked[] Untasked { get; set; }
+
+        [JsonProperty("unvarying", Required = Required.Always)]
+        public Unvarying[] Unvarying { get; set; }
+
+        [JsonProperty("vehemently", Required = Required.Always)]
+        public Vehemently[] Vehemently { get; set; }
+
+        [JsonProperty("warriorship", Required = Required.Always)]
+        public Dictionary<string, bool> Warriorship { get; set; }
+
+        [JsonProperty("whitepot", Required = Required.Always)]
+        public Whitepot[] Whitepot { get; set; }
+
+        [JsonProperty("wrothy", Required = Required.Always)]
+        public WrothyElement[] Wrothy { get; set; }
+    }
+
+    public partial record PulpitismClass
+    {
+        [JsonProperty("abnet", Required = Required.AllowNull)]
+        public dynamic Abnet { get; set; }
+
+        [JsonProperty("buckhorn", Required = Required.AllowNull)]
+        public dynamic Buckhorn { get; set; }
+
+        [JsonProperty("calciform", Required = Required.AllowNull)]
+        public dynamic Calciform { get; set; }
+
+        [JsonProperty("chelophore", Required = Required.AllowNull)]
+        public dynamic Chelophore { get; set; }
+
+        [JsonProperty("cogitation", Required = Required.AllowNull)]
+        public dynamic Cogitation { get; set; }
+
+        [JsonProperty("decreeable", Required = Required.AllowNull)]
+        public dynamic Decreeable { get; set; }
+
+        [JsonProperty("despicable", Required = Required.AllowNull)]
+        public dynamic Despicable { get; set; }
+
+        [JsonProperty("isodiazo", Required = Required.AllowNull)]
+        public dynamic Isodiazo { get; set; }
+
+        [JsonProperty("jadedly", Required = Required.AllowNull)]
+        public dynamic Jadedly { get; set; }
+
+        [JsonProperty("leptochlorite", Required = Required.AllowNull)]
+        public dynamic Leptochlorite { get; set; }
+
+        [JsonProperty("nursling", Required = Required.AllowNull)]
+        public dynamic Nursling { get; set; }
+
+        [JsonProperty("palamedean", Required = Required.AllowNull)]
+        public dynamic Palamedean { get; set; }
+
+        [JsonProperty("photoheliograph", Required = Required.AllowNull)]
+        public dynamic Photoheliograph { get; set; }
+
+        [JsonProperty("pipewood", Required = Required.AllowNull)]
+        public dynamic Pipewood { get; set; }
+
+        [JsonProperty("roberd", Required = Required.AllowNull)]
+        public dynamic Roberd { get; set; }
+
+        [JsonProperty("statable", Required = Required.AllowNull)]
+        public dynamic Statable { get; set; }
+
+        [JsonProperty("superassume", Required = Required.AllowNull)]
+        public dynamic Superassume { get; set; }
+
+        [JsonProperty("syllabe", Required = Required.AllowNull)]
+        public dynamic Syllabe { get; set; }
+
+        [JsonProperty("toughhead", Required = Required.AllowNull)]
+        public dynamic Toughhead { get; set; }
+
+        [JsonProperty("underburn", Required = Required.AllowNull)]
+        public dynamic Underburn { get; set; }
+    }
+
+    public partial record PyodermiaClass
+    {
+        [JsonProperty("aphoristically", Required = Required.AllowNull)]
+        public dynamic Aphoristically { get; set; }
+
+        [JsonProperty("apophyllous", Required = Required.AllowNull)]
+        public dynamic Apophyllous { get; set; }
+
+        [JsonProperty("cognize", Required = Required.AllowNull)]
+        public dynamic Cognize { get; set; }
+
+        [JsonProperty("dermonosology", Required = Required.AllowNull)]
+        public dynamic Dermonosology { get; set; }
+
+        [JsonProperty("Gyppo", Required = Required.AllowNull)]
+        public dynamic Gyppo { get; set; }
+
+        [JsonProperty("ither", Required = Required.AllowNull)]
+        public dynamic Ither { get; set; }
+
+        [JsonProperty("juglandaceous", Required = Required.AllowNull)]
+        public dynamic Juglandaceous { get; set; }
+
+        [JsonProperty("litho", Required = Required.AllowNull)]
+        public dynamic Litho { get; set; }
+
+        [JsonProperty("macropterous", Required = Required.AllowNull)]
+        public dynamic Macropterous { get; set; }
+
+        [JsonProperty("photographer", Required = Required.AllowNull)]
+        public dynamic Photographer { get; set; }
+
+        [JsonProperty("romancing", Required = Required.AllowNull)]
+        public dynamic Romancing { get; set; }
+
+        [JsonProperty("rumness", Required = Required.AllowNull)]
+        public dynamic Rumness { get; set; }
+
+        [JsonProperty("somniloquist", Required = Required.AllowNull)]
+        public dynamic Somniloquist { get; set; }
+
+        [JsonProperty("stressfully", Required = Required.AllowNull)]
+        public dynamic Stressfully { get; set; }
+
+        [JsonProperty("tactically", Required = Required.AllowNull)]
+        public dynamic Tactically { get; set; }
+
+        [JsonProperty("tracheophony", Required = Required.AllowNull)]
+        public dynamic Tracheophony { get; set; }
+
+        [JsonProperty("unappositely", Required = Required.AllowNull)]
+        public dynamic Unappositely { get; set; }
+
+        [JsonProperty("unclothedly", Required = Required.AllowNull)]
+        public dynamic Unclothedly { get; set; }
+
+        [JsonProperty("unimplied", Required = Required.AllowNull)]
+        public dynamic Unimplied { get; set; }
+
+        [JsonProperty("unsyncopated", Required = Required.AllowNull)]
+        public dynamic Unsyncopated { get; set; }
+    }
+
+    public partial record QuebrachineClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public dynamic Nonbookish { get; set; }
+    }
+
+    public partial record Reimagine
+    {
+        [JsonProperty("adducible")]
+        public dynamic? Adducible { get; set; }
+
+        [JsonProperty("anabolin")]
+        public dynamic? Anabolin { get; set; }
+
+        [JsonProperty("brainy")]
+        public dynamic? Brainy { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chrysamine")]
+        public dynamic? Chrysamine { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("fluxweed")]
+        public dynamic? Fluxweed { get; set; }
+
+        [JsonProperty("glaucine")]
+        public dynamic? Glaucine { get; set; }
+
+        [JsonProperty("grobianism")]
+        public dynamic? Grobianism { get; set; }
+
+        [JsonProperty("Hermo")]
+        public dynamic? Hermo { get; set; }
+
+        [JsonProperty("hieroglyphist")]
+        public dynamic? Hieroglyphist { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("icteroid")]
+        public dynamic? Icteroid { get; set; }
+
+        [JsonProperty("immortal")]
+        public dynamic? Immortal { get; set; }
+
+        [JsonProperty("impetulant")]
+        public dynamic? Impetulant { get; set; }
+
+        [JsonProperty("irrigate")]
+        public dynamic? Irrigate { get; set; }
+
+        [JsonProperty("myxedema")]
+        public dynamic? Myxedema { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("onyx")]
+        public dynamic? Onyx { get; set; }
+
+        [JsonProperty("repasser")]
+        public dynamic? Repasser { get; set; }
+
+        [JsonProperty("septomarginal")]
+        public dynamic? Septomarginal { get; set; }
+
+        [JsonProperty("subdie")]
+        public dynamic? Subdie { get; set; }
+
+        [JsonProperty("tibiometatarsal")]
+        public dynamic? Tibiometatarsal { get; set; }
+
+        [JsonProperty("waltzlike")]
+        public dynamic? Waltzlike { get; set; }
+    }
+
+    public partial record Ressaut
+    {
+        [JsonProperty("apperceptive", Required = Required.Always)]
+        public string Apperceptive { get; set; }
+
+        [JsonProperty("cuttoo", Required = Required.Always)]
+        public string Cuttoo { get; set; }
+
+        [JsonProperty("douser", Required = Required.Always)]
+        public string Douser { get; set; }
+
+        [JsonProperty("drinkproof", Required = Required.Always)]
+        public string Drinkproof { get; set; }
+
+        [JsonProperty("forementioned", Required = Required.Always)]
+        public string Forementioned { get; set; }
+
+        [JsonProperty("Freesia", Required = Required.Always)]
+        public string Freesia { get; set; }
+
+        [JsonProperty("Genevieve", Required = Required.Always)]
+        public string Genevieve { get; set; }
+
+        [JsonProperty("hyperdiabolical", Required = Required.Always)]
+        public string Hyperdiabolical { get; set; }
+
+        [JsonProperty("hypocone", Required = Required.Always)]
+        public string Hypocone { get; set; }
+
+        [JsonProperty("irreverentially", Required = Required.Always)]
+        public string Irreverentially { get; set; }
+
+        [JsonProperty("jumart", Required = Required.Always)]
+        public string Jumart { get; set; }
+
+        [JsonProperty("Mimosaceae", Required = Required.Always)]
+        public string Mimosaceae { get; set; }
+
+        [JsonProperty("mollicrush", Required = Required.Always)]
+        public string Mollicrush { get; set; }
+
+        [JsonProperty("nedder", Required = Required.Always)]
+        public string Nedder { get; set; }
+
+        [JsonProperty("retinasphalt", Required = Required.Always)]
+        public string Retinasphalt { get; set; }
+
+        [JsonProperty("sough", Required = Required.Always)]
+        public string Sough { get; set; }
+
+        [JsonProperty("steading", Required = Required.Always)]
+        public string Steading { get; set; }
+
+        [JsonProperty("Theopaschitism", Required = Required.Always)]
+        public string Theopaschitism { get; set; }
+
+        [JsonProperty("undurableness", Required = Required.Always)]
+        public string Undurableness { get; set; }
+
+        [JsonProperty("unmingleable", Required = Required.Always)]
+        public string Unmingleable { get; set; }
+    }
+
+    public partial record RewriteClass
+    {
+        [JsonProperty("accountancy", Required = Required.AllowNull)]
+        public dynamic Accountancy { get; set; }
+
+        [JsonProperty("cacotrophic", Required = Required.AllowNull)]
+        public dynamic Cacotrophic { get; set; }
+
+        [JsonProperty("contest", Required = Required.AllowNull)]
+        public dynamic Contest { get; set; }
+
+        [JsonProperty("couthily", Required = Required.AllowNull)]
+        public dynamic Couthily { get; set; }
+
+        [JsonProperty("falculate", Required = Required.AllowNull)]
+        public dynamic Falculate { get; set; }
+
+        [JsonProperty("foreseize", Required = Required.AllowNull)]
+        public dynamic Foreseize { get; set; }
+
+        [JsonProperty("Hyades", Required = Required.AllowNull)]
+        public dynamic Hyades { get; set; }
+
+        [JsonProperty("lemnad", Required = Required.AllowNull)]
+        public dynamic Lemnad { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.AllowNull)]
+        public dynamic Monotheistically { get; set; }
+
+        [JsonProperty("nonflying", Required = Required.AllowNull)]
+        public dynamic Nonflying { get; set; }
+
+        [JsonProperty("Ptenoglossa", Required = Required.AllowNull)]
+        public dynamic Ptenoglossa { get; set; }
+
+        [JsonProperty("repatch", Required = Required.AllowNull)]
+        public dynamic Repatch { get; set; }
+
+        [JsonProperty("rodman", Required = Required.AllowNull)]
+        public dynamic Rodman { get; set; }
+
+        [JsonProperty("strung", Required = Required.AllowNull)]
+        public dynamic Strung { get; set; }
+
+        [JsonProperty("titmal", Required = Required.AllowNull)]
+        public dynamic Titmal { get; set; }
+
+        [JsonProperty("twalpennyworth", Required = Required.AllowNull)]
+        public dynamic Twalpennyworth { get; set; }
+
+        [JsonProperty("unblamable", Required = Required.AllowNull)]
+        public dynamic Unblamable { get; set; }
+
+        [JsonProperty("vertical", Required = Required.AllowNull)]
+        public dynamic Vertical { get; set; }
+
+        [JsonProperty("Whiggification", Required = Required.AllowNull)]
+        public dynamic Whiggification { get; set; }
+
+        [JsonProperty("yardman", Required = Required.AllowNull)]
+        public dynamic Yardman { get; set; }
+    }
+
+    public partial record SantirClass
+    {
+        [JsonProperty("admiredly", Required = Required.AllowNull)]
+        public dynamic Admiredly { get; set; }
+
+        [JsonProperty("demicaponier", Required = Required.AllowNull)]
+        public dynamic Demicaponier { get; set; }
+
+        [JsonProperty("epitympanic", Required = Required.AllowNull)]
+        public dynamic Epitympanic { get; set; }
+
+        [JsonProperty("investitor", Required = Required.AllowNull)]
+        public dynamic Investitor { get; set; }
+
+        [JsonProperty("lupiform", Required = Required.AllowNull)]
+        public dynamic Lupiform { get; set; }
+
+        [JsonProperty("monoflagellate", Required = Required.AllowNull)]
+        public dynamic Monoflagellate { get; set; }
+
+        [JsonProperty("paleoethnic", Required = Required.AllowNull)]
+        public dynamic Paleoethnic { get; set; }
+
+        [JsonProperty("prediscountable", Required = Required.AllowNull)]
+        public dynamic Prediscountable { get; set; }
+
+        [JsonProperty("rhetoricals", Required = Required.AllowNull)]
+        public dynamic Rhetoricals { get; set; }
+
+        [JsonProperty("roomth", Required = Required.AllowNull)]
+        public dynamic Roomth { get; set; }
+
+        [JsonProperty("saccharose", Required = Required.AllowNull)]
+        public dynamic Saccharose { get; set; }
+
+        [JsonProperty("septonasal", Required = Required.AllowNull)]
+        public dynamic Septonasal { get; set; }
+
+        [JsonProperty("serpenticide", Required = Required.AllowNull)]
+        public dynamic Serpenticide { get; set; }
+
+        [JsonProperty("setarious", Required = Required.AllowNull)]
+        public dynamic Setarious { get; set; }
+
+        [JsonProperty("spaework", Required = Required.AllowNull)]
+        public dynamic Spaework { get; set; }
+
+        [JsonProperty("stylite", Required = Required.AllowNull)]
+        public dynamic Stylite { get; set; }
+
+        [JsonProperty("Suessiones", Required = Required.AllowNull)]
+        public dynamic Suessiones { get; set; }
+
+        [JsonProperty("timelily", Required = Required.AllowNull)]
+        public dynamic Timelily { get; set; }
+
+        [JsonProperty("unprofaned", Required = Required.AllowNull)]
+        public dynamic Unprofaned { get; set; }
+
+        [JsonProperty("vorticular", Required = Required.AllowNull)]
+        public dynamic Vorticular { get; set; }
+    }
+
+    public partial record SaxtenClass
+    {
+        [JsonProperty("algarrobilla")]
+        public dynamic? Algarrobilla { get; set; }
+
+        [JsonProperty("bowgrace")]
+        public dynamic? Bowgrace { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Centaurid")]
+        public dynamic? Centaurid { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("flix")]
+        public dynamic? Flix { get; set; }
+
+        [JsonProperty("germanely")]
+        public dynamic? Germanely { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("inhume")]
+        public dynamic? Inhume { get; set; }
+
+        [JsonProperty("lepidote")]
+        public dynamic? Lepidote { get; set; }
+
+        [JsonProperty("megalochirous")]
+        public dynamic? Megalochirous { get; set; }
+
+        [JsonProperty("ninepenny")]
+        public dynamic? Ninepenny { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("nondeist")]
+        public dynamic? Nondeist { get; set; }
+
+        [JsonProperty("nymphaeaceous")]
+        public dynamic? Nymphaeaceous { get; set; }
+
+        [JsonProperty("parietofrontal")]
+        public dynamic? Parietofrontal { get; set; }
+
+        [JsonProperty("sancyite")]
+        public dynamic? Sancyite { get; set; }
+
+        [JsonProperty("subjectivist")]
+        public dynamic? Subjectivist { get; set; }
+
+        [JsonProperty("tibiad")]
+        public dynamic? Tibiad { get; set; }
+
+        [JsonProperty("transonic")]
+        public dynamic? Transonic { get; set; }
+
+        [JsonProperty("tripetalous")]
+        public dynamic? Tripetalous { get; set; }
+
+        [JsonProperty("trunchman")]
+        public dynamic? Trunchman { get; set; }
+
+        [JsonProperty("urger")]
+        public dynamic? Urger { get; set; }
+
+        [JsonProperty("withdrawnness")]
+        public dynamic? Withdrawnness { get; set; }
+    }
+
+    public partial record Scatty
+    {
+        [JsonProperty("aeriferous", Required = Required.AllowNull)]
+        public dynamic Aeriferous { get; set; }
+
+        [JsonProperty("antical", Required = Required.AllowNull)]
+        public dynamic Antical { get; set; }
+
+        [JsonProperty("antighostism", Required = Required.AllowNull)]
+        public dynamic Antighostism { get; set; }
+
+        [JsonProperty("arcanum", Required = Required.AllowNull)]
+        public dynamic Arcanum { get; set; }
+
+        [JsonProperty("autotrophy", Required = Required.AllowNull)]
+        public dynamic Autotrophy { get; set; }
+
+        [JsonProperty("baronial", Required = Required.AllowNull)]
+        public dynamic Baronial { get; set; }
+
+        [JsonProperty("caffeine", Required = Required.AllowNull)]
+        public dynamic Caffeine { get; set; }
+
+        [JsonProperty("gorgoniacean", Required = Required.AllowNull)]
+        public dynamic Gorgoniacean { get; set; }
+
+        [JsonProperty("heroical", Required = Required.AllowNull)]
+        public dynamic Heroical { get; set; }
+
+        [JsonProperty("hydropical", Required = Required.AllowNull)]
+        public dynamic Hydropical { get; set; }
+
+        [JsonProperty("mechanology", Required = Required.AllowNull)]
+        public dynamic Mechanology { get; set; }
+
+        [JsonProperty("musicopoetic", Required = Required.AllowNull)]
+        public dynamic Musicopoetic { get; set; }
+
+        [JsonProperty("officiality", Required = Required.AllowNull)]
+        public dynamic Officiality { get; set; }
+
+        [JsonProperty("oftentimes", Required = Required.AllowNull)]
+        public dynamic Oftentimes { get; set; }
+
+        [JsonProperty("ophthalmotonometer", Required = Required.AllowNull)]
+        public dynamic Ophthalmotonometer { get; set; }
+
+        [JsonProperty("reflectively", Required = Required.AllowNull)]
+        public dynamic Reflectively { get; set; }
+
+        [JsonProperty("springer", Required = Required.AllowNull)]
+        public dynamic Springer { get; set; }
+
+        [JsonProperty("Tabasco", Required = Required.AllowNull)]
+        public dynamic Tabasco { get; set; }
+
+        [JsonProperty("teleianthous", Required = Required.AllowNull)]
+        public dynamic Teleianthous { get; set; }
+
+        [JsonProperty("uncombated", Required = Required.AllowNull)]
+        public dynamic Uncombated { get; set; }
+    }
+
+    public partial record SisteringClass
+    {
+        [JsonProperty("amphicarpic", Required = Required.AllowNull)]
+        public dynamic Amphicarpic { get; set; }
+
+        [JsonProperty("Chianti", Required = Required.AllowNull)]
+        public dynamic Chianti { get; set; }
+
+        [JsonProperty("frigorific", Required = Required.AllowNull)]
+        public dynamic Frigorific { get; set; }
+
+        [JsonProperty("Haplomi", Required = Required.AllowNull)]
+        public dynamic Haplomi { get; set; }
+
+        [JsonProperty("hyperkinesis", Required = Required.AllowNull)]
+        public dynamic Hyperkinesis { get; set; }
+
+        [JsonProperty("laudable", Required = Required.AllowNull)]
+        public dynamic Laudable { get; set; }
+
+        [JsonProperty("madwoman", Required = Required.AllowNull)]
+        public dynamic Madwoman { get; set; }
+
+        [JsonProperty("maimedly", Required = Required.AllowNull)]
+        public dynamic Maimedly { get; set; }
+
+        [JsonProperty("Micropterygidae", Required = Required.AllowNull)]
+        public dynamic Micropterygidae { get; set; }
+
+        [JsonProperty("microrhabdus", Required = Required.AllowNull)]
+        public dynamic Microrhabdus { get; set; }
+
+        [JsonProperty("nondense", Required = Required.AllowNull)]
+        public dynamic Nondense { get; set; }
+
+        [JsonProperty("phlebemphraxis", Required = Required.AllowNull)]
+        public dynamic Phlebemphraxis { get; set; }
+
+        [JsonProperty("redsear", Required = Required.AllowNull)]
+        public dynamic Redsear { get; set; }
+
+        [JsonProperty("schismatical", Required = Required.AllowNull)]
+        public dynamic Schismatical { get; set; }
+
+        [JsonProperty("tartryl", Required = Required.AllowNull)]
+        public dynamic Tartryl { get; set; }
+
+        [JsonProperty("unabhorred", Required = Required.AllowNull)]
+        public dynamic Unabhorred { get; set; }
+
+        [JsonProperty("undeliberateness", Required = Required.AllowNull)]
+        public dynamic Undeliberateness { get; set; }
+
+        [JsonProperty("unmixable", Required = Required.AllowNull)]
+        public dynamic Unmixable { get; set; }
+
+        [JsonProperty("untruckling", Required = Required.AllowNull)]
+        public dynamic Untruckling { get; set; }
+
+        [JsonProperty("vineal", Required = Required.AllowNull)]
+        public dynamic Vineal { get; set; }
+    }
+
+    public partial record Staghunting
+    {
+        [JsonProperty("calorimetric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Calorimetric { get; set; }
+
+        [JsonProperty("canid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Canid { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ditriglyphic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ditriglyphic { get; set; }
+
+        [JsonProperty("floriferousness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Floriferousness { get; set; }
+
+        [JsonProperty("gamelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamelike { get; set; }
+
+        [JsonProperty("grig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Grig { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("interloan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Interloan { get; set; }
+
+        [JsonProperty("lithotomy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lithotomy { get; set; }
+
+        [JsonProperty("loric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loric { get; set; }
+
+        [JsonProperty("membranocoriaceous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranocoriaceous { get; set; }
+
+        [JsonProperty("membranogenic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranogenic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("overtrump", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overtrump { get; set; }
+
+        [JsonProperty("scotino", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scotino { get; set; }
+
+        [JsonProperty("seasonable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seasonable { get; set; }
+
+        [JsonProperty("sephen", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sephen { get; set; }
+
+        [JsonProperty("stigmarioid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stigmarioid { get; set; }
+
+        [JsonProperty("tired", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tired { get; set; }
+
+        [JsonProperty("trifid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trifid { get; set; }
+
+        [JsonProperty("undefeatedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undefeatedly { get; set; }
+
+        [JsonProperty("ungirlish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ungirlish { get; set; }
+    }
+
+    public partial record StrenuosityClass
+    {
+        [JsonProperty("bliss", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bliss { get; set; }
+
+        [JsonProperty("buccate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Buccate { get; set; }
+
+        [JsonProperty("bulletproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bulletproof { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("crumblingness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crumblingness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("engagedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Engagedly { get; set; }
+
+        [JsonProperty("fightable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fightable { get; set; }
+
+        [JsonProperty("hoariness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hoariness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hypopodium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hypopodium { get; set; }
+
+        [JsonProperty("luxurist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Luxurist { get; set; }
+
+        [JsonProperty("mechanician", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mechanician { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("Onopordon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Onopordon { get; set; }
+
+        [JsonProperty("podgily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Podgily { get; set; }
+
+        [JsonProperty("reformableness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Reformableness { get; set; }
+
+        [JsonProperty("scatterbrains", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scatterbrains { get; set; }
+
+        [JsonProperty("seminuria", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seminuria { get; set; }
+
+        [JsonProperty("Sodomite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sodomite { get; set; }
+
+        [JsonProperty("tramp", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tramp { get; set; }
+
+        [JsonProperty("undueness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undueness { get; set; }
+
+        [JsonProperty("worthily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Worthily { get; set; }
+
+        [JsonProperty("Yankeeist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yankeeist { get; set; }
+    }
+
+    public partial record TruantcyClass
+    {
+        [JsonProperty("alfiona")]
+        public dynamic? Alfiona { get; set; }
+
+        [JsonProperty("ascaridiasis")]
+        public dynamic? Ascaridiasis { get; set; }
+
+        [JsonProperty("bungey")]
+        public dynamic? Bungey { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("ceroxyle")]
+        public dynamic? Ceroxyle { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chorology")]
+        public dynamic? Chorology { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enmarble")]
+        public dynamic? Enmarble { get; set; }
+
+        [JsonProperty("Epeira")]
+        public dynamic? Epeira { get; set; }
+
+        [JsonProperty("Eurylaimi")]
+        public dynamic? Eurylaimi { get; set; }
+
+        [JsonProperty("germination")]
+        public dynamic? Germination { get; set; }
+
+        [JsonProperty("hallelujah")]
+        public dynamic? Hallelujah { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lev")]
+        public dynamic? Lev { get; set; }
+
+        [JsonProperty("mouthing")]
+        public dynamic? Mouthing { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("philliloo")]
+        public dynamic? Philliloo { get; set; }
+
+        [JsonProperty("planetal")]
+        public dynamic? Planetal { get; set; }
+
+        [JsonProperty("poney")]
+        public dynamic? Poney { get; set; }
+
+        [JsonProperty("punctualist")]
+        public dynamic? Punctualist { get; set; }
+
+        [JsonProperty("returnlessly")]
+        public dynamic? Returnlessly { get; set; }
+
+        [JsonProperty("skelder")]
+        public dynamic? Skelder { get; set; }
+
+        [JsonProperty("windwaywardly")]
+        public dynamic? Windwaywardly { get; set; }
+
+        [JsonProperty("Yuman")]
+        public dynamic? Yuman { get; set; }
+    }
+
+    public partial record UnimpeachablyClass
+    {
+        [JsonProperty("acerin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Acerin { get; set; }
+
+        [JsonProperty("Bobadil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bobadil { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chlorophylligenous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorophylligenous { get; set; }
+
+        [JsonProperty("conversational", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conversational { get; set; }
+
+        [JsonProperty("demiowl", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Demiowl { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ectorhinal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ectorhinal { get; set; }
+
+        [JsonProperty("gamblesomeness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamblesomeness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("irrorate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Irrorate { get; set; }
+
+        [JsonProperty("kindergartening", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Kindergartening { get; set; }
+
+        [JsonProperty("lateritic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lateritic { get; set; }
+
+        [JsonProperty("mespil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mespil { get; set; }
+
+        [JsonProperty("misconfiguration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Misconfiguration { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public dynamic? Nonbookish { get; set; }
+
+        [JsonProperty("planometry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Planometry { get; set; }
+
+        [JsonProperty("Quiina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quiina { get; set; }
+
+        [JsonProperty("Robert", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Robert { get; set; }
+
+        [JsonProperty("rot", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rot { get; set; }
+
+        [JsonProperty("subcinctorium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subcinctorium { get; set; }
+
+        [JsonProperty("tussocker", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tussocker { get; set; }
+
+        [JsonProperty("ultraproud", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ultraproud { get; set; }
+
+        [JsonProperty("unsuggestedness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsuggestedness { get; set; }
+    }
+
+    public partial record UnstressedClass
+    {
+        [JsonProperty("Alain", Required = Required.AllowNull)]
+        public dynamic Alain { get; set; }
+
+        [JsonProperty("Amphirhina", Required = Required.AllowNull)]
+        public dynamic Amphirhina { get; set; }
+
+        [JsonProperty("antimachinery", Required = Required.AllowNull)]
+        public dynamic Antimachinery { get; set; }
+
+        [JsonProperty("coldish", Required = Required.AllowNull)]
+        public dynamic Coldish { get; set; }
+
+        [JsonProperty("crantara", Required = Required.AllowNull)]
+        public dynamic Crantara { get; set; }
+
+        [JsonProperty("distinguishing", Required = Required.AllowNull)]
+        public dynamic Distinguishing { get; set; }
+
+        [JsonProperty("elytroposis", Required = Required.AllowNull)]
+        public dynamic Elytroposis { get; set; }
+
+        [JsonProperty("gentianwort", Required = Required.AllowNull)]
+        public dynamic Gentianwort { get; set; }
+
+        [JsonProperty("heliosis", Required = Required.AllowNull)]
+        public dynamic Heliosis { get; set; }
+
+        [JsonProperty("instrumental", Required = Required.AllowNull)]
+        public dynamic Instrumental { get; set; }
+
+        [JsonProperty("introinflection", Required = Required.AllowNull)]
+        public dynamic Introinflection { get; set; }
+
+        [JsonProperty("kala", Required = Required.AllowNull)]
+        public dynamic Kala { get; set; }
+
+        [JsonProperty("Lincolnian", Required = Required.AllowNull)]
+        public dynamic Lincolnian { get; set; }
+
+        [JsonProperty("metad", Required = Required.AllowNull)]
+        public dynamic Metad { get; set; }
+
+        [JsonProperty("Sarcophilus", Required = Required.AllowNull)]
+        public dynamic Sarcophilus { get; set; }
+
+        [JsonProperty("swingingly", Required = Required.AllowNull)]
+        public dynamic Swingingly { get; set; }
+
+        [JsonProperty("unconformity", Required = Required.AllowNull)]
+        public dynamic Unconformity { get; set; }
+
+        [JsonProperty("undecreed", Required = Required.AllowNull)]
+        public dynamic Undecreed { get; set; }
+
+        [JsonProperty("venerable", Required = Required.AllowNull)]
+        public dynamic Venerable { get; set; }
+
+        [JsonProperty("vowellessness", Required = Required.AllowNull)]
+        public dynamic Vowellessness { get; set; }
+    }
+
+    public partial record WrothyClass
+    {
+        [JsonProperty("Aeschynanthus", Required = Required.AllowNull)]
+        public dynamic Aeschynanthus { get; set; }
+
+        [JsonProperty("aquiferous", Required = Required.AllowNull)]
+        public dynamic Aquiferous { get; set; }
+
+        [JsonProperty("cheapener", Required = Required.AllowNull)]
+        public dynamic Cheapener { get; set; }
+
+        [JsonProperty("enumeration", Required = Required.AllowNull)]
+        public dynamic Enumeration { get; set; }
+
+        [JsonProperty("Ephesine", Required = Required.AllowNull)]
+        public dynamic Ephesine { get; set; }
+
+        [JsonProperty("escadrille", Required = Required.AllowNull)]
+        public dynamic Escadrille { get; set; }
+
+        [JsonProperty("estrous", Required = Required.AllowNull)]
+        public dynamic Estrous { get; set; }
+
+        [JsonProperty("interestedly", Required = Required.AllowNull)]
+        public dynamic Interestedly { get; set; }
+
+        [JsonProperty("katakinetomer", Required = Required.AllowNull)]
+        public dynamic Katakinetomer { get; set; }
+
+        [JsonProperty("mortification", Required = Required.AllowNull)]
+        public dynamic Mortification { get; set; }
+
+        [JsonProperty("morula", Required = Required.AllowNull)]
+        public dynamic Morula { get; set; }
+
+        [JsonProperty("orthosymmetrical", Required = Required.AllowNull)]
+        public dynamic Orthosymmetrical { get; set; }
+
+        [JsonProperty("overbark", Required = Required.AllowNull)]
+        public dynamic Overbark { get; set; }
+
+        [JsonProperty("politist", Required = Required.AllowNull)]
+        public dynamic Politist { get; set; }
+
+        [JsonProperty("qualified", Required = Required.AllowNull)]
+        public dynamic Qualified { get; set; }
+
+        [JsonProperty("sphenomalar", Required = Required.AllowNull)]
+        public dynamic Sphenomalar { get; set; }
+
+        [JsonProperty("throatful", Required = Required.AllowNull)]
+        public dynamic Throatful { get; set; }
+
+        [JsonProperty("transhumance", Required = Required.AllowNull)]
+        public dynamic Transhumance { get; set; }
+
+        [JsonProperty("triandrian", Required = Required.AllowNull)]
+        public dynamic Triandrian { get; set; }
+
+        [JsonProperty("unbooked", Required = Required.AllowNull)]
+        public dynamic Unbooked { get; set; }
+    }
+
+    public partial struct Protrusive
+    {
+        public double? Double;
+        public long?[]? UnionArray;
+
+        public static implicit operator Protrusive(double Double) => new Protrusive { Double = Double };
+        public static implicit operator Protrusive(long?[] UnionArray) => new Protrusive { UnionArray = UnionArray };
+    }
+
+    public partial struct PulpitismElement
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public PulpitismClass? PulpitismClass;
+
+        public static implicit operator PulpitismElement(double Double) => new PulpitismElement { Double = Double };
+        public static implicit operator PulpitismElement(long[] IntegerArray) => new PulpitismElement { IntegerArray = IntegerArray };
+        public static implicit operator PulpitismElement(PulpitismClass PulpitismClass) => new PulpitismElement { PulpitismClass = PulpitismClass };
+    }
+
+    public partial struct PyodermiaElement
+    {
+        public long? Integer;
+        public PyodermiaClass? PyodermiaClass;
+
+        public static implicit operator PyodermiaElement(long Integer) => new PyodermiaElement { Integer = Integer };
+        public static implicit operator PyodermiaElement(PyodermiaClass PyodermiaClass) => new PyodermiaElement { PyodermiaClass = PyodermiaClass };
+    }
+
+    public partial struct QuebrachineElement
+    {
+        public bool? Bool;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator QuebrachineElement(bool Bool) => new QuebrachineElement { Bool = Bool };
+        public static implicit operator QuebrachineElement(QuebrachineClass QuebrachineClass) => new QuebrachineElement { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => Bool == null && QuebrachineClass == null;
+    }
+
+    public partial struct Querier
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Querier(bool Bool) => new Querier { Bool = Bool };
+        public static implicit operator Querier(Dictionary<string, long> IntegerMap) => new Querier { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Rebarbative
+    {
+        public bool? Bool;
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Rebarbative(bool Bool) => new Rebarbative { Bool = Bool };
+        public static implicit operator Rebarbative(double Double) => new Rebarbative { Double = Double };
+        public static implicit operator Rebarbative(long[] IntegerArray) => new Rebarbative { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Retrocervical
+    {
+        public long? Integer;
+        public long?[]? UnionArray;
+
+        public static implicit operator Retrocervical(long Integer) => new Retrocervical { Integer = Integer };
+        public static implicit operator Retrocervical(long?[] UnionArray) => new Retrocervical { UnionArray = UnionArray };
+    }
+
+    public partial struct Revert
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Revert(bool Bool) => new Revert { Bool = Bool };
+        public static implicit operator Revert(string String) => new Revert { String = String };
+    }
+
+    public partial struct RewriteElement
+    {
+        public double? Double;
+        public dynamic[]? NullArray;
+        public RewriteClass? RewriteClass;
+
+        public static implicit operator RewriteElement(double Double) => new RewriteElement { Double = Double };
+        public static implicit operator RewriteElement(dynamic[] NullArray) => new RewriteElement { NullArray = NullArray };
+        public static implicit operator RewriteElement(RewriteClass RewriteClass) => new RewriteElement { RewriteClass = RewriteClass };
+    }
+
+    public partial struct Saccoderm
+    {
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Saccoderm(long[] IntegerArray) => new Saccoderm { IntegerArray = IntegerArray };
+        public static implicit operator Saccoderm(string String) => new Saccoderm { String = String };
+        public bool IsNull => IntegerArray == null && String == null;
+    }
+
+    public partial struct SantirElement
+    {
+        public double? Double;
+        public SantirClass? SantirClass;
+
+        public static implicit operator SantirElement(double Double) => new SantirElement { Double = Double };
+        public static implicit operator SantirElement(SantirClass SantirClass) => new SantirElement { SantirClass = SantirClass };
+    }
+
+    public partial struct Saprophilous
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Saprophilous(Dictionary<string, long> IntegerMap) => new Saprophilous { IntegerMap = IntegerMap };
+        public static implicit operator Saprophilous(string String) => new Saprophilous { String = String };
+        public bool IsNull => IntegerMap == null && String == null;
+    }
+
+    public partial struct SaxtenElement
+    {
+        public SaxtenClass? SaxtenClass;
+        public string? String;
+
+        public static implicit operator SaxtenElement(SaxtenClass SaxtenClass) => new SaxtenElement { SaxtenClass = SaxtenClass };
+        public static implicit operator SaxtenElement(string String) => new SaxtenElement { String = String };
+    }
+
+    public partial struct Scoffer
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Scoffer(Dictionary<string, long> IntegerMap) => new Scoffer { IntegerMap = IntegerMap };
+        public static implicit operator Scoffer(dynamic[] NullArray) => new Scoffer { NullArray = NullArray };
+        public bool IsNull => NullArray == null && IntegerMap == null;
+    }
+
+    public partial struct Scrampum
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+
+        public static implicit operator Scrampum(bool Bool) => new Scrampum { Bool = Bool };
+        public static implicit operator Scrampum(long[] IntegerArray) => new Scrampum { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Bool == null;
+    }
+
+    public partial struct Serpentinic
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Serpentinic(double Double) => new Serpentinic { Double = Double };
+        public static implicit operator Serpentinic(long[] IntegerArray) => new Serpentinic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Shadowable
+    {
+        public bool? Bool;
+        public long?[]? UnionArray;
+
+        public static implicit operator Shadowable(bool Bool) => new Shadowable { Bool = Bool };
+        public static implicit operator Shadowable(long?[] UnionArray) => new Shadowable { UnionArray = UnionArray };
+    }
+
+    public partial struct SisteringElement
+    {
+        public long? Integer;
+        public dynamic[]? NullArray;
+        public SisteringClass? SisteringClass;
+
+        public static implicit operator SisteringElement(long Integer) => new SisteringElement { Integer = Integer };
+        public static implicit operator SisteringElement(dynamic[] NullArray) => new SisteringElement { NullArray = NullArray };
+        public static implicit operator SisteringElement(SisteringClass SisteringClass) => new SisteringElement { SisteringClass = SisteringClass };
+    }
+
+    public partial struct Stagmometer
+    {
+        public string? String;
+        public long?[]? UnionArray;
+
+        public static implicit operator Stagmometer(string String) => new Stagmometer { String = String };
+        public static implicit operator Stagmometer(long?[] UnionArray) => new Stagmometer { UnionArray = UnionArray };
+    }
+
+    public partial struct Stimulability
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Stimulability(bool Bool) => new Stimulability { Bool = Bool };
+        public static implicit operator Stimulability(long Integer) => new Stimulability { Integer = Integer };
+        public static implicit operator Stimulability(Dictionary<string, long> IntegerMap) => new Stimulability { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Strangleable
+    {
+        public double? Double;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Strangleable(double Double) => new Strangleable { Double = Double };
+        public static implicit operator Strangleable(dynamic[] NullArray) => new Strangleable { NullArray = NullArray };
+    }
+
+    public partial struct StrenuosityElement
+    {
+        public dynamic[]? NullArray;
+        public StrenuosityClass? StrenuosityClass;
+
+        public static implicit operator StrenuosityElement(dynamic[] NullArray) => new StrenuosityElement { NullArray = NullArray };
+        public static implicit operator StrenuosityElement(StrenuosityClass StrenuosityClass) => new StrenuosityElement { StrenuosityClass = StrenuosityClass };
+    }
+
+    public partial struct Tabaxir
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Tabaxir(bool Bool) => new Tabaxir { Bool = Bool };
+        public static implicit operator Tabaxir(double Double) => new Tabaxir { Double = Double };
+    }
+
+    public partial struct Talpiform
+    {
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Talpiform(double Double) => new Talpiform { Double = Double };
+        public static implicit operator Talpiform(QuebrachineClass QuebrachineClass) => new Talpiform { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Double == null;
+    }
+
+    public partial struct Thwack
+    {
+        public bool? Bool;
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Thwack(bool Bool) => new Thwack { Bool = Bool };
+        public static implicit operator Thwack(double Double) => new Thwack { Double = Double };
+        public static implicit operator Thwack(QuebrachineClass QuebrachineClass) => new Thwack { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct Tortricine
+    {
+        public QuebrachineClass? QuebrachineClass;
+        public long?[]? UnionArray;
+
+        public static implicit operator Tortricine(QuebrachineClass QuebrachineClass) => new Tortricine { QuebrachineClass = QuebrachineClass };
+        public static implicit operator Tortricine(long?[] UnionArray) => new Tortricine { UnionArray = UnionArray };
+    }
+
+    public partial struct TruantcyElement
+    {
+        public bool? Bool;
+        public TruantcyClass? TruantcyClass;
+
+        public static implicit operator TruantcyElement(bool Bool) => new TruantcyElement { Bool = Bool };
+        public static implicit operator TruantcyElement(TruantcyClass TruantcyClass) => new TruantcyElement { TruantcyClass = TruantcyClass };
+    }
+
+    public partial struct Unbeginning
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public dynamic[]? NullArray;
+        public string? String;
+
+        public static implicit operator Unbeginning(Dictionary<string, long> IntegerMap) => new Unbeginning { IntegerMap = IntegerMap };
+        public static implicit operator Unbeginning(dynamic[] NullArray) => new Unbeginning { NullArray = NullArray };
+        public static implicit operator Unbeginning(string String) => new Unbeginning { String = String };
+    }
+
+    public partial struct Undesirability
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Undesirability(long[] IntegerArray) => new Undesirability { IntegerArray = IntegerArray };
+        public static implicit operator Undesirability(Dictionary<string, long> IntegerMap) => new Undesirability { IntegerMap = IntegerMap };
+        public static implicit operator Undesirability(string String) => new Undesirability { String = String };
+    }
+
+    public partial struct Unerasing
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Unerasing(long Integer) => new Unerasing { Integer = Integer };
+        public static implicit operator Unerasing(Dictionary<string, long> IntegerMap) => new Unerasing { IntegerMap = IntegerMap };
+        public static implicit operator Unerasing(dynamic[] NullArray) => new Unerasing { NullArray = NullArray };
+    }
+
+    public partial struct Unguentarium
+    {
+        public long? Integer;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Unguentarium(long Integer) => new Unguentarium { Integer = Integer };
+        public static implicit operator Unguentarium(dynamic[] NullArray) => new Unguentarium { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Integer == null;
+    }
+
+    public partial struct UnimpeachablyElement
+    {
+        public bool? Bool;
+        public UnimpeachablyClass? UnimpeachablyClass;
+
+        public static implicit operator UnimpeachablyElement(bool Bool) => new UnimpeachablyElement { Bool = Bool };
+        public static implicit operator UnimpeachablyElement(UnimpeachablyClass UnimpeachablyClass) => new UnimpeachablyElement { UnimpeachablyClass = UnimpeachablyClass };
+    }
+
+    public partial struct Unmortgaged
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unmortgaged(double Double) => new Unmortgaged { Double = Double };
+        public static implicit operator Unmortgaged(Dictionary<string, long> IntegerMap) => new Unmortgaged { IntegerMap = IntegerMap };
+        public bool IsNull => Double == null && IntegerMap == null;
+    }
+
+    public partial struct Unobstructed
+    {
+        public long? Integer;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Unobstructed(long Integer) => new Unobstructed { Integer = Integer };
+        public static implicit operator Unobstructed(QuebrachineClass QuebrachineClass) => new Unobstructed { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Integer == null;
+    }
+
+    public partial struct Unreceptivity
+    {
+        public long? Integer;
+        public dynamic[]? NullArray;
+        public string? String;
+
+        public static implicit operator Unreceptivity(long Integer) => new Unreceptivity { Integer = Integer };
+        public static implicit operator Unreceptivity(dynamic[] NullArray) => new Unreceptivity { NullArray = NullArray };
+        public static implicit operator Unreceptivity(string String) => new Unreceptivity { String = String };
+    }
+
+    public partial struct Unsatisfactoriness
+    {
+        public bool? Bool;
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Unsatisfactoriness(bool Bool) => new Unsatisfactoriness { Bool = Bool };
+        public static implicit operator Unsatisfactoriness(long Integer) => new Unsatisfactoriness { Integer = Integer };
+        public static implicit operator Unsatisfactoriness(long[] IntegerArray) => new Unsatisfactoriness { IntegerArray = IntegerArray };
+    }
+
+    public partial struct UnstressedElement
+    {
+        public bool? Bool;
+        public string? String;
+        public UnstressedClass? UnstressedClass;
+
+        public static implicit operator UnstressedElement(bool Bool) => new UnstressedElement { Bool = Bool };
+        public static implicit operator UnstressedElement(string String) => new UnstressedElement { String = String };
+        public static implicit operator UnstressedElement(UnstressedClass UnstressedClass) => new UnstressedElement { UnstressedClass = UnstressedClass };
+    }
+
+    public partial struct Untasked
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Untasked(double Double) => new Untasked { Double = Double };
+        public static implicit operator Untasked(Dictionary<string, long> IntegerMap) => new Untasked { IntegerMap = IntegerMap };
+        public static implicit operator Untasked(dynamic[] NullArray) => new Untasked { NullArray = NullArray };
+    }
+
+    public partial struct Unvarying
+    {
+        public bool? Bool;
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unvarying(bool Bool) => new Unvarying { Bool = Bool };
+        public static implicit operator Unvarying(double Double) => new Unvarying { Double = Double };
+        public static implicit operator Unvarying(Dictionary<string, long> IntegerMap) => new Unvarying { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Vehemently
+    {
+        public bool? Bool;
+        public dynamic[]? NullArray;
+
+        public static implicit operator Vehemently(bool Bool) => new Vehemently { Bool = Bool };
+        public static implicit operator Vehemently(dynamic[] NullArray) => new Vehemently { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Bool == null;
+    }
+
+    public partial struct Whitepot
+    {
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Whitepot(double Double) => new Whitepot { Double = Double };
+        public static implicit operator Whitepot(QuebrachineClass QuebrachineClass) => new Whitepot { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct WrothyElement
+    {
+        public dynamic[]? NullArray;
+        public WrothyClass? WrothyClass;
+
+        public static implicit operator WrothyElement(dynamic[] NullArray) => new WrothyElement { NullArray = NullArray };
+        public static implicit operator WrothyElement(WrothyClass WrothyClass) => new WrothyElement { WrothyClass = WrothyClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ProtrusiveConverter.Singleton,
+                PulpitismElementConverter.Singleton,
+                PyodermiaElementConverter.Singleton,
+                QuebrachineElementConverter.Singleton,
+                QuerierConverter.Singleton,
+                RebarbativeConverter.Singleton,
+                RetrocervicalConverter.Singleton,
+                RevertConverter.Singleton,
+                RewriteElementConverter.Singleton,
+                SaccodermConverter.Singleton,
+                SantirElementConverter.Singleton,
+                SaprophilousConverter.Singleton,
+                SaxtenElementConverter.Singleton,
+                ScofferConverter.Singleton,
+                ScrampumConverter.Singleton,
+                SerpentinicConverter.Singleton,
+                ShadowableConverter.Singleton,
+                SisteringElementConverter.Singleton,
+                StagmometerConverter.Singleton,
+                StimulabilityConverter.Singleton,
+                StrangleableConverter.Singleton,
+                StrenuosityElementConverter.Singleton,
+                TabaxirConverter.Singleton,
+                TalpiformConverter.Singleton,
+                ThwackConverter.Singleton,
+                TortricineConverter.Singleton,
+                TruantcyElementConverter.Singleton,
+                UnbeginningConverter.Singleton,
+                UndesirabilityConverter.Singleton,
+                UnerasingConverter.Singleton,
+                UnguentariumConverter.Singleton,
+                UnimpeachablyElementConverter.Singleton,
+                UnmortgagedConverter.Singleton,
+                UnobstructedConverter.Singleton,
+                UnreceptivityConverter.Singleton,
+                UnsatisfactorinessConverter.Singleton,
+                UnstressedElementConverter.Singleton,
+                UntaskedConverter.Singleton,
+                UnvaryingConverter.Singleton,
+                VehementlyConverter.Singleton,
+                WhitepotConverter.Singleton,
+                WrothyElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ProtrusiveConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protrusive) || t == typeof(Protrusive?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Protrusive { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Protrusive { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protrusive");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protrusive)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protrusive");
+        }
+
+        public static readonly ProtrusiveConverter Singleton = new ProtrusiveConverter();
+    }
+
+    internal class PulpitismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PulpitismElement) || t == typeof(PulpitismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PulpitismElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PulpitismClass>(reader);
+                    return new PulpitismElement { PulpitismClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new PulpitismElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PulpitismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PulpitismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.PulpitismClass != null)
+            {
+                serializer.Serialize(writer, value.PulpitismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PulpitismElement");
+        }
+
+        public static readonly PulpitismElementConverter Singleton = new PulpitismElementConverter();
+    }
+
+    internal class PyodermiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PyodermiaElement) || t == typeof(PyodermiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PyodermiaElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PyodermiaClass>(reader);
+                    return new PyodermiaElement { PyodermiaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PyodermiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PyodermiaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PyodermiaClass != null)
+            {
+                serializer.Serialize(writer, value.PyodermiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PyodermiaElement");
+        }
+
+        public static readonly PyodermiaElementConverter Singleton = new PyodermiaElementConverter();
+    }
+
+    internal class QuebrachineElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(QuebrachineElement) || t == typeof(QuebrachineElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new QuebrachineElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new QuebrachineElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new QuebrachineElement { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type QuebrachineElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (QuebrachineElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type QuebrachineElement");
+        }
+
+        public static readonly QuebrachineElementConverter Singleton = new QuebrachineElementConverter();
+    }
+
+    internal class QuerierConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Querier) || t == typeof(Querier?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Querier { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Querier { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Querier");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Querier)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Querier");
+        }
+
+        public static readonly QuerierConverter Singleton = new QuerierConverter();
+    }
+
+    internal class RebarbativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rebarbative) || t == typeof(Rebarbative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Rebarbative { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Rebarbative { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rebarbative { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rebarbative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rebarbative)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rebarbative");
+        }
+
+        public static readonly RebarbativeConverter Singleton = new RebarbativeConverter();
+    }
+
+    internal class RetrocervicalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Retrocervical) || t == typeof(Retrocervical?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Retrocervical { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Retrocervical { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Retrocervical");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Retrocervical)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Retrocervical");
+        }
+
+        public static readonly RetrocervicalConverter Singleton = new RetrocervicalConverter();
+    }
+
+    internal class RevertConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Revert) || t == typeof(Revert?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Revert { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Revert { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Revert");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Revert)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Revert");
+        }
+
+        public static readonly RevertConverter Singleton = new RevertConverter();
+    }
+
+    internal class RewriteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RewriteElement) || t == typeof(RewriteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new RewriteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<RewriteClass>(reader);
+                    return new RewriteElement { RewriteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new RewriteElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type RewriteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RewriteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.RewriteClass != null)
+            {
+                serializer.Serialize(writer, value.RewriteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type RewriteElement");
+        }
+
+        public static readonly RewriteElementConverter Singleton = new RewriteElementConverter();
+    }
+
+    internal class SaccodermConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saccoderm) || t == typeof(Saccoderm?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saccoderm { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saccoderm { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Saccoderm { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Saccoderm");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saccoderm)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saccoderm");
+        }
+
+        public static readonly SaccodermConverter Singleton = new SaccodermConverter();
+    }
+
+    internal class SantirElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SantirElement) || t == typeof(SantirElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new SantirElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SantirClass>(reader);
+                    return new SantirElement { SantirClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SantirElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SantirElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.SantirClass != null)
+            {
+                serializer.Serialize(writer, value.SantirClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SantirElement");
+        }
+
+        public static readonly SantirElementConverter Singleton = new SantirElementConverter();
+    }
+
+    internal class SaprophilousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saprophilous) || t == typeof(Saprophilous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saprophilous { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saprophilous { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Saprophilous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Saprophilous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saprophilous)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saprophilous");
+        }
+
+        public static readonly SaprophilousConverter Singleton = new SaprophilousConverter();
+    }
+
+    internal class SaxtenElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SaxtenElement) || t == typeof(SaxtenElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new SaxtenElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SaxtenClass>(reader);
+                    return new SaxtenElement { SaxtenClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SaxtenElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SaxtenElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.SaxtenClass != null)
+            {
+                serializer.Serialize(writer, value.SaxtenClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SaxtenElement");
+        }
+
+        public static readonly SaxtenElementConverter Singleton = new SaxtenElementConverter();
+    }
+
+    internal class ScofferConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scoffer) || t == typeof(Scoffer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scoffer { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Scoffer { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Scoffer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scoffer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scoffer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scoffer");
+        }
+
+        public static readonly ScofferConverter Singleton = new ScofferConverter();
+    }
+
+    internal class ScrampumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scrampum) || t == typeof(Scrampum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scrampum { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Scrampum { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Scrampum { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scrampum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scrampum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scrampum");
+        }
+
+        public static readonly ScrampumConverter Singleton = new ScrampumConverter();
+    }
+
+    internal class SerpentinicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Serpentinic) || t == typeof(Serpentinic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Serpentinic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Serpentinic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Serpentinic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Serpentinic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Serpentinic");
+        }
+
+        public static readonly SerpentinicConverter Singleton = new SerpentinicConverter();
+    }
+
+    internal class ShadowableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shadowable) || t == typeof(Shadowable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Shadowable { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Shadowable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shadowable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shadowable)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shadowable");
+        }
+
+        public static readonly ShadowableConverter Singleton = new ShadowableConverter();
+    }
+
+    internal class SisteringElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SisteringElement) || t == typeof(SisteringElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new SisteringElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SisteringClass>(reader);
+                    return new SisteringElement { SisteringClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new SisteringElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type SisteringElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SisteringElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.SisteringClass != null)
+            {
+                serializer.Serialize(writer, value.SisteringClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SisteringElement");
+        }
+
+        public static readonly SisteringElementConverter Singleton = new SisteringElementConverter();
+    }
+
+    internal class StagmometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stagmometer) || t == typeof(Stagmometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Stagmometer { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Stagmometer { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Stagmometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stagmometer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stagmometer");
+        }
+
+        public static readonly StagmometerConverter Singleton = new StagmometerConverter();
+    }
+
+    internal class StimulabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stimulability) || t == typeof(Stimulability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Stimulability { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Stimulability { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Stimulability { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Stimulability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stimulability)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stimulability");
+        }
+
+        public static readonly StimulabilityConverter Singleton = new StimulabilityConverter();
+    }
+
+    internal class StrangleableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Strangleable) || t == typeof(Strangleable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Strangleable { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Strangleable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Strangleable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Strangleable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Strangleable");
+        }
+
+        public static readonly StrangleableConverter Singleton = new StrangleableConverter();
+    }
+
+    internal class StrenuosityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(StrenuosityElement) || t == typeof(StrenuosityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<StrenuosityClass>(reader);
+                    return new StrenuosityElement { StrenuosityClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new StrenuosityElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type StrenuosityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (StrenuosityElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.StrenuosityClass != null)
+            {
+                serializer.Serialize(writer, value.StrenuosityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type StrenuosityElement");
+        }
+
+        public static readonly StrenuosityElementConverter Singleton = new StrenuosityElementConverter();
+    }
+
+    internal class TabaxirConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tabaxir) || t == typeof(Tabaxir?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Tabaxir { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Tabaxir { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Tabaxir");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tabaxir)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tabaxir");
+        }
+
+        public static readonly TabaxirConverter Singleton = new TabaxirConverter();
+    }
+
+    internal class TalpiformConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Talpiform) || t == typeof(Talpiform?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Talpiform { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Talpiform { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Talpiform { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Talpiform");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Talpiform)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Talpiform");
+        }
+
+        public static readonly TalpiformConverter Singleton = new TalpiformConverter();
+    }
+
+    internal class ThwackConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Thwack) || t == typeof(Thwack?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Thwack { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Thwack { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Thwack { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Thwack");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Thwack)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Thwack");
+        }
+
+        public static readonly ThwackConverter Singleton = new ThwackConverter();
+    }
+
+    internal class TortricineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tortricine) || t == typeof(Tortricine?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Tortricine { QuebrachineClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Tortricine { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Tortricine");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tortricine)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tortricine");
+        }
+
+        public static readonly TortricineConverter Singleton = new TortricineConverter();
+    }
+
+    internal class TruantcyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TruantcyElement) || t == typeof(TruantcyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new TruantcyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TruantcyClass>(reader);
+                    return new TruantcyElement { TruantcyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type TruantcyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TruantcyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.TruantcyClass != null)
+            {
+                serializer.Serialize(writer, value.TruantcyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type TruantcyElement");
+        }
+
+        public static readonly TruantcyElementConverter Singleton = new TruantcyElementConverter();
+    }
+
+    internal class UnbeginningConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unbeginning) || t == typeof(Unbeginning?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unbeginning { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unbeginning { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Unbeginning { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unbeginning");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unbeginning)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unbeginning");
+        }
+
+        public static readonly UnbeginningConverter Singleton = new UnbeginningConverter();
+    }
+
+    internal class UndesirabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Undesirability) || t == typeof(Undesirability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Undesirability { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Undesirability { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Undesirability { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Undesirability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Undesirability)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Undesirability");
+        }
+
+        public static readonly UndesirabilityConverter Singleton = new UndesirabilityConverter();
+    }
+
+    internal class UnerasingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unerasing) || t == typeof(Unerasing?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unerasing { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unerasing { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Unerasing { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unerasing");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unerasing)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unerasing");
+        }
+
+        public static readonly UnerasingConverter Singleton = new UnerasingConverter();
+    }
+
+    internal class UnguentariumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unguentarium) || t == typeof(Unguentarium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unguentarium { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unguentarium { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Unguentarium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unguentarium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unguentarium)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unguentarium");
+        }
+
+        public static readonly UnguentariumConverter Singleton = new UnguentariumConverter();
+    }
+
+    internal class UnimpeachablyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnimpeachablyElement) || t == typeof(UnimpeachablyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnimpeachablyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnimpeachablyClass>(reader);
+                    return new UnimpeachablyElement { UnimpeachablyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnimpeachablyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnimpeachablyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnimpeachablyClass != null)
+            {
+                serializer.Serialize(writer, value.UnimpeachablyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnimpeachablyElement");
+        }
+
+        public static readonly UnimpeachablyElementConverter Singleton = new UnimpeachablyElementConverter();
+    }
+
+    internal class UnmortgagedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unmortgaged) || t == typeof(Unmortgaged?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unmortgaged { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unmortgaged { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unmortgaged { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unmortgaged");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unmortgaged)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unmortgaged");
+        }
+
+        public static readonly UnmortgagedConverter Singleton = new UnmortgagedConverter();
+    }
+
+    internal class UnobstructedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unobstructed) || t == typeof(Unobstructed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unobstructed { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unobstructed { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Unobstructed { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unobstructed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unobstructed)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unobstructed");
+        }
+
+        public static readonly UnobstructedConverter Singleton = new UnobstructedConverter();
+    }
+
+    internal class UnreceptivityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unreceptivity) || t == typeof(Unreceptivity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unreceptivity { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unreceptivity { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Unreceptivity { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unreceptivity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unreceptivity)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unreceptivity");
+        }
+
+        public static readonly UnreceptivityConverter Singleton = new UnreceptivityConverter();
+    }
+
+    internal class UnsatisfactorinessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unsatisfactoriness) || t == typeof(Unsatisfactoriness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unsatisfactoriness { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unsatisfactoriness { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Unsatisfactoriness { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unsatisfactoriness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unsatisfactoriness)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unsatisfactoriness");
+        }
+
+        public static readonly UnsatisfactorinessConverter Singleton = new UnsatisfactorinessConverter();
+    }
+
+    internal class UnstressedElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnstressedElement) || t == typeof(UnstressedElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnstressedElement { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new UnstressedElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnstressedClass>(reader);
+                    return new UnstressedElement { UnstressedClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnstressedElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnstressedElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnstressedClass != null)
+            {
+                serializer.Serialize(writer, value.UnstressedClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnstressedElement");
+        }
+
+        public static readonly UnstressedElementConverter Singleton = new UnstressedElementConverter();
+    }
+
+    internal class UntaskedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Untasked) || t == typeof(Untasked?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Untasked { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Untasked { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Untasked { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Untasked");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Untasked)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Untasked");
+        }
+
+        public static readonly UntaskedConverter Singleton = new UntaskedConverter();
+    }
+
+    internal class UnvaryingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unvarying) || t == typeof(Unvarying?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unvarying { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unvarying { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unvarying { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unvarying");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unvarying)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unvarying");
+        }
+
+        public static readonly UnvaryingConverter Singleton = new UnvaryingConverter();
+    }
+
+    internal class VehementlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Vehemently) || t == typeof(Vehemently?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Vehemently { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Vehemently { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new Vehemently { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Vehemently");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Vehemently)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Vehemently");
+        }
+
+        public static readonly VehementlyConverter Singleton = new VehementlyConverter();
+    }
+
+    internal class WhitepotConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Whitepot) || t == typeof(Whitepot?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Whitepot { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Whitepot { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Whitepot");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Whitepot)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Whitepot");
+        }
+
+        public static readonly WhitepotConverter Singleton = new WhitepotConverter();
+    }
+
+    internal class WrothyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(WrothyElement) || t == typeof(WrothyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<WrothyClass>(reader);
+                    return new WrothyElement { WrothyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<dynamic[]>(reader);
+                    return new WrothyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type WrothyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (WrothyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.WrothyClass != null)
+            {
+                serializer.Serialize(writer, value.WrothyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type WrothyElement");
+        }
+
+        public static readonly WrothyElementConverter Singleton = new WrothyElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations4.json/array-type-list--e30a0413f432/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations4.json/array-type-list--e30a0413f432/QuickType.cs
new file mode 100644
index 0000000..bfbd2e6
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations4.json/array-type-list--e30a0413f432/QuickType.cs
@@ -0,0 +1,3484 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("protrusive", Required = Required.Always)]
+        public List<Protrusive> Protrusive { get; set; }
+
+        [JsonProperty("pulpitism", Required = Required.Always)]
+        public List<PulpitismElement> Pulpitism { get; set; }
+
+        [JsonProperty("pyodermia", Required = Required.Always)]
+        public List<PyodermiaElement> Pyodermia { get; set; }
+
+        [JsonProperty("quebrachine", Required = Required.Always)]
+        public List<QuebrachineElement> Quebrachine { get; set; }
+
+        [JsonProperty("querier", Required = Required.Always)]
+        public List<Querier> Querier { get; set; }
+
+        [JsonProperty("rebarbative", Required = Required.Always)]
+        public List<Rebarbative> Rebarbative { get; set; }
+
+        [JsonProperty("reimagine", Required = Required.Always)]
+        public List<Reimagine> Reimagine { get; set; }
+
+        [JsonProperty("ressaut", Required = Required.Always)]
+        public Ressaut Ressaut { get; set; }
+
+        [JsonProperty("retrocervical", Required = Required.Always)]
+        public List<Retrocervical> Retrocervical { get; set; }
+
+        [JsonProperty("revert", Required = Required.Always)]
+        public List<Revert> Revert { get; set; }
+
+        [JsonProperty("rewrite", Required = Required.Always)]
+        public List<RewriteElement> Rewrite { get; set; }
+
+        [JsonProperty("saccoderm", Required = Required.Always)]
+        public List<Saccoderm> Saccoderm { get; set; }
+
+        [JsonProperty("santir", Required = Required.Always)]
+        public List<SantirElement> Santir { get; set; }
+
+        [JsonProperty("saprophilous", Required = Required.Always)]
+        public List<Saprophilous> Saprophilous { get; set; }
+
+        [JsonProperty("saxten", Required = Required.Always)]
+        public List<SaxtenElement> Saxten { get; set; }
+
+        [JsonProperty("scatty", Required = Required.Always)]
+        public List<Scatty?> Scatty { get; set; }
+
+        [JsonProperty("scoffer", Required = Required.Always)]
+        public List<Scoffer> Scoffer { get; set; }
+
+        [JsonProperty("scrampum", Required = Required.Always)]
+        public List<Scrampum> Scrampum { get; set; }
+
+        [JsonProperty("semantic", Required = Required.Always)]
+        public double Semantic { get; set; }
+
+        [JsonProperty("serpentinic", Required = Required.Always)]
+        public List<Serpentinic> Serpentinic { get; set; }
+
+        [JsonProperty("shadowable", Required = Required.Always)]
+        public List<Shadowable> Shadowable { get; set; }
+
+        [JsonProperty("sistering", Required = Required.Always)]
+        public List<SisteringElement> Sistering { get; set; }
+
+        [JsonProperty("staghunting", Required = Required.Always)]
+        public List<Staghunting> Staghunting { get; set; }
+
+        [JsonProperty("stagmometer", Required = Required.Always)]
+        public List<Stagmometer> Stagmometer { get; set; }
+
+        [JsonProperty("stimulability", Required = Required.Always)]
+        public List<Stimulability> Stimulability { get; set; }
+
+        [JsonProperty("strangleable", Required = Required.Always)]
+        public List<Strangleable> Strangleable { get; set; }
+
+        [JsonProperty("strenuosity", Required = Required.Always)]
+        public List<StrenuosityElement> Strenuosity { get; set; }
+
+        [JsonProperty("tabaxir", Required = Required.Always)]
+        public List<Tabaxir> Tabaxir { get; set; }
+
+        [JsonProperty("talpiform", Required = Required.Always)]
+        public List<Talpiform> Talpiform { get; set; }
+
+        [JsonProperty("thwack", Required = Required.Always)]
+        public List<Thwack> Thwack { get; set; }
+
+        [JsonProperty("to", Required = Required.Always)]
+        public List<double?> To { get; set; }
+
+        [JsonProperty("tortricine", Required = Required.Always)]
+        public List<Tortricine> Tortricine { get; set; }
+
+        [JsonProperty("truantcy", Required = Required.Always)]
+        public List<TruantcyElement> Truantcy { get; set; }
+
+        [JsonProperty("turgesce", Required = Required.Always)]
+        public List<string> Turgesce { get; set; }
+
+        [JsonProperty("unbeginning", Required = Required.Always)]
+        public List<Unbeginning> Unbeginning { get; set; }
+
+        [JsonProperty("underdunged", Required = Required.Always)]
+        public List<double> Underdunged { get; set; }
+
+        [JsonProperty("undesirability", Required = Required.Always)]
+        public List<Undesirability> Undesirability { get; set; }
+
+        [JsonProperty("unerasing", Required = Required.Always)]
+        public List<Unerasing> Unerasing { get; set; }
+
+        [JsonProperty("unguentarium", Required = Required.Always)]
+        public List<Unguentarium> Unguentarium { get; set; }
+
+        [JsonProperty("unimpeachably", Required = Required.Always)]
+        public List<UnimpeachablyElement> Unimpeachably { get; set; }
+
+        [JsonProperty("unmortgaged", Required = Required.Always)]
+        public List<Unmortgaged> Unmortgaged { get; set; }
+
+        [JsonProperty("unobstructed", Required = Required.Always)]
+        public List<Unobstructed> Unobstructed { get; set; }
+
+        [JsonProperty("unreceptivity", Required = Required.Always)]
+        public List<Unreceptivity> Unreceptivity { get; set; }
+
+        [JsonProperty("unsatisfactoriness", Required = Required.Always)]
+        public List<Unsatisfactoriness> Unsatisfactoriness { get; set; }
+
+        [JsonProperty("unsecurity", Required = Required.Always)]
+        public List<long> Unsecurity { get; set; }
+
+        [JsonProperty("unstressed", Required = Required.Always)]
+        public List<UnstressedElement> Unstressed { get; set; }
+
+        [JsonProperty("untasked", Required = Required.Always)]
+        public List<Untasked> Untasked { get; set; }
+
+        [JsonProperty("unvarying", Required = Required.Always)]
+        public List<Unvarying> Unvarying { get; set; }
+
+        [JsonProperty("vehemently", Required = Required.Always)]
+        public List<Vehemently> Vehemently { get; set; }
+
+        [JsonProperty("warriorship", Required = Required.Always)]
+        public Dictionary<string, bool> Warriorship { get; set; }
+
+        [JsonProperty("whitepot", Required = Required.Always)]
+        public List<Whitepot> Whitepot { get; set; }
+
+        [JsonProperty("wrothy", Required = Required.Always)]
+        public List<WrothyElement> Wrothy { get; set; }
+    }
+
+    public partial record PulpitismClass
+    {
+        [JsonProperty("abnet", Required = Required.AllowNull)]
+        public object Abnet { get; set; }
+
+        [JsonProperty("buckhorn", Required = Required.AllowNull)]
+        public object Buckhorn { get; set; }
+
+        [JsonProperty("calciform", Required = Required.AllowNull)]
+        public object Calciform { get; set; }
+
+        [JsonProperty("chelophore", Required = Required.AllowNull)]
+        public object Chelophore { get; set; }
+
+        [JsonProperty("cogitation", Required = Required.AllowNull)]
+        public object Cogitation { get; set; }
+
+        [JsonProperty("decreeable", Required = Required.AllowNull)]
+        public object Decreeable { get; set; }
+
+        [JsonProperty("despicable", Required = Required.AllowNull)]
+        public object Despicable { get; set; }
+
+        [JsonProperty("isodiazo", Required = Required.AllowNull)]
+        public object Isodiazo { get; set; }
+
+        [JsonProperty("jadedly", Required = Required.AllowNull)]
+        public object Jadedly { get; set; }
+
+        [JsonProperty("leptochlorite", Required = Required.AllowNull)]
+        public object Leptochlorite { get; set; }
+
+        [JsonProperty("nursling", Required = Required.AllowNull)]
+        public object Nursling { get; set; }
+
+        [JsonProperty("palamedean", Required = Required.AllowNull)]
+        public object Palamedean { get; set; }
+
+        [JsonProperty("photoheliograph", Required = Required.AllowNull)]
+        public object Photoheliograph { get; set; }
+
+        [JsonProperty("pipewood", Required = Required.AllowNull)]
+        public object Pipewood { get; set; }
+
+        [JsonProperty("roberd", Required = Required.AllowNull)]
+        public object Roberd { get; set; }
+
+        [JsonProperty("statable", Required = Required.AllowNull)]
+        public object Statable { get; set; }
+
+        [JsonProperty("superassume", Required = Required.AllowNull)]
+        public object Superassume { get; set; }
+
+        [JsonProperty("syllabe", Required = Required.AllowNull)]
+        public object Syllabe { get; set; }
+
+        [JsonProperty("toughhead", Required = Required.AllowNull)]
+        public object Toughhead { get; set; }
+
+        [JsonProperty("underburn", Required = Required.AllowNull)]
+        public object Underburn { get; set; }
+    }
+
+    public partial record PyodermiaClass
+    {
+        [JsonProperty("aphoristically", Required = Required.AllowNull)]
+        public object Aphoristically { get; set; }
+
+        [JsonProperty("apophyllous", Required = Required.AllowNull)]
+        public object Apophyllous { get; set; }
+
+        [JsonProperty("cognize", Required = Required.AllowNull)]
+        public object Cognize { get; set; }
+
+        [JsonProperty("dermonosology", Required = Required.AllowNull)]
+        public object Dermonosology { get; set; }
+
+        [JsonProperty("Gyppo", Required = Required.AllowNull)]
+        public object Gyppo { get; set; }
+
+        [JsonProperty("ither", Required = Required.AllowNull)]
+        public object Ither { get; set; }
+
+        [JsonProperty("juglandaceous", Required = Required.AllowNull)]
+        public object Juglandaceous { get; set; }
+
+        [JsonProperty("litho", Required = Required.AllowNull)]
+        public object Litho { get; set; }
+
+        [JsonProperty("macropterous", Required = Required.AllowNull)]
+        public object Macropterous { get; set; }
+
+        [JsonProperty("photographer", Required = Required.AllowNull)]
+        public object Photographer { get; set; }
+
+        [JsonProperty("romancing", Required = Required.AllowNull)]
+        public object Romancing { get; set; }
+
+        [JsonProperty("rumness", Required = Required.AllowNull)]
+        public object Rumness { get; set; }
+
+        [JsonProperty("somniloquist", Required = Required.AllowNull)]
+        public object Somniloquist { get; set; }
+
+        [JsonProperty("stressfully", Required = Required.AllowNull)]
+        public object Stressfully { get; set; }
+
+        [JsonProperty("tactically", Required = Required.AllowNull)]
+        public object Tactically { get; set; }
+
+        [JsonProperty("tracheophony", Required = Required.AllowNull)]
+        public object Tracheophony { get; set; }
+
+        [JsonProperty("unappositely", Required = Required.AllowNull)]
+        public object Unappositely { get; set; }
+
+        [JsonProperty("unclothedly", Required = Required.AllowNull)]
+        public object Unclothedly { get; set; }
+
+        [JsonProperty("unimplied", Required = Required.AllowNull)]
+        public object Unimplied { get; set; }
+
+        [JsonProperty("unsyncopated", Required = Required.AllowNull)]
+        public object Unsyncopated { get; set; }
+    }
+
+    public partial record QuebrachineClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Reimagine
+    {
+        [JsonProperty("adducible")]
+        public object? Adducible { get; set; }
+
+        [JsonProperty("anabolin")]
+        public object? Anabolin { get; set; }
+
+        [JsonProperty("brainy")]
+        public object? Brainy { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chrysamine")]
+        public object? Chrysamine { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("fluxweed")]
+        public object? Fluxweed { get; set; }
+
+        [JsonProperty("glaucine")]
+        public object? Glaucine { get; set; }
+
+        [JsonProperty("grobianism")]
+        public object? Grobianism { get; set; }
+
+        [JsonProperty("Hermo")]
+        public object? Hermo { get; set; }
+
+        [JsonProperty("hieroglyphist")]
+        public object? Hieroglyphist { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("icteroid")]
+        public object? Icteroid { get; set; }
+
+        [JsonProperty("immortal")]
+        public object? Immortal { get; set; }
+
+        [JsonProperty("impetulant")]
+        public object? Impetulant { get; set; }
+
+        [JsonProperty("irrigate")]
+        public object? Irrigate { get; set; }
+
+        [JsonProperty("myxedema")]
+        public object? Myxedema { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("onyx")]
+        public object? Onyx { get; set; }
+
+        [JsonProperty("repasser")]
+        public object? Repasser { get; set; }
+
+        [JsonProperty("septomarginal")]
+        public object? Septomarginal { get; set; }
+
+        [JsonProperty("subdie")]
+        public object? Subdie { get; set; }
+
+        [JsonProperty("tibiometatarsal")]
+        public object? Tibiometatarsal { get; set; }
+
+        [JsonProperty("waltzlike")]
+        public object? Waltzlike { get; set; }
+    }
+
+    public partial record Ressaut
+    {
+        [JsonProperty("apperceptive", Required = Required.Always)]
+        public string Apperceptive { get; set; }
+
+        [JsonProperty("cuttoo", Required = Required.Always)]
+        public string Cuttoo { get; set; }
+
+        [JsonProperty("douser", Required = Required.Always)]
+        public string Douser { get; set; }
+
+        [JsonProperty("drinkproof", Required = Required.Always)]
+        public string Drinkproof { get; set; }
+
+        [JsonProperty("forementioned", Required = Required.Always)]
+        public string Forementioned { get; set; }
+
+        [JsonProperty("Freesia", Required = Required.Always)]
+        public string Freesia { get; set; }
+
+        [JsonProperty("Genevieve", Required = Required.Always)]
+        public string Genevieve { get; set; }
+
+        [JsonProperty("hyperdiabolical", Required = Required.Always)]
+        public string Hyperdiabolical { get; set; }
+
+        [JsonProperty("hypocone", Required = Required.Always)]
+        public string Hypocone { get; set; }
+
+        [JsonProperty("irreverentially", Required = Required.Always)]
+        public string Irreverentially { get; set; }
+
+        [JsonProperty("jumart", Required = Required.Always)]
+        public string Jumart { get; set; }
+
+        [JsonProperty("Mimosaceae", Required = Required.Always)]
+        public string Mimosaceae { get; set; }
+
+        [JsonProperty("mollicrush", Required = Required.Always)]
+        public string Mollicrush { get; set; }
+
+        [JsonProperty("nedder", Required = Required.Always)]
+        public string Nedder { get; set; }
+
+        [JsonProperty("retinasphalt", Required = Required.Always)]
+        public string Retinasphalt { get; set; }
+
+        [JsonProperty("sough", Required = Required.Always)]
+        public string Sough { get; set; }
+
+        [JsonProperty("steading", Required = Required.Always)]
+        public string Steading { get; set; }
+
+        [JsonProperty("Theopaschitism", Required = Required.Always)]
+        public string Theopaschitism { get; set; }
+
+        [JsonProperty("undurableness", Required = Required.Always)]
+        public string Undurableness { get; set; }
+
+        [JsonProperty("unmingleable", Required = Required.Always)]
+        public string Unmingleable { get; set; }
+    }
+
+    public partial record RewriteClass
+    {
+        [JsonProperty("accountancy", Required = Required.AllowNull)]
+        public object Accountancy { get; set; }
+
+        [JsonProperty("cacotrophic", Required = Required.AllowNull)]
+        public object Cacotrophic { get; set; }
+
+        [JsonProperty("contest", Required = Required.AllowNull)]
+        public object Contest { get; set; }
+
+        [JsonProperty("couthily", Required = Required.AllowNull)]
+        public object Couthily { get; set; }
+
+        [JsonProperty("falculate", Required = Required.AllowNull)]
+        public object Falculate { get; set; }
+
+        [JsonProperty("foreseize", Required = Required.AllowNull)]
+        public object Foreseize { get; set; }
+
+        [JsonProperty("Hyades", Required = Required.AllowNull)]
+        public object Hyades { get; set; }
+
+        [JsonProperty("lemnad", Required = Required.AllowNull)]
+        public object Lemnad { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.AllowNull)]
+        public object Monotheistically { get; set; }
+
+        [JsonProperty("nonflying", Required = Required.AllowNull)]
+        public object Nonflying { get; set; }
+
+        [JsonProperty("Ptenoglossa", Required = Required.AllowNull)]
+        public object Ptenoglossa { get; set; }
+
+        [JsonProperty("repatch", Required = Required.AllowNull)]
+        public object Repatch { get; set; }
+
+        [JsonProperty("rodman", Required = Required.AllowNull)]
+        public object Rodman { get; set; }
+
+        [JsonProperty("strung", Required = Required.AllowNull)]
+        public object Strung { get; set; }
+
+        [JsonProperty("titmal", Required = Required.AllowNull)]
+        public object Titmal { get; set; }
+
+        [JsonProperty("twalpennyworth", Required = Required.AllowNull)]
+        public object Twalpennyworth { get; set; }
+
+        [JsonProperty("unblamable", Required = Required.AllowNull)]
+        public object Unblamable { get; set; }
+
+        [JsonProperty("vertical", Required = Required.AllowNull)]
+        public object Vertical { get; set; }
+
+        [JsonProperty("Whiggification", Required = Required.AllowNull)]
+        public object Whiggification { get; set; }
+
+        [JsonProperty("yardman", Required = Required.AllowNull)]
+        public object Yardman { get; set; }
+    }
+
+    public partial record SantirClass
+    {
+        [JsonProperty("admiredly", Required = Required.AllowNull)]
+        public object Admiredly { get; set; }
+
+        [JsonProperty("demicaponier", Required = Required.AllowNull)]
+        public object Demicaponier { get; set; }
+
+        [JsonProperty("epitympanic", Required = Required.AllowNull)]
+        public object Epitympanic { get; set; }
+
+        [JsonProperty("investitor", Required = Required.AllowNull)]
+        public object Investitor { get; set; }
+
+        [JsonProperty("lupiform", Required = Required.AllowNull)]
+        public object Lupiform { get; set; }
+
+        [JsonProperty("monoflagellate", Required = Required.AllowNull)]
+        public object Monoflagellate { get; set; }
+
+        [JsonProperty("paleoethnic", Required = Required.AllowNull)]
+        public object Paleoethnic { get; set; }
+
+        [JsonProperty("prediscountable", Required = Required.AllowNull)]
+        public object Prediscountable { get; set; }
+
+        [JsonProperty("rhetoricals", Required = Required.AllowNull)]
+        public object Rhetoricals { get; set; }
+
+        [JsonProperty("roomth", Required = Required.AllowNull)]
+        public object Roomth { get; set; }
+
+        [JsonProperty("saccharose", Required = Required.AllowNull)]
+        public object Saccharose { get; set; }
+
+        [JsonProperty("septonasal", Required = Required.AllowNull)]
+        public object Septonasal { get; set; }
+
+        [JsonProperty("serpenticide", Required = Required.AllowNull)]
+        public object Serpenticide { get; set; }
+
+        [JsonProperty("setarious", Required = Required.AllowNull)]
+        public object Setarious { get; set; }
+
+        [JsonProperty("spaework", Required = Required.AllowNull)]
+        public object Spaework { get; set; }
+
+        [JsonProperty("stylite", Required = Required.AllowNull)]
+        public object Stylite { get; set; }
+
+        [JsonProperty("Suessiones", Required = Required.AllowNull)]
+        public object Suessiones { get; set; }
+
+        [JsonProperty("timelily", Required = Required.AllowNull)]
+        public object Timelily { get; set; }
+
+        [JsonProperty("unprofaned", Required = Required.AllowNull)]
+        public object Unprofaned { get; set; }
+
+        [JsonProperty("vorticular", Required = Required.AllowNull)]
+        public object Vorticular { get; set; }
+    }
+
+    public partial record SaxtenClass
+    {
+        [JsonProperty("algarrobilla")]
+        public object? Algarrobilla { get; set; }
+
+        [JsonProperty("bowgrace")]
+        public object? Bowgrace { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Centaurid")]
+        public object? Centaurid { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("flix")]
+        public object? Flix { get; set; }
+
+        [JsonProperty("germanely")]
+        public object? Germanely { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("inhume")]
+        public object? Inhume { get; set; }
+
+        [JsonProperty("lepidote")]
+        public object? Lepidote { get; set; }
+
+        [JsonProperty("megalochirous")]
+        public object? Megalochirous { get; set; }
+
+        [JsonProperty("ninepenny")]
+        public object? Ninepenny { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("nondeist")]
+        public object? Nondeist { get; set; }
+
+        [JsonProperty("nymphaeaceous")]
+        public object? Nymphaeaceous { get; set; }
+
+        [JsonProperty("parietofrontal")]
+        public object? Parietofrontal { get; set; }
+
+        [JsonProperty("sancyite")]
+        public object? Sancyite { get; set; }
+
+        [JsonProperty("subjectivist")]
+        public object? Subjectivist { get; set; }
+
+        [JsonProperty("tibiad")]
+        public object? Tibiad { get; set; }
+
+        [JsonProperty("transonic")]
+        public object? Transonic { get; set; }
+
+        [JsonProperty("tripetalous")]
+        public object? Tripetalous { get; set; }
+
+        [JsonProperty("trunchman")]
+        public object? Trunchman { get; set; }
+
+        [JsonProperty("urger")]
+        public object? Urger { get; set; }
+
+        [JsonProperty("withdrawnness")]
+        public object? Withdrawnness { get; set; }
+    }
+
+    public partial record Scatty
+    {
+        [JsonProperty("aeriferous", Required = Required.AllowNull)]
+        public object Aeriferous { get; set; }
+
+        [JsonProperty("antical", Required = Required.AllowNull)]
+        public object Antical { get; set; }
+
+        [JsonProperty("antighostism", Required = Required.AllowNull)]
+        public object Antighostism { get; set; }
+
+        [JsonProperty("arcanum", Required = Required.AllowNull)]
+        public object Arcanum { get; set; }
+
+        [JsonProperty("autotrophy", Required = Required.AllowNull)]
+        public object Autotrophy { get; set; }
+
+        [JsonProperty("baronial", Required = Required.AllowNull)]
+        public object Baronial { get; set; }
+
+        [JsonProperty("caffeine", Required = Required.AllowNull)]
+        public object Caffeine { get; set; }
+
+        [JsonProperty("gorgoniacean", Required = Required.AllowNull)]
+        public object Gorgoniacean { get; set; }
+
+        [JsonProperty("heroical", Required = Required.AllowNull)]
+        public object Heroical { get; set; }
+
+        [JsonProperty("hydropical", Required = Required.AllowNull)]
+        public object Hydropical { get; set; }
+
+        [JsonProperty("mechanology", Required = Required.AllowNull)]
+        public object Mechanology { get; set; }
+
+        [JsonProperty("musicopoetic", Required = Required.AllowNull)]
+        public object Musicopoetic { get; set; }
+
+        [JsonProperty("officiality", Required = Required.AllowNull)]
+        public object Officiality { get; set; }
+
+        [JsonProperty("oftentimes", Required = Required.AllowNull)]
+        public object Oftentimes { get; set; }
+
+        [JsonProperty("ophthalmotonometer", Required = Required.AllowNull)]
+        public object Ophthalmotonometer { get; set; }
+
+        [JsonProperty("reflectively", Required = Required.AllowNull)]
+        public object Reflectively { get; set; }
+
+        [JsonProperty("springer", Required = Required.AllowNull)]
+        public object Springer { get; set; }
+
+        [JsonProperty("Tabasco", Required = Required.AllowNull)]
+        public object Tabasco { get; set; }
+
+        [JsonProperty("teleianthous", Required = Required.AllowNull)]
+        public object Teleianthous { get; set; }
+
+        [JsonProperty("uncombated", Required = Required.AllowNull)]
+        public object Uncombated { get; set; }
+    }
+
+    public partial record SisteringClass
+    {
+        [JsonProperty("amphicarpic", Required = Required.AllowNull)]
+        public object Amphicarpic { get; set; }
+
+        [JsonProperty("Chianti", Required = Required.AllowNull)]
+        public object Chianti { get; set; }
+
+        [JsonProperty("frigorific", Required = Required.AllowNull)]
+        public object Frigorific { get; set; }
+
+        [JsonProperty("Haplomi", Required = Required.AllowNull)]
+        public object Haplomi { get; set; }
+
+        [JsonProperty("hyperkinesis", Required = Required.AllowNull)]
+        public object Hyperkinesis { get; set; }
+
+        [JsonProperty("laudable", Required = Required.AllowNull)]
+        public object Laudable { get; set; }
+
+        [JsonProperty("madwoman", Required = Required.AllowNull)]
+        public object Madwoman { get; set; }
+
+        [JsonProperty("maimedly", Required = Required.AllowNull)]
+        public object Maimedly { get; set; }
+
+        [JsonProperty("Micropterygidae", Required = Required.AllowNull)]
+        public object Micropterygidae { get; set; }
+
+        [JsonProperty("microrhabdus", Required = Required.AllowNull)]
+        public object Microrhabdus { get; set; }
+
+        [JsonProperty("nondense", Required = Required.AllowNull)]
+        public object Nondense { get; set; }
+
+        [JsonProperty("phlebemphraxis", Required = Required.AllowNull)]
+        public object Phlebemphraxis { get; set; }
+
+        [JsonProperty("redsear", Required = Required.AllowNull)]
+        public object Redsear { get; set; }
+
+        [JsonProperty("schismatical", Required = Required.AllowNull)]
+        public object Schismatical { get; set; }
+
+        [JsonProperty("tartryl", Required = Required.AllowNull)]
+        public object Tartryl { get; set; }
+
+        [JsonProperty("unabhorred", Required = Required.AllowNull)]
+        public object Unabhorred { get; set; }
+
+        [JsonProperty("undeliberateness", Required = Required.AllowNull)]
+        public object Undeliberateness { get; set; }
+
+        [JsonProperty("unmixable", Required = Required.AllowNull)]
+        public object Unmixable { get; set; }
+
+        [JsonProperty("untruckling", Required = Required.AllowNull)]
+        public object Untruckling { get; set; }
+
+        [JsonProperty("vineal", Required = Required.AllowNull)]
+        public object Vineal { get; set; }
+    }
+
+    public partial record Staghunting
+    {
+        [JsonProperty("calorimetric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Calorimetric { get; set; }
+
+        [JsonProperty("canid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Canid { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ditriglyphic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ditriglyphic { get; set; }
+
+        [JsonProperty("floriferousness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Floriferousness { get; set; }
+
+        [JsonProperty("gamelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamelike { get; set; }
+
+        [JsonProperty("grig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Grig { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("interloan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Interloan { get; set; }
+
+        [JsonProperty("lithotomy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lithotomy { get; set; }
+
+        [JsonProperty("loric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loric { get; set; }
+
+        [JsonProperty("membranocoriaceous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranocoriaceous { get; set; }
+
+        [JsonProperty("membranogenic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranogenic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("overtrump", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overtrump { get; set; }
+
+        [JsonProperty("scotino", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scotino { get; set; }
+
+        [JsonProperty("seasonable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seasonable { get; set; }
+
+        [JsonProperty("sephen", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sephen { get; set; }
+
+        [JsonProperty("stigmarioid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stigmarioid { get; set; }
+
+        [JsonProperty("tired", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tired { get; set; }
+
+        [JsonProperty("trifid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trifid { get; set; }
+
+        [JsonProperty("undefeatedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undefeatedly { get; set; }
+
+        [JsonProperty("ungirlish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ungirlish { get; set; }
+    }
+
+    public partial record StrenuosityClass
+    {
+        [JsonProperty("bliss", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bliss { get; set; }
+
+        [JsonProperty("buccate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Buccate { get; set; }
+
+        [JsonProperty("bulletproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bulletproof { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("crumblingness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crumblingness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("engagedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Engagedly { get; set; }
+
+        [JsonProperty("fightable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fightable { get; set; }
+
+        [JsonProperty("hoariness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hoariness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hypopodium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hypopodium { get; set; }
+
+        [JsonProperty("luxurist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Luxurist { get; set; }
+
+        [JsonProperty("mechanician", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mechanician { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("Onopordon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Onopordon { get; set; }
+
+        [JsonProperty("podgily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Podgily { get; set; }
+
+        [JsonProperty("reformableness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Reformableness { get; set; }
+
+        [JsonProperty("scatterbrains", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scatterbrains { get; set; }
+
+        [JsonProperty("seminuria", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seminuria { get; set; }
+
+        [JsonProperty("Sodomite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sodomite { get; set; }
+
+        [JsonProperty("tramp", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tramp { get; set; }
+
+        [JsonProperty("undueness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undueness { get; set; }
+
+        [JsonProperty("worthily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Worthily { get; set; }
+
+        [JsonProperty("Yankeeist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yankeeist { get; set; }
+    }
+
+    public partial record TruantcyClass
+    {
+        [JsonProperty("alfiona")]
+        public object? Alfiona { get; set; }
+
+        [JsonProperty("ascaridiasis")]
+        public object? Ascaridiasis { get; set; }
+
+        [JsonProperty("bungey")]
+        public object? Bungey { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("ceroxyle")]
+        public object? Ceroxyle { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chorology")]
+        public object? Chorology { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enmarble")]
+        public object? Enmarble { get; set; }
+
+        [JsonProperty("Epeira")]
+        public object? Epeira { get; set; }
+
+        [JsonProperty("Eurylaimi")]
+        public object? Eurylaimi { get; set; }
+
+        [JsonProperty("germination")]
+        public object? Germination { get; set; }
+
+        [JsonProperty("hallelujah")]
+        public object? Hallelujah { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lev")]
+        public object? Lev { get; set; }
+
+        [JsonProperty("mouthing")]
+        public object? Mouthing { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("philliloo")]
+        public object? Philliloo { get; set; }
+
+        [JsonProperty("planetal")]
+        public object? Planetal { get; set; }
+
+        [JsonProperty("poney")]
+        public object? Poney { get; set; }
+
+        [JsonProperty("punctualist")]
+        public object? Punctualist { get; set; }
+
+        [JsonProperty("returnlessly")]
+        public object? Returnlessly { get; set; }
+
+        [JsonProperty("skelder")]
+        public object? Skelder { get; set; }
+
+        [JsonProperty("windwaywardly")]
+        public object? Windwaywardly { get; set; }
+
+        [JsonProperty("Yuman")]
+        public object? Yuman { get; set; }
+    }
+
+    public partial record UnimpeachablyClass
+    {
+        [JsonProperty("acerin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Acerin { get; set; }
+
+        [JsonProperty("Bobadil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bobadil { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chlorophylligenous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorophylligenous { get; set; }
+
+        [JsonProperty("conversational", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conversational { get; set; }
+
+        [JsonProperty("demiowl", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Demiowl { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ectorhinal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ectorhinal { get; set; }
+
+        [JsonProperty("gamblesomeness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamblesomeness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("irrorate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Irrorate { get; set; }
+
+        [JsonProperty("kindergartening", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Kindergartening { get; set; }
+
+        [JsonProperty("lateritic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lateritic { get; set; }
+
+        [JsonProperty("mespil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mespil { get; set; }
+
+        [JsonProperty("misconfiguration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Misconfiguration { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("planometry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Planometry { get; set; }
+
+        [JsonProperty("Quiina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quiina { get; set; }
+
+        [JsonProperty("Robert", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Robert { get; set; }
+
+        [JsonProperty("rot", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rot { get; set; }
+
+        [JsonProperty("subcinctorium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subcinctorium { get; set; }
+
+        [JsonProperty("tussocker", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tussocker { get; set; }
+
+        [JsonProperty("ultraproud", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ultraproud { get; set; }
+
+        [JsonProperty("unsuggestedness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsuggestedness { get; set; }
+    }
+
+    public partial record UnstressedClass
+    {
+        [JsonProperty("Alain", Required = Required.AllowNull)]
+        public object Alain { get; set; }
+
+        [JsonProperty("Amphirhina", Required = Required.AllowNull)]
+        public object Amphirhina { get; set; }
+
+        [JsonProperty("antimachinery", Required = Required.AllowNull)]
+        public object Antimachinery { get; set; }
+
+        [JsonProperty("coldish", Required = Required.AllowNull)]
+        public object Coldish { get; set; }
+
+        [JsonProperty("crantara", Required = Required.AllowNull)]
+        public object Crantara { get; set; }
+
+        [JsonProperty("distinguishing", Required = Required.AllowNull)]
+        public object Distinguishing { get; set; }
+
+        [JsonProperty("elytroposis", Required = Required.AllowNull)]
+        public object Elytroposis { get; set; }
+
+        [JsonProperty("gentianwort", Required = Required.AllowNull)]
+        public object Gentianwort { get; set; }
+
+        [JsonProperty("heliosis", Required = Required.AllowNull)]
+        public object Heliosis { get; set; }
+
+        [JsonProperty("instrumental", Required = Required.AllowNull)]
+        public object Instrumental { get; set; }
+
+        [JsonProperty("introinflection", Required = Required.AllowNull)]
+        public object Introinflection { get; set; }
+
+        [JsonProperty("kala", Required = Required.AllowNull)]
+        public object Kala { get; set; }
+
+        [JsonProperty("Lincolnian", Required = Required.AllowNull)]
+        public object Lincolnian { get; set; }
+
+        [JsonProperty("metad", Required = Required.AllowNull)]
+        public object Metad { get; set; }
+
+        [JsonProperty("Sarcophilus", Required = Required.AllowNull)]
+        public object Sarcophilus { get; set; }
+
+        [JsonProperty("swingingly", Required = Required.AllowNull)]
+        public object Swingingly { get; set; }
+
+        [JsonProperty("unconformity", Required = Required.AllowNull)]
+        public object Unconformity { get; set; }
+
+        [JsonProperty("undecreed", Required = Required.AllowNull)]
+        public object Undecreed { get; set; }
+
+        [JsonProperty("venerable", Required = Required.AllowNull)]
+        public object Venerable { get; set; }
+
+        [JsonProperty("vowellessness", Required = Required.AllowNull)]
+        public object Vowellessness { get; set; }
+    }
+
+    public partial record WrothyClass
+    {
+        [JsonProperty("Aeschynanthus", Required = Required.AllowNull)]
+        public object Aeschynanthus { get; set; }
+
+        [JsonProperty("aquiferous", Required = Required.AllowNull)]
+        public object Aquiferous { get; set; }
+
+        [JsonProperty("cheapener", Required = Required.AllowNull)]
+        public object Cheapener { get; set; }
+
+        [JsonProperty("enumeration", Required = Required.AllowNull)]
+        public object Enumeration { get; set; }
+
+        [JsonProperty("Ephesine", Required = Required.AllowNull)]
+        public object Ephesine { get; set; }
+
+        [JsonProperty("escadrille", Required = Required.AllowNull)]
+        public object Escadrille { get; set; }
+
+        [JsonProperty("estrous", Required = Required.AllowNull)]
+        public object Estrous { get; set; }
+
+        [JsonProperty("interestedly", Required = Required.AllowNull)]
+        public object Interestedly { get; set; }
+
+        [JsonProperty("katakinetomer", Required = Required.AllowNull)]
+        public object Katakinetomer { get; set; }
+
+        [JsonProperty("mortification", Required = Required.AllowNull)]
+        public object Mortification { get; set; }
+
+        [JsonProperty("morula", Required = Required.AllowNull)]
+        public object Morula { get; set; }
+
+        [JsonProperty("orthosymmetrical", Required = Required.AllowNull)]
+        public object Orthosymmetrical { get; set; }
+
+        [JsonProperty("overbark", Required = Required.AllowNull)]
+        public object Overbark { get; set; }
+
+        [JsonProperty("politist", Required = Required.AllowNull)]
+        public object Politist { get; set; }
+
+        [JsonProperty("qualified", Required = Required.AllowNull)]
+        public object Qualified { get; set; }
+
+        [JsonProperty("sphenomalar", Required = Required.AllowNull)]
+        public object Sphenomalar { get; set; }
+
+        [JsonProperty("throatful", Required = Required.AllowNull)]
+        public object Throatful { get; set; }
+
+        [JsonProperty("transhumance", Required = Required.AllowNull)]
+        public object Transhumance { get; set; }
+
+        [JsonProperty("triandrian", Required = Required.AllowNull)]
+        public object Triandrian { get; set; }
+
+        [JsonProperty("unbooked", Required = Required.AllowNull)]
+        public object Unbooked { get; set; }
+    }
+
+    public partial struct Protrusive
+    {
+        public double? Double;
+        public List<long?>? UnionArray;
+
+        public static implicit operator Protrusive(double Double) => new Protrusive { Double = Double };
+        public static implicit operator Protrusive(List<long?> UnionArray) => new Protrusive { UnionArray = UnionArray };
+    }
+
+    public partial struct PulpitismElement
+    {
+        public double? Double;
+        public List<long>? IntegerArray;
+        public PulpitismClass? PulpitismClass;
+
+        public static implicit operator PulpitismElement(double Double) => new PulpitismElement { Double = Double };
+        public static implicit operator PulpitismElement(List<long> IntegerArray) => new PulpitismElement { IntegerArray = IntegerArray };
+        public static implicit operator PulpitismElement(PulpitismClass PulpitismClass) => new PulpitismElement { PulpitismClass = PulpitismClass };
+    }
+
+    public partial struct PyodermiaElement
+    {
+        public long? Integer;
+        public PyodermiaClass? PyodermiaClass;
+
+        public static implicit operator PyodermiaElement(long Integer) => new PyodermiaElement { Integer = Integer };
+        public static implicit operator PyodermiaElement(PyodermiaClass PyodermiaClass) => new PyodermiaElement { PyodermiaClass = PyodermiaClass };
+    }
+
+    public partial struct QuebrachineElement
+    {
+        public bool? Bool;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator QuebrachineElement(bool Bool) => new QuebrachineElement { Bool = Bool };
+        public static implicit operator QuebrachineElement(QuebrachineClass QuebrachineClass) => new QuebrachineElement { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => Bool == null && QuebrachineClass == null;
+    }
+
+    public partial struct Querier
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Querier(bool Bool) => new Querier { Bool = Bool };
+        public static implicit operator Querier(Dictionary<string, long> IntegerMap) => new Querier { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Rebarbative
+    {
+        public bool? Bool;
+        public double? Double;
+        public List<long>? IntegerArray;
+
+        public static implicit operator Rebarbative(bool Bool) => new Rebarbative { Bool = Bool };
+        public static implicit operator Rebarbative(double Double) => new Rebarbative { Double = Double };
+        public static implicit operator Rebarbative(List<long> IntegerArray) => new Rebarbative { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Retrocervical
+    {
+        public long? Integer;
+        public List<long?>? UnionArray;
+
+        public static implicit operator Retrocervical(long Integer) => new Retrocervical { Integer = Integer };
+        public static implicit operator Retrocervical(List<long?> UnionArray) => new Retrocervical { UnionArray = UnionArray };
+    }
+
+    public partial struct Revert
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Revert(bool Bool) => new Revert { Bool = Bool };
+        public static implicit operator Revert(string String) => new Revert { String = String };
+    }
+
+    public partial struct RewriteElement
+    {
+        public double? Double;
+        public List<object>? NullArray;
+        public RewriteClass? RewriteClass;
+
+        public static implicit operator RewriteElement(double Double) => new RewriteElement { Double = Double };
+        public static implicit operator RewriteElement(List<object> NullArray) => new RewriteElement { NullArray = NullArray };
+        public static implicit operator RewriteElement(RewriteClass RewriteClass) => new RewriteElement { RewriteClass = RewriteClass };
+    }
+
+    public partial struct Saccoderm
+    {
+        public List<long>? IntegerArray;
+        public string? String;
+
+        public static implicit operator Saccoderm(List<long> IntegerArray) => new Saccoderm { IntegerArray = IntegerArray };
+        public static implicit operator Saccoderm(string String) => new Saccoderm { String = String };
+        public bool IsNull => IntegerArray == null && String == null;
+    }
+
+    public partial struct SantirElement
+    {
+        public double? Double;
+        public SantirClass? SantirClass;
+
+        public static implicit operator SantirElement(double Double) => new SantirElement { Double = Double };
+        public static implicit operator SantirElement(SantirClass SantirClass) => new SantirElement { SantirClass = SantirClass };
+    }
+
+    public partial struct Saprophilous
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Saprophilous(Dictionary<string, long> IntegerMap) => new Saprophilous { IntegerMap = IntegerMap };
+        public static implicit operator Saprophilous(string String) => new Saprophilous { String = String };
+        public bool IsNull => IntegerMap == null && String == null;
+    }
+
+    public partial struct SaxtenElement
+    {
+        public SaxtenClass? SaxtenClass;
+        public string? String;
+
+        public static implicit operator SaxtenElement(SaxtenClass SaxtenClass) => new SaxtenElement { SaxtenClass = SaxtenClass };
+        public static implicit operator SaxtenElement(string String) => new SaxtenElement { String = String };
+    }
+
+    public partial struct Scoffer
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public List<object>? NullArray;
+
+        public static implicit operator Scoffer(Dictionary<string, long> IntegerMap) => new Scoffer { IntegerMap = IntegerMap };
+        public static implicit operator Scoffer(List<object> NullArray) => new Scoffer { NullArray = NullArray };
+        public bool IsNull => NullArray == null && IntegerMap == null;
+    }
+
+    public partial struct Scrampum
+    {
+        public bool? Bool;
+        public List<long>? IntegerArray;
+
+        public static implicit operator Scrampum(bool Bool) => new Scrampum { Bool = Bool };
+        public static implicit operator Scrampum(List<long> IntegerArray) => new Scrampum { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Bool == null;
+    }
+
+    public partial struct Serpentinic
+    {
+        public double? Double;
+        public List<long>? IntegerArray;
+
+        public static implicit operator Serpentinic(double Double) => new Serpentinic { Double = Double };
+        public static implicit operator Serpentinic(List<long> IntegerArray) => new Serpentinic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Shadowable
+    {
+        public bool? Bool;
+        public List<long?>? UnionArray;
+
+        public static implicit operator Shadowable(bool Bool) => new Shadowable { Bool = Bool };
+        public static implicit operator Shadowable(List<long?> UnionArray) => new Shadowable { UnionArray = UnionArray };
+    }
+
+    public partial struct SisteringElement
+    {
+        public long? Integer;
+        public List<object>? NullArray;
+        public SisteringClass? SisteringClass;
+
+        public static implicit operator SisteringElement(long Integer) => new SisteringElement { Integer = Integer };
+        public static implicit operator SisteringElement(List<object> NullArray) => new SisteringElement { NullArray = NullArray };
+        public static implicit operator SisteringElement(SisteringClass SisteringClass) => new SisteringElement { SisteringClass = SisteringClass };
+    }
+
+    public partial struct Stagmometer
+    {
+        public string? String;
+        public List<long?>? UnionArray;
+
+        public static implicit operator Stagmometer(string String) => new Stagmometer { String = String };
+        public static implicit operator Stagmometer(List<long?> UnionArray) => new Stagmometer { UnionArray = UnionArray };
+    }
+
+    public partial struct Stimulability
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Stimulability(bool Bool) => new Stimulability { Bool = Bool };
+        public static implicit operator Stimulability(long Integer) => new Stimulability { Integer = Integer };
+        public static implicit operator Stimulability(Dictionary<string, long> IntegerMap) => new Stimulability { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Strangleable
+    {
+        public double? Double;
+        public List<object>? NullArray;
+
+        public static implicit operator Strangleable(double Double) => new Strangleable { Double = Double };
+        public static implicit operator Strangleable(List<object> NullArray) => new Strangleable { NullArray = NullArray };
+    }
+
+    public partial struct StrenuosityElement
+    {
+        public List<object>? NullArray;
+        public StrenuosityClass? StrenuosityClass;
+
+        public static implicit operator StrenuosityElement(List<object> NullArray) => new StrenuosityElement { NullArray = NullArray };
+        public static implicit operator StrenuosityElement(StrenuosityClass StrenuosityClass) => new StrenuosityElement { StrenuosityClass = StrenuosityClass };
+    }
+
+    public partial struct Tabaxir
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Tabaxir(bool Bool) => new Tabaxir { Bool = Bool };
+        public static implicit operator Tabaxir(double Double) => new Tabaxir { Double = Double };
+    }
+
+    public partial struct Talpiform
+    {
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Talpiform(double Double) => new Talpiform { Double = Double };
+        public static implicit operator Talpiform(QuebrachineClass QuebrachineClass) => new Talpiform { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Double == null;
+    }
+
+    public partial struct Thwack
+    {
+        public bool? Bool;
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Thwack(bool Bool) => new Thwack { Bool = Bool };
+        public static implicit operator Thwack(double Double) => new Thwack { Double = Double };
+        public static implicit operator Thwack(QuebrachineClass QuebrachineClass) => new Thwack { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct Tortricine
+    {
+        public QuebrachineClass? QuebrachineClass;
+        public List<long?>? UnionArray;
+
+        public static implicit operator Tortricine(QuebrachineClass QuebrachineClass) => new Tortricine { QuebrachineClass = QuebrachineClass };
+        public static implicit operator Tortricine(List<long?> UnionArray) => new Tortricine { UnionArray = UnionArray };
+    }
+
+    public partial struct TruantcyElement
+    {
+        public bool? Bool;
+        public TruantcyClass? TruantcyClass;
+
+        public static implicit operator TruantcyElement(bool Bool) => new TruantcyElement { Bool = Bool };
+        public static implicit operator TruantcyElement(TruantcyClass TruantcyClass) => new TruantcyElement { TruantcyClass = TruantcyClass };
+    }
+
+    public partial struct Unbeginning
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public List<object>? NullArray;
+        public string? String;
+
+        public static implicit operator Unbeginning(Dictionary<string, long> IntegerMap) => new Unbeginning { IntegerMap = IntegerMap };
+        public static implicit operator Unbeginning(List<object> NullArray) => new Unbeginning { NullArray = NullArray };
+        public static implicit operator Unbeginning(string String) => new Unbeginning { String = String };
+    }
+
+    public partial struct Undesirability
+    {
+        public List<long>? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Undesirability(List<long> IntegerArray) => new Undesirability { IntegerArray = IntegerArray };
+        public static implicit operator Undesirability(Dictionary<string, long> IntegerMap) => new Undesirability { IntegerMap = IntegerMap };
+        public static implicit operator Undesirability(string String) => new Undesirability { String = String };
+    }
+
+    public partial struct Unerasing
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public List<object>? NullArray;
+
+        public static implicit operator Unerasing(long Integer) => new Unerasing { Integer = Integer };
+        public static implicit operator Unerasing(Dictionary<string, long> IntegerMap) => new Unerasing { IntegerMap = IntegerMap };
+        public static implicit operator Unerasing(List<object> NullArray) => new Unerasing { NullArray = NullArray };
+    }
+
+    public partial struct Unguentarium
+    {
+        public long? Integer;
+        public List<object>? NullArray;
+
+        public static implicit operator Unguentarium(long Integer) => new Unguentarium { Integer = Integer };
+        public static implicit operator Unguentarium(List<object> NullArray) => new Unguentarium { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Integer == null;
+    }
+
+    public partial struct UnimpeachablyElement
+    {
+        public bool? Bool;
+        public UnimpeachablyClass? UnimpeachablyClass;
+
+        public static implicit operator UnimpeachablyElement(bool Bool) => new UnimpeachablyElement { Bool = Bool };
+        public static implicit operator UnimpeachablyElement(UnimpeachablyClass UnimpeachablyClass) => new UnimpeachablyElement { UnimpeachablyClass = UnimpeachablyClass };
+    }
+
+    public partial struct Unmortgaged
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unmortgaged(double Double) => new Unmortgaged { Double = Double };
+        public static implicit operator Unmortgaged(Dictionary<string, long> IntegerMap) => new Unmortgaged { IntegerMap = IntegerMap };
+        public bool IsNull => Double == null && IntegerMap == null;
+    }
+
+    public partial struct Unobstructed
+    {
+        public long? Integer;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Unobstructed(long Integer) => new Unobstructed { Integer = Integer };
+        public static implicit operator Unobstructed(QuebrachineClass QuebrachineClass) => new Unobstructed { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Integer == null;
+    }
+
+    public partial struct Unreceptivity
+    {
+        public long? Integer;
+        public List<object>? NullArray;
+        public string? String;
+
+        public static implicit operator Unreceptivity(long Integer) => new Unreceptivity { Integer = Integer };
+        public static implicit operator Unreceptivity(List<object> NullArray) => new Unreceptivity { NullArray = NullArray };
+        public static implicit operator Unreceptivity(string String) => new Unreceptivity { String = String };
+    }
+
+    public partial struct Unsatisfactoriness
+    {
+        public bool? Bool;
+        public long? Integer;
+        public List<long>? IntegerArray;
+
+        public static implicit operator Unsatisfactoriness(bool Bool) => new Unsatisfactoriness { Bool = Bool };
+        public static implicit operator Unsatisfactoriness(long Integer) => new Unsatisfactoriness { Integer = Integer };
+        public static implicit operator Unsatisfactoriness(List<long> IntegerArray) => new Unsatisfactoriness { IntegerArray = IntegerArray };
+    }
+
+    public partial struct UnstressedElement
+    {
+        public bool? Bool;
+        public string? String;
+        public UnstressedClass? UnstressedClass;
+
+        public static implicit operator UnstressedElement(bool Bool) => new UnstressedElement { Bool = Bool };
+        public static implicit operator UnstressedElement(string String) => new UnstressedElement { String = String };
+        public static implicit operator UnstressedElement(UnstressedClass UnstressedClass) => new UnstressedElement { UnstressedClass = UnstressedClass };
+    }
+
+    public partial struct Untasked
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public List<object>? NullArray;
+
+        public static implicit operator Untasked(double Double) => new Untasked { Double = Double };
+        public static implicit operator Untasked(Dictionary<string, long> IntegerMap) => new Untasked { IntegerMap = IntegerMap };
+        public static implicit operator Untasked(List<object> NullArray) => new Untasked { NullArray = NullArray };
+    }
+
+    public partial struct Unvarying
+    {
+        public bool? Bool;
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unvarying(bool Bool) => new Unvarying { Bool = Bool };
+        public static implicit operator Unvarying(double Double) => new Unvarying { Double = Double };
+        public static implicit operator Unvarying(Dictionary<string, long> IntegerMap) => new Unvarying { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Vehemently
+    {
+        public bool? Bool;
+        public List<object>? NullArray;
+
+        public static implicit operator Vehemently(bool Bool) => new Vehemently { Bool = Bool };
+        public static implicit operator Vehemently(List<object> NullArray) => new Vehemently { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Bool == null;
+    }
+
+    public partial struct Whitepot
+    {
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Whitepot(double Double) => new Whitepot { Double = Double };
+        public static implicit operator Whitepot(QuebrachineClass QuebrachineClass) => new Whitepot { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct WrothyElement
+    {
+        public List<object>? NullArray;
+        public WrothyClass? WrothyClass;
+
+        public static implicit operator WrothyElement(List<object> NullArray) => new WrothyElement { NullArray = NullArray };
+        public static implicit operator WrothyElement(WrothyClass WrothyClass) => new WrothyElement { WrothyClass = WrothyClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ProtrusiveConverter.Singleton,
+                PulpitismElementConverter.Singleton,
+                PyodermiaElementConverter.Singleton,
+                QuebrachineElementConverter.Singleton,
+                QuerierConverter.Singleton,
+                RebarbativeConverter.Singleton,
+                RetrocervicalConverter.Singleton,
+                RevertConverter.Singleton,
+                RewriteElementConverter.Singleton,
+                SaccodermConverter.Singleton,
+                SantirElementConverter.Singleton,
+                SaprophilousConverter.Singleton,
+                SaxtenElementConverter.Singleton,
+                ScofferConverter.Singleton,
+                ScrampumConverter.Singleton,
+                SerpentinicConverter.Singleton,
+                ShadowableConverter.Singleton,
+                SisteringElementConverter.Singleton,
+                StagmometerConverter.Singleton,
+                StimulabilityConverter.Singleton,
+                StrangleableConverter.Singleton,
+                StrenuosityElementConverter.Singleton,
+                TabaxirConverter.Singleton,
+                TalpiformConverter.Singleton,
+                ThwackConverter.Singleton,
+                TortricineConverter.Singleton,
+                TruantcyElementConverter.Singleton,
+                UnbeginningConverter.Singleton,
+                UndesirabilityConverter.Singleton,
+                UnerasingConverter.Singleton,
+                UnguentariumConverter.Singleton,
+                UnimpeachablyElementConverter.Singleton,
+                UnmortgagedConverter.Singleton,
+                UnobstructedConverter.Singleton,
+                UnreceptivityConverter.Singleton,
+                UnsatisfactorinessConverter.Singleton,
+                UnstressedElementConverter.Singleton,
+                UntaskedConverter.Singleton,
+                UnvaryingConverter.Singleton,
+                VehementlyConverter.Singleton,
+                WhitepotConverter.Singleton,
+                WrothyElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ProtrusiveConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protrusive) || t == typeof(Protrusive?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Protrusive { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long?>>(reader);
+                    return new Protrusive { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protrusive");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protrusive)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protrusive");
+        }
+
+        public static readonly ProtrusiveConverter Singleton = new ProtrusiveConverter();
+    }
+
+    internal class PulpitismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PulpitismElement) || t == typeof(PulpitismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PulpitismElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PulpitismClass>(reader);
+                    return new PulpitismElement { PulpitismClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new PulpitismElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PulpitismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PulpitismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.PulpitismClass != null)
+            {
+                serializer.Serialize(writer, value.PulpitismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PulpitismElement");
+        }
+
+        public static readonly PulpitismElementConverter Singleton = new PulpitismElementConverter();
+    }
+
+    internal class PyodermiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PyodermiaElement) || t == typeof(PyodermiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PyodermiaElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PyodermiaClass>(reader);
+                    return new PyodermiaElement { PyodermiaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PyodermiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PyodermiaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PyodermiaClass != null)
+            {
+                serializer.Serialize(writer, value.PyodermiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PyodermiaElement");
+        }
+
+        public static readonly PyodermiaElementConverter Singleton = new PyodermiaElementConverter();
+    }
+
+    internal class QuebrachineElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(QuebrachineElement) || t == typeof(QuebrachineElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new QuebrachineElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new QuebrachineElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new QuebrachineElement { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type QuebrachineElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (QuebrachineElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type QuebrachineElement");
+        }
+
+        public static readonly QuebrachineElementConverter Singleton = new QuebrachineElementConverter();
+    }
+
+    internal class QuerierConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Querier) || t == typeof(Querier?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Querier { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Querier { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Querier");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Querier)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Querier");
+        }
+
+        public static readonly QuerierConverter Singleton = new QuerierConverter();
+    }
+
+    internal class RebarbativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rebarbative) || t == typeof(Rebarbative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Rebarbative { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Rebarbative { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Rebarbative { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rebarbative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rebarbative)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rebarbative");
+        }
+
+        public static readonly RebarbativeConverter Singleton = new RebarbativeConverter();
+    }
+
+    internal class RetrocervicalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Retrocervical) || t == typeof(Retrocervical?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Retrocervical { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long?>>(reader);
+                    return new Retrocervical { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Retrocervical");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Retrocervical)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Retrocervical");
+        }
+
+        public static readonly RetrocervicalConverter Singleton = new RetrocervicalConverter();
+    }
+
+    internal class RevertConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Revert) || t == typeof(Revert?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Revert { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Revert { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Revert");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Revert)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Revert");
+        }
+
+        public static readonly RevertConverter Singleton = new RevertConverter();
+    }
+
+    internal class RewriteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RewriteElement) || t == typeof(RewriteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new RewriteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<RewriteClass>(reader);
+                    return new RewriteElement { RewriteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new RewriteElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type RewriteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RewriteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.RewriteClass != null)
+            {
+                serializer.Serialize(writer, value.RewriteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type RewriteElement");
+        }
+
+        public static readonly RewriteElementConverter Singleton = new RewriteElementConverter();
+    }
+
+    internal class SaccodermConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saccoderm) || t == typeof(Saccoderm?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saccoderm { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saccoderm { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Saccoderm { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Saccoderm");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saccoderm)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saccoderm");
+        }
+
+        public static readonly SaccodermConverter Singleton = new SaccodermConverter();
+    }
+
+    internal class SantirElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SantirElement) || t == typeof(SantirElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new SantirElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SantirClass>(reader);
+                    return new SantirElement { SantirClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SantirElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SantirElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.SantirClass != null)
+            {
+                serializer.Serialize(writer, value.SantirClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SantirElement");
+        }
+
+        public static readonly SantirElementConverter Singleton = new SantirElementConverter();
+    }
+
+    internal class SaprophilousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saprophilous) || t == typeof(Saprophilous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saprophilous { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saprophilous { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Saprophilous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Saprophilous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saprophilous)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saprophilous");
+        }
+
+        public static readonly SaprophilousConverter Singleton = new SaprophilousConverter();
+    }
+
+    internal class SaxtenElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SaxtenElement) || t == typeof(SaxtenElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new SaxtenElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SaxtenClass>(reader);
+                    return new SaxtenElement { SaxtenClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SaxtenElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SaxtenElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.SaxtenClass != null)
+            {
+                serializer.Serialize(writer, value.SaxtenClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SaxtenElement");
+        }
+
+        public static readonly SaxtenElementConverter Singleton = new SaxtenElementConverter();
+    }
+
+    internal class ScofferConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scoffer) || t == typeof(Scoffer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scoffer { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Scoffer { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Scoffer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scoffer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scoffer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scoffer");
+        }
+
+        public static readonly ScofferConverter Singleton = new ScofferConverter();
+    }
+
+    internal class ScrampumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scrampum) || t == typeof(Scrampum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scrampum { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Scrampum { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Scrampum { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scrampum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scrampum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scrampum");
+        }
+
+        public static readonly ScrampumConverter Singleton = new ScrampumConverter();
+    }
+
+    internal class SerpentinicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Serpentinic) || t == typeof(Serpentinic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Serpentinic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Serpentinic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Serpentinic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Serpentinic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Serpentinic");
+        }
+
+        public static readonly SerpentinicConverter Singleton = new SerpentinicConverter();
+    }
+
+    internal class ShadowableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shadowable) || t == typeof(Shadowable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Shadowable { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long?>>(reader);
+                    return new Shadowable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shadowable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shadowable)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shadowable");
+        }
+
+        public static readonly ShadowableConverter Singleton = new ShadowableConverter();
+    }
+
+    internal class SisteringElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SisteringElement) || t == typeof(SisteringElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new SisteringElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SisteringClass>(reader);
+                    return new SisteringElement { SisteringClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new SisteringElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type SisteringElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SisteringElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.SisteringClass != null)
+            {
+                serializer.Serialize(writer, value.SisteringClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SisteringElement");
+        }
+
+        public static readonly SisteringElementConverter Singleton = new SisteringElementConverter();
+    }
+
+    internal class StagmometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stagmometer) || t == typeof(Stagmometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Stagmometer { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long?>>(reader);
+                    return new Stagmometer { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Stagmometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stagmometer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stagmometer");
+        }
+
+        public static readonly StagmometerConverter Singleton = new StagmometerConverter();
+    }
+
+    internal class StimulabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stimulability) || t == typeof(Stimulability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Stimulability { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Stimulability { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Stimulability { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Stimulability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stimulability)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stimulability");
+        }
+
+        public static readonly StimulabilityConverter Singleton = new StimulabilityConverter();
+    }
+
+    internal class StrangleableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Strangleable) || t == typeof(Strangleable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Strangleable { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Strangleable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Strangleable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Strangleable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Strangleable");
+        }
+
+        public static readonly StrangleableConverter Singleton = new StrangleableConverter();
+    }
+
+    internal class StrenuosityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(StrenuosityElement) || t == typeof(StrenuosityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<StrenuosityClass>(reader);
+                    return new StrenuosityElement { StrenuosityClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new StrenuosityElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type StrenuosityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (StrenuosityElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.StrenuosityClass != null)
+            {
+                serializer.Serialize(writer, value.StrenuosityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type StrenuosityElement");
+        }
+
+        public static readonly StrenuosityElementConverter Singleton = new StrenuosityElementConverter();
+    }
+
+    internal class TabaxirConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tabaxir) || t == typeof(Tabaxir?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Tabaxir { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Tabaxir { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Tabaxir");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tabaxir)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tabaxir");
+        }
+
+        public static readonly TabaxirConverter Singleton = new TabaxirConverter();
+    }
+
+    internal class TalpiformConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Talpiform) || t == typeof(Talpiform?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Talpiform { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Talpiform { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Talpiform { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Talpiform");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Talpiform)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Talpiform");
+        }
+
+        public static readonly TalpiformConverter Singleton = new TalpiformConverter();
+    }
+
+    internal class ThwackConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Thwack) || t == typeof(Thwack?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Thwack { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Thwack { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Thwack { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Thwack");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Thwack)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Thwack");
+        }
+
+        public static readonly ThwackConverter Singleton = new ThwackConverter();
+    }
+
+    internal class TortricineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tortricine) || t == typeof(Tortricine?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Tortricine { QuebrachineClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long?>>(reader);
+                    return new Tortricine { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Tortricine");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tortricine)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tortricine");
+        }
+
+        public static readonly TortricineConverter Singleton = new TortricineConverter();
+    }
+
+    internal class TruantcyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TruantcyElement) || t == typeof(TruantcyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new TruantcyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TruantcyClass>(reader);
+                    return new TruantcyElement { TruantcyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type TruantcyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TruantcyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.TruantcyClass != null)
+            {
+                serializer.Serialize(writer, value.TruantcyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type TruantcyElement");
+        }
+
+        public static readonly TruantcyElementConverter Singleton = new TruantcyElementConverter();
+    }
+
+    internal class UnbeginningConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unbeginning) || t == typeof(Unbeginning?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unbeginning { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unbeginning { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Unbeginning { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unbeginning");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unbeginning)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unbeginning");
+        }
+
+        public static readonly UnbeginningConverter Singleton = new UnbeginningConverter();
+    }
+
+    internal class UndesirabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Undesirability) || t == typeof(Undesirability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Undesirability { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Undesirability { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Undesirability { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Undesirability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Undesirability)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Undesirability");
+        }
+
+        public static readonly UndesirabilityConverter Singleton = new UndesirabilityConverter();
+    }
+
+    internal class UnerasingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unerasing) || t == typeof(Unerasing?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unerasing { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unerasing { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Unerasing { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unerasing");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unerasing)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unerasing");
+        }
+
+        public static readonly UnerasingConverter Singleton = new UnerasingConverter();
+    }
+
+    internal class UnguentariumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unguentarium) || t == typeof(Unguentarium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unguentarium { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unguentarium { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Unguentarium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unguentarium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unguentarium)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unguentarium");
+        }
+
+        public static readonly UnguentariumConverter Singleton = new UnguentariumConverter();
+    }
+
+    internal class UnimpeachablyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnimpeachablyElement) || t == typeof(UnimpeachablyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnimpeachablyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnimpeachablyClass>(reader);
+                    return new UnimpeachablyElement { UnimpeachablyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnimpeachablyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnimpeachablyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnimpeachablyClass != null)
+            {
+                serializer.Serialize(writer, value.UnimpeachablyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnimpeachablyElement");
+        }
+
+        public static readonly UnimpeachablyElementConverter Singleton = new UnimpeachablyElementConverter();
+    }
+
+    internal class UnmortgagedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unmortgaged) || t == typeof(Unmortgaged?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unmortgaged { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unmortgaged { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unmortgaged { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unmortgaged");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unmortgaged)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unmortgaged");
+        }
+
+        public static readonly UnmortgagedConverter Singleton = new UnmortgagedConverter();
+    }
+
+    internal class UnobstructedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unobstructed) || t == typeof(Unobstructed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unobstructed { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unobstructed { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Unobstructed { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unobstructed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unobstructed)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unobstructed");
+        }
+
+        public static readonly UnobstructedConverter Singleton = new UnobstructedConverter();
+    }
+
+    internal class UnreceptivityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unreceptivity) || t == typeof(Unreceptivity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unreceptivity { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unreceptivity { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Unreceptivity { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unreceptivity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unreceptivity)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unreceptivity");
+        }
+
+        public static readonly UnreceptivityConverter Singleton = new UnreceptivityConverter();
+    }
+
+    internal class UnsatisfactorinessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unsatisfactoriness) || t == typeof(Unsatisfactoriness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unsatisfactoriness { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unsatisfactoriness { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<long>>(reader);
+                    return new Unsatisfactoriness { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unsatisfactoriness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unsatisfactoriness)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unsatisfactoriness");
+        }
+
+        public static readonly UnsatisfactorinessConverter Singleton = new UnsatisfactorinessConverter();
+    }
+
+    internal class UnstressedElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnstressedElement) || t == typeof(UnstressedElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnstressedElement { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new UnstressedElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnstressedClass>(reader);
+                    return new UnstressedElement { UnstressedClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnstressedElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnstressedElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnstressedClass != null)
+            {
+                serializer.Serialize(writer, value.UnstressedClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnstressedElement");
+        }
+
+        public static readonly UnstressedElementConverter Singleton = new UnstressedElementConverter();
+    }
+
+    internal class UntaskedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Untasked) || t == typeof(Untasked?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Untasked { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Untasked { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Untasked { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Untasked");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Untasked)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Untasked");
+        }
+
+        public static readonly UntaskedConverter Singleton = new UntaskedConverter();
+    }
+
+    internal class UnvaryingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unvarying) || t == typeof(Unvarying?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unvarying { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unvarying { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unvarying { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unvarying");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unvarying)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unvarying");
+        }
+
+        public static readonly UnvaryingConverter Singleton = new UnvaryingConverter();
+    }
+
+    internal class VehementlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Vehemently) || t == typeof(Vehemently?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Vehemently { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Vehemently { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new Vehemently { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Vehemently");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Vehemently)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Vehemently");
+        }
+
+        public static readonly VehementlyConverter Singleton = new VehementlyConverter();
+    }
+
+    internal class WhitepotConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Whitepot) || t == typeof(Whitepot?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Whitepot { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Whitepot { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Whitepot");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Whitepot)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Whitepot");
+        }
+
+        public static readonly WhitepotConverter Singleton = new WhitepotConverter();
+    }
+
+    internal class WrothyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(WrothyElement) || t == typeof(WrothyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<WrothyClass>(reader);
+                    return new WrothyElement { WrothyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<List<object>>(reader);
+                    return new WrothyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type WrothyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (WrothyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.WrothyClass != null)
+            {
+                serializer.Serialize(writer, value.WrothyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type WrothyElement");
+        }
+
+        public static readonly WrothyElementConverter Singleton = new WrothyElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations4.json/csharp-version-5--b2bd4d4221d9/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations4.json/csharp-version-5--b2bd4d4221d9/QuickType.cs
new file mode 100644
index 0000000..b4948cb
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations4.json/csharp-version-5--b2bd4d4221d9/QuickType.cs
@@ -0,0 +1,3955 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("protrusive", Required = Required.Always)]
+        public Protrusive[] Protrusive { get; set; }
+
+        [JsonProperty("pulpitism", Required = Required.Always)]
+        public PulpitismElement[] Pulpitism { get; set; }
+
+        [JsonProperty("pyodermia", Required = Required.Always)]
+        public PyodermiaElement[] Pyodermia { get; set; }
+
+        [JsonProperty("quebrachine", Required = Required.Always)]
+        public QuebrachineElement[] Quebrachine { get; set; }
+
+        [JsonProperty("querier", Required = Required.Always)]
+        public Querier[] Querier { get; set; }
+
+        [JsonProperty("rebarbative", Required = Required.Always)]
+        public Rebarbative[] Rebarbative { get; set; }
+
+        [JsonProperty("reimagine", Required = Required.Always)]
+        public Reimagine[] Reimagine { get; set; }
+
+        [JsonProperty("ressaut", Required = Required.Always)]
+        public Ressaut Ressaut { get; set; }
+
+        [JsonProperty("retrocervical", Required = Required.Always)]
+        public Retrocervical[] Retrocervical { get; set; }
+
+        [JsonProperty("revert", Required = Required.Always)]
+        public Revert[] Revert { get; set; }
+
+        [JsonProperty("rewrite", Required = Required.Always)]
+        public RewriteElement[] Rewrite { get; set; }
+
+        [JsonProperty("saccoderm", Required = Required.Always)]
+        public Saccoderm[] Saccoderm { get; set; }
+
+        [JsonProperty("santir", Required = Required.Always)]
+        public SantirElement[] Santir { get; set; }
+
+        [JsonProperty("saprophilous", Required = Required.Always)]
+        public Saprophilous[] Saprophilous { get; set; }
+
+        [JsonProperty("saxten", Required = Required.Always)]
+        public SaxtenElement[] Saxten { get; set; }
+
+        [JsonProperty("scatty", Required = Required.Always)]
+        public Scatty[] Scatty { get; set; }
+
+        [JsonProperty("scoffer", Required = Required.Always)]
+        public Scoffer[] Scoffer { get; set; }
+
+        [JsonProperty("scrampum", Required = Required.Always)]
+        public Scrampum[] Scrampum { get; set; }
+
+        [JsonProperty("semantic", Required = Required.Always)]
+        public double Semantic { get; set; }
+
+        [JsonProperty("serpentinic", Required = Required.Always)]
+        public Serpentinic[] Serpentinic { get; set; }
+
+        [JsonProperty("shadowable", Required = Required.Always)]
+        public Shadowable[] Shadowable { get; set; }
+
+        [JsonProperty("sistering", Required = Required.Always)]
+        public SisteringElement[] Sistering { get; set; }
+
+        [JsonProperty("staghunting", Required = Required.Always)]
+        public Staghunting[] Staghunting { get; set; }
+
+        [JsonProperty("stagmometer", Required = Required.Always)]
+        public Stagmometer[] Stagmometer { get; set; }
+
+        [JsonProperty("stimulability", Required = Required.Always)]
+        public Stimulability[] Stimulability { get; set; }
+
+        [JsonProperty("strangleable", Required = Required.Always)]
+        public Strangleable[] Strangleable { get; set; }
+
+        [JsonProperty("strenuosity", Required = Required.Always)]
+        public StrenuosityElement[] Strenuosity { get; set; }
+
+        [JsonProperty("tabaxir", Required = Required.Always)]
+        public Tabaxir[] Tabaxir { get; set; }
+
+        [JsonProperty("talpiform", Required = Required.Always)]
+        public Talpiform[] Talpiform { get; set; }
+
+        [JsonProperty("thwack", Required = Required.Always)]
+        public Thwack[] Thwack { get; set; }
+
+        [JsonProperty("to", Required = Required.Always)]
+        public double?[] To { get; set; }
+
+        [JsonProperty("tortricine", Required = Required.Always)]
+        public Tortricine[] Tortricine { get; set; }
+
+        [JsonProperty("truantcy", Required = Required.Always)]
+        public TruantcyElement[] Truantcy { get; set; }
+
+        [JsonProperty("turgesce", Required = Required.Always)]
+        public string[] Turgesce { get; set; }
+
+        [JsonProperty("unbeginning", Required = Required.Always)]
+        public Unbeginning[] Unbeginning { get; set; }
+
+        [JsonProperty("underdunged", Required = Required.Always)]
+        public double[] Underdunged { get; set; }
+
+        [JsonProperty("undesirability", Required = Required.Always)]
+        public Undesirability[] Undesirability { get; set; }
+
+        [JsonProperty("unerasing", Required = Required.Always)]
+        public Unerasing[] Unerasing { get; set; }
+
+        [JsonProperty("unguentarium", Required = Required.Always)]
+        public Unguentarium[] Unguentarium { get; set; }
+
+        [JsonProperty("unimpeachably", Required = Required.Always)]
+        public UnimpeachablyElement[] Unimpeachably { get; set; }
+
+        [JsonProperty("unmortgaged", Required = Required.Always)]
+        public Unmortgaged[] Unmortgaged { get; set; }
+
+        [JsonProperty("unobstructed", Required = Required.Always)]
+        public Unobstructed[] Unobstructed { get; set; }
+
+        [JsonProperty("unreceptivity", Required = Required.Always)]
+        public Unreceptivity[] Unreceptivity { get; set; }
+
+        [JsonProperty("unsatisfactoriness", Required = Required.Always)]
+        public Unsatisfactoriness[] Unsatisfactoriness { get; set; }
+
+        [JsonProperty("unsecurity", Required = Required.Always)]
+        public long[] Unsecurity { get; set; }
+
+        [JsonProperty("unstressed", Required = Required.Always)]
+        public UnstressedElement[] Unstressed { get; set; }
+
+        [JsonProperty("untasked", Required = Required.Always)]
+        public Untasked[] Untasked { get; set; }
+
+        [JsonProperty("unvarying", Required = Required.Always)]
+        public Unvarying[] Unvarying { get; set; }
+
+        [JsonProperty("vehemently", Required = Required.Always)]
+        public Vehemently[] Vehemently { get; set; }
+
+        [JsonProperty("warriorship", Required = Required.Always)]
+        public Dictionary<string, bool> Warriorship { get; set; }
+
+        [JsonProperty("whitepot", Required = Required.Always)]
+        public Whitepot[] Whitepot { get; set; }
+
+        [JsonProperty("wrothy", Required = Required.Always)]
+        public WrothyElement[] Wrothy { get; set; }
+    }
+
+    public partial record PulpitismClass
+    {
+        [JsonProperty("abnet", Required = Required.AllowNull)]
+        public object Abnet { get; set; }
+
+        [JsonProperty("buckhorn", Required = Required.AllowNull)]
+        public object Buckhorn { get; set; }
+
+        [JsonProperty("calciform", Required = Required.AllowNull)]
+        public object Calciform { get; set; }
+
+        [JsonProperty("chelophore", Required = Required.AllowNull)]
+        public object Chelophore { get; set; }
+
+        [JsonProperty("cogitation", Required = Required.AllowNull)]
+        public object Cogitation { get; set; }
+
+        [JsonProperty("decreeable", Required = Required.AllowNull)]
+        public object Decreeable { get; set; }
+
+        [JsonProperty("despicable", Required = Required.AllowNull)]
+        public object Despicable { get; set; }
+
+        [JsonProperty("isodiazo", Required = Required.AllowNull)]
+        public object Isodiazo { get; set; }
+
+        [JsonProperty("jadedly", Required = Required.AllowNull)]
+        public object Jadedly { get; set; }
+
+        [JsonProperty("leptochlorite", Required = Required.AllowNull)]
+        public object Leptochlorite { get; set; }
+
+        [JsonProperty("nursling", Required = Required.AllowNull)]
+        public object Nursling { get; set; }
+
+        [JsonProperty("palamedean", Required = Required.AllowNull)]
+        public object Palamedean { get; set; }
+
+        [JsonProperty("photoheliograph", Required = Required.AllowNull)]
+        public object Photoheliograph { get; set; }
+
+        [JsonProperty("pipewood", Required = Required.AllowNull)]
+        public object Pipewood { get; set; }
+
+        [JsonProperty("roberd", Required = Required.AllowNull)]
+        public object Roberd { get; set; }
+
+        [JsonProperty("statable", Required = Required.AllowNull)]
+        public object Statable { get; set; }
+
+        [JsonProperty("superassume", Required = Required.AllowNull)]
+        public object Superassume { get; set; }
+
+        [JsonProperty("syllabe", Required = Required.AllowNull)]
+        public object Syllabe { get; set; }
+
+        [JsonProperty("toughhead", Required = Required.AllowNull)]
+        public object Toughhead { get; set; }
+
+        [JsonProperty("underburn", Required = Required.AllowNull)]
+        public object Underburn { get; set; }
+    }
+
+    public partial record PyodermiaClass
+    {
+        [JsonProperty("aphoristically", Required = Required.AllowNull)]
+        public object Aphoristically { get; set; }
+
+        [JsonProperty("apophyllous", Required = Required.AllowNull)]
+        public object Apophyllous { get; set; }
+
+        [JsonProperty("cognize", Required = Required.AllowNull)]
+        public object Cognize { get; set; }
+
+        [JsonProperty("dermonosology", Required = Required.AllowNull)]
+        public object Dermonosology { get; set; }
+
+        [JsonProperty("Gyppo", Required = Required.AllowNull)]
+        public object Gyppo { get; set; }
+
+        [JsonProperty("ither", Required = Required.AllowNull)]
+        public object Ither { get; set; }
+
+        [JsonProperty("juglandaceous", Required = Required.AllowNull)]
+        public object Juglandaceous { get; set; }
+
+        [JsonProperty("litho", Required = Required.AllowNull)]
+        public object Litho { get; set; }
+
+        [JsonProperty("macropterous", Required = Required.AllowNull)]
+        public object Macropterous { get; set; }
+
+        [JsonProperty("photographer", Required = Required.AllowNull)]
+        public object Photographer { get; set; }
+
+        [JsonProperty("romancing", Required = Required.AllowNull)]
+        public object Romancing { get; set; }
+
+        [JsonProperty("rumness", Required = Required.AllowNull)]
+        public object Rumness { get; set; }
+
+        [JsonProperty("somniloquist", Required = Required.AllowNull)]
+        public object Somniloquist { get; set; }
+
+        [JsonProperty("stressfully", Required = Required.AllowNull)]
+        public object Stressfully { get; set; }
+
+        [JsonProperty("tactically", Required = Required.AllowNull)]
+        public object Tactically { get; set; }
+
+        [JsonProperty("tracheophony", Required = Required.AllowNull)]
+        public object Tracheophony { get; set; }
+
+        [JsonProperty("unappositely", Required = Required.AllowNull)]
+        public object Unappositely { get; set; }
+
+        [JsonProperty("unclothedly", Required = Required.AllowNull)]
+        public object Unclothedly { get; set; }
+
+        [JsonProperty("unimplied", Required = Required.AllowNull)]
+        public object Unimplied { get; set; }
+
+        [JsonProperty("unsyncopated", Required = Required.AllowNull)]
+        public object Unsyncopated { get; set; }
+    }
+
+    public partial record QuebrachineClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Reimagine
+    {
+        [JsonProperty("adducible")]
+        public object Adducible { get; set; }
+
+        [JsonProperty("anabolin")]
+        public object Anabolin { get; set; }
+
+        [JsonProperty("brainy")]
+        public object Brainy { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chrysamine")]
+        public object Chrysamine { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("fluxweed")]
+        public object Fluxweed { get; set; }
+
+        [JsonProperty("glaucine")]
+        public object Glaucine { get; set; }
+
+        [JsonProperty("grobianism")]
+        public object Grobianism { get; set; }
+
+        [JsonProperty("Hermo")]
+        public object Hermo { get; set; }
+
+        [JsonProperty("hieroglyphist")]
+        public object Hieroglyphist { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("icteroid")]
+        public object Icteroid { get; set; }
+
+        [JsonProperty("immortal")]
+        public object Immortal { get; set; }
+
+        [JsonProperty("impetulant")]
+        public object Impetulant { get; set; }
+
+        [JsonProperty("irrigate")]
+        public object Irrigate { get; set; }
+
+        [JsonProperty("myxedema")]
+        public object Myxedema { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("onyx")]
+        public object Onyx { get; set; }
+
+        [JsonProperty("repasser")]
+        public object Repasser { get; set; }
+
+        [JsonProperty("septomarginal")]
+        public object Septomarginal { get; set; }
+
+        [JsonProperty("subdie")]
+        public object Subdie { get; set; }
+
+        [JsonProperty("tibiometatarsal")]
+        public object Tibiometatarsal { get; set; }
+
+        [JsonProperty("waltzlike")]
+        public object Waltzlike { get; set; }
+    }
+
+    public partial record Ressaut
+    {
+        [JsonProperty("apperceptive", Required = Required.Always)]
+        public string Apperceptive { get; set; }
+
+        [JsonProperty("cuttoo", Required = Required.Always)]
+        public string Cuttoo { get; set; }
+
+        [JsonProperty("douser", Required = Required.Always)]
+        public string Douser { get; set; }
+
+        [JsonProperty("drinkproof", Required = Required.Always)]
+        public string Drinkproof { get; set; }
+
+        [JsonProperty("forementioned", Required = Required.Always)]
+        public string Forementioned { get; set; }
+
+        [JsonProperty("Freesia", Required = Required.Always)]
+        public string Freesia { get; set; }
+
+        [JsonProperty("Genevieve", Required = Required.Always)]
+        public string Genevieve { get; set; }
+
+        [JsonProperty("hyperdiabolical", Required = Required.Always)]
+        public string Hyperdiabolical { get; set; }
+
+        [JsonProperty("hypocone", Required = Required.Always)]
+        public string Hypocone { get; set; }
+
+        [JsonProperty("irreverentially", Required = Required.Always)]
+        public string Irreverentially { get; set; }
+
+        [JsonProperty("jumart", Required = Required.Always)]
+        public string Jumart { get; set; }
+
+        [JsonProperty("Mimosaceae", Required = Required.Always)]
+        public string Mimosaceae { get; set; }
+
+        [JsonProperty("mollicrush", Required = Required.Always)]
+        public string Mollicrush { get; set; }
+
+        [JsonProperty("nedder", Required = Required.Always)]
+        public string Nedder { get; set; }
+
+        [JsonProperty("retinasphalt", Required = Required.Always)]
+        public string Retinasphalt { get; set; }
+
+        [JsonProperty("sough", Required = Required.Always)]
+        public string Sough { get; set; }
+
+        [JsonProperty("steading", Required = Required.Always)]
+        public string Steading { get; set; }
+
+        [JsonProperty("Theopaschitism", Required = Required.Always)]
+        public string Theopaschitism { get; set; }
+
+        [JsonProperty("undurableness", Required = Required.Always)]
+        public string Undurableness { get; set; }
+
+        [JsonProperty("unmingleable", Required = Required.Always)]
+        public string Unmingleable { get; set; }
+    }
+
+    public partial record RewriteClass
+    {
+        [JsonProperty("accountancy", Required = Required.AllowNull)]
+        public object Accountancy { get; set; }
+
+        [JsonProperty("cacotrophic", Required = Required.AllowNull)]
+        public object Cacotrophic { get; set; }
+
+        [JsonProperty("contest", Required = Required.AllowNull)]
+        public object Contest { get; set; }
+
+        [JsonProperty("couthily", Required = Required.AllowNull)]
+        public object Couthily { get; set; }
+
+        [JsonProperty("falculate", Required = Required.AllowNull)]
+        public object Falculate { get; set; }
+
+        [JsonProperty("foreseize", Required = Required.AllowNull)]
+        public object Foreseize { get; set; }
+
+        [JsonProperty("Hyades", Required = Required.AllowNull)]
+        public object Hyades { get; set; }
+
+        [JsonProperty("lemnad", Required = Required.AllowNull)]
+        public object Lemnad { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.AllowNull)]
+        public object Monotheistically { get; set; }
+
+        [JsonProperty("nonflying", Required = Required.AllowNull)]
+        public object Nonflying { get; set; }
+
+        [JsonProperty("Ptenoglossa", Required = Required.AllowNull)]
+        public object Ptenoglossa { get; set; }
+
+        [JsonProperty("repatch", Required = Required.AllowNull)]
+        public object Repatch { get; set; }
+
+        [JsonProperty("rodman", Required = Required.AllowNull)]
+        public object Rodman { get; set; }
+
+        [JsonProperty("strung", Required = Required.AllowNull)]
+        public object Strung { get; set; }
+
+        [JsonProperty("titmal", Required = Required.AllowNull)]
+        public object Titmal { get; set; }
+
+        [JsonProperty("twalpennyworth", Required = Required.AllowNull)]
+        public object Twalpennyworth { get; set; }
+
+        [JsonProperty("unblamable", Required = Required.AllowNull)]
+        public object Unblamable { get; set; }
+
+        [JsonProperty("vertical", Required = Required.AllowNull)]
+        public object Vertical { get; set; }
+
+        [JsonProperty("Whiggification", Required = Required.AllowNull)]
+        public object Whiggification { get; set; }
+
+        [JsonProperty("yardman", Required = Required.AllowNull)]
+        public object Yardman { get; set; }
+    }
+
+    public partial record SantirClass
+    {
+        [JsonProperty("admiredly", Required = Required.AllowNull)]
+        public object Admiredly { get; set; }
+
+        [JsonProperty("demicaponier", Required = Required.AllowNull)]
+        public object Demicaponier { get; set; }
+
+        [JsonProperty("epitympanic", Required = Required.AllowNull)]
+        public object Epitympanic { get; set; }
+
+        [JsonProperty("investitor", Required = Required.AllowNull)]
+        public object Investitor { get; set; }
+
+        [JsonProperty("lupiform", Required = Required.AllowNull)]
+        public object Lupiform { get; set; }
+
+        [JsonProperty("monoflagellate", Required = Required.AllowNull)]
+        public object Monoflagellate { get; set; }
+
+        [JsonProperty("paleoethnic", Required = Required.AllowNull)]
+        public object Paleoethnic { get; set; }
+
+        [JsonProperty("prediscountable", Required = Required.AllowNull)]
+        public object Prediscountable { get; set; }
+
+        [JsonProperty("rhetoricals", Required = Required.AllowNull)]
+        public object Rhetoricals { get; set; }
+
+        [JsonProperty("roomth", Required = Required.AllowNull)]
+        public object Roomth { get; set; }
+
+        [JsonProperty("saccharose", Required = Required.AllowNull)]
+        public object Saccharose { get; set; }
+
+        [JsonProperty("septonasal", Required = Required.AllowNull)]
+        public object Septonasal { get; set; }
+
+        [JsonProperty("serpenticide", Required = Required.AllowNull)]
+        public object Serpenticide { get; set; }
+
+        [JsonProperty("setarious", Required = Required.AllowNull)]
+        public object Setarious { get; set; }
+
+        [JsonProperty("spaework", Required = Required.AllowNull)]
+        public object Spaework { get; set; }
+
+        [JsonProperty("stylite", Required = Required.AllowNull)]
+        public object Stylite { get; set; }
+
+        [JsonProperty("Suessiones", Required = Required.AllowNull)]
+        public object Suessiones { get; set; }
+
+        [JsonProperty("timelily", Required = Required.AllowNull)]
+        public object Timelily { get; set; }
+
+        [JsonProperty("unprofaned", Required = Required.AllowNull)]
+        public object Unprofaned { get; set; }
+
+        [JsonProperty("vorticular", Required = Required.AllowNull)]
+        public object Vorticular { get; set; }
+    }
+
+    public partial record SaxtenClass
+    {
+        [JsonProperty("algarrobilla")]
+        public object Algarrobilla { get; set; }
+
+        [JsonProperty("bowgrace")]
+        public object Bowgrace { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Centaurid")]
+        public object Centaurid { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("flix")]
+        public object Flix { get; set; }
+
+        [JsonProperty("germanely")]
+        public object Germanely { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("inhume")]
+        public object Inhume { get; set; }
+
+        [JsonProperty("lepidote")]
+        public object Lepidote { get; set; }
+
+        [JsonProperty("megalochirous")]
+        public object Megalochirous { get; set; }
+
+        [JsonProperty("ninepenny")]
+        public object Ninepenny { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("nondeist")]
+        public object Nondeist { get; set; }
+
+        [JsonProperty("nymphaeaceous")]
+        public object Nymphaeaceous { get; set; }
+
+        [JsonProperty("parietofrontal")]
+        public object Parietofrontal { get; set; }
+
+        [JsonProperty("sancyite")]
+        public object Sancyite { get; set; }
+
+        [JsonProperty("subjectivist")]
+        public object Subjectivist { get; set; }
+
+        [JsonProperty("tibiad")]
+        public object Tibiad { get; set; }
+
+        [JsonProperty("transonic")]
+        public object Transonic { get; set; }
+
+        [JsonProperty("tripetalous")]
+        public object Tripetalous { get; set; }
+
+        [JsonProperty("trunchman")]
+        public object Trunchman { get; set; }
+
+        [JsonProperty("urger")]
+        public object Urger { get; set; }
+
+        [JsonProperty("withdrawnness")]
+        public object Withdrawnness { get; set; }
+    }
+
+    public partial record Scatty
+    {
+        [JsonProperty("aeriferous", Required = Required.AllowNull)]
+        public object Aeriferous { get; set; }
+
+        [JsonProperty("antical", Required = Required.AllowNull)]
+        public object Antical { get; set; }
+
+        [JsonProperty("antighostism", Required = Required.AllowNull)]
+        public object Antighostism { get; set; }
+
+        [JsonProperty("arcanum", Required = Required.AllowNull)]
+        public object Arcanum { get; set; }
+
+        [JsonProperty("autotrophy", Required = Required.AllowNull)]
+        public object Autotrophy { get; set; }
+
+        [JsonProperty("baronial", Required = Required.AllowNull)]
+        public object Baronial { get; set; }
+
+        [JsonProperty("caffeine", Required = Required.AllowNull)]
+        public object Caffeine { get; set; }
+
+        [JsonProperty("gorgoniacean", Required = Required.AllowNull)]
+        public object Gorgoniacean { get; set; }
+
+        [JsonProperty("heroical", Required = Required.AllowNull)]
+        public object Heroical { get; set; }
+
+        [JsonProperty("hydropical", Required = Required.AllowNull)]
+        public object Hydropical { get; set; }
+
+        [JsonProperty("mechanology", Required = Required.AllowNull)]
+        public object Mechanology { get; set; }
+
+        [JsonProperty("musicopoetic", Required = Required.AllowNull)]
+        public object Musicopoetic { get; set; }
+
+        [JsonProperty("officiality", Required = Required.AllowNull)]
+        public object Officiality { get; set; }
+
+        [JsonProperty("oftentimes", Required = Required.AllowNull)]
+        public object Oftentimes { get; set; }
+
+        [JsonProperty("ophthalmotonometer", Required = Required.AllowNull)]
+        public object Ophthalmotonometer { get; set; }
+
+        [JsonProperty("reflectively", Required = Required.AllowNull)]
+        public object Reflectively { get; set; }
+
+        [JsonProperty("springer", Required = Required.AllowNull)]
+        public object Springer { get; set; }
+
+        [JsonProperty("Tabasco", Required = Required.AllowNull)]
+        public object Tabasco { get; set; }
+
+        [JsonProperty("teleianthous", Required = Required.AllowNull)]
+        public object Teleianthous { get; set; }
+
+        [JsonProperty("uncombated", Required = Required.AllowNull)]
+        public object Uncombated { get; set; }
+    }
+
+    public partial record SisteringClass
+    {
+        [JsonProperty("amphicarpic", Required = Required.AllowNull)]
+        public object Amphicarpic { get; set; }
+
+        [JsonProperty("Chianti", Required = Required.AllowNull)]
+        public object Chianti { get; set; }
+
+        [JsonProperty("frigorific", Required = Required.AllowNull)]
+        public object Frigorific { get; set; }
+
+        [JsonProperty("Haplomi", Required = Required.AllowNull)]
+        public object Haplomi { get; set; }
+
+        [JsonProperty("hyperkinesis", Required = Required.AllowNull)]
+        public object Hyperkinesis { get; set; }
+
+        [JsonProperty("laudable", Required = Required.AllowNull)]
+        public object Laudable { get; set; }
+
+        [JsonProperty("madwoman", Required = Required.AllowNull)]
+        public object Madwoman { get; set; }
+
+        [JsonProperty("maimedly", Required = Required.AllowNull)]
+        public object Maimedly { get; set; }
+
+        [JsonProperty("Micropterygidae", Required = Required.AllowNull)]
+        public object Micropterygidae { get; set; }
+
+        [JsonProperty("microrhabdus", Required = Required.AllowNull)]
+        public object Microrhabdus { get; set; }
+
+        [JsonProperty("nondense", Required = Required.AllowNull)]
+        public object Nondense { get; set; }
+
+        [JsonProperty("phlebemphraxis", Required = Required.AllowNull)]
+        public object Phlebemphraxis { get; set; }
+
+        [JsonProperty("redsear", Required = Required.AllowNull)]
+        public object Redsear { get; set; }
+
+        [JsonProperty("schismatical", Required = Required.AllowNull)]
+        public object Schismatical { get; set; }
+
+        [JsonProperty("tartryl", Required = Required.AllowNull)]
+        public object Tartryl { get; set; }
+
+        [JsonProperty("unabhorred", Required = Required.AllowNull)]
+        public object Unabhorred { get; set; }
+
+        [JsonProperty("undeliberateness", Required = Required.AllowNull)]
+        public object Undeliberateness { get; set; }
+
+        [JsonProperty("unmixable", Required = Required.AllowNull)]
+        public object Unmixable { get; set; }
+
+        [JsonProperty("untruckling", Required = Required.AllowNull)]
+        public object Untruckling { get; set; }
+
+        [JsonProperty("vineal", Required = Required.AllowNull)]
+        public object Vineal { get; set; }
+    }
+
+    public partial record Staghunting
+    {
+        [JsonProperty("calorimetric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Calorimetric { get; set; }
+
+        [JsonProperty("canid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Canid { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("ditriglyphic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ditriglyphic { get; set; }
+
+        [JsonProperty("floriferousness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Floriferousness { get; set; }
+
+        [JsonProperty("gamelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamelike { get; set; }
+
+        [JsonProperty("grig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Grig { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("interloan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Interloan { get; set; }
+
+        [JsonProperty("lithotomy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lithotomy { get; set; }
+
+        [JsonProperty("loric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loric { get; set; }
+
+        [JsonProperty("membranocoriaceous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranocoriaceous { get; set; }
+
+        [JsonProperty("membranogenic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranogenic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("overtrump", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overtrump { get; set; }
+
+        [JsonProperty("scotino", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scotino { get; set; }
+
+        [JsonProperty("seasonable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seasonable { get; set; }
+
+        [JsonProperty("sephen", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sephen { get; set; }
+
+        [JsonProperty("stigmarioid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stigmarioid { get; set; }
+
+        [JsonProperty("tired", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tired { get; set; }
+
+        [JsonProperty("trifid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trifid { get; set; }
+
+        [JsonProperty("undefeatedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undefeatedly { get; set; }
+
+        [JsonProperty("ungirlish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ungirlish { get; set; }
+    }
+
+    public partial record StrenuosityClass
+    {
+        [JsonProperty("bliss", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bliss { get; set; }
+
+        [JsonProperty("buccate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Buccate { get; set; }
+
+        [JsonProperty("bulletproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bulletproof { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("crumblingness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crumblingness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("engagedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Engagedly { get; set; }
+
+        [JsonProperty("fightable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fightable { get; set; }
+
+        [JsonProperty("hoariness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hoariness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hypopodium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hypopodium { get; set; }
+
+        [JsonProperty("luxurist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Luxurist { get; set; }
+
+        [JsonProperty("mechanician", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mechanician { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("Onopordon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Onopordon { get; set; }
+
+        [JsonProperty("podgily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Podgily { get; set; }
+
+        [JsonProperty("reformableness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Reformableness { get; set; }
+
+        [JsonProperty("scatterbrains", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scatterbrains { get; set; }
+
+        [JsonProperty("seminuria", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seminuria { get; set; }
+
+        [JsonProperty("Sodomite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sodomite { get; set; }
+
+        [JsonProperty("tramp", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tramp { get; set; }
+
+        [JsonProperty("undueness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undueness { get; set; }
+
+        [JsonProperty("worthily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Worthily { get; set; }
+
+        [JsonProperty("Yankeeist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yankeeist { get; set; }
+    }
+
+    public partial record TruantcyClass
+    {
+        [JsonProperty("alfiona")]
+        public object Alfiona { get; set; }
+
+        [JsonProperty("ascaridiasis")]
+        public object Ascaridiasis { get; set; }
+
+        [JsonProperty("bungey")]
+        public object Bungey { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("ceroxyle")]
+        public object Ceroxyle { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chorology")]
+        public object Chorology { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("enmarble")]
+        public object Enmarble { get; set; }
+
+        [JsonProperty("Epeira")]
+        public object Epeira { get; set; }
+
+        [JsonProperty("Eurylaimi")]
+        public object Eurylaimi { get; set; }
+
+        [JsonProperty("germination")]
+        public object Germination { get; set; }
+
+        [JsonProperty("hallelujah")]
+        public object Hallelujah { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lev")]
+        public object Lev { get; set; }
+
+        [JsonProperty("mouthing")]
+        public object Mouthing { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("philliloo")]
+        public object Philliloo { get; set; }
+
+        [JsonProperty("planetal")]
+        public object Planetal { get; set; }
+
+        [JsonProperty("poney")]
+        public object Poney { get; set; }
+
+        [JsonProperty("punctualist")]
+        public object Punctualist { get; set; }
+
+        [JsonProperty("returnlessly")]
+        public object Returnlessly { get; set; }
+
+        [JsonProperty("skelder")]
+        public object Skelder { get; set; }
+
+        [JsonProperty("windwaywardly")]
+        public object Windwaywardly { get; set; }
+
+        [JsonProperty("Yuman")]
+        public object Yuman { get; set; }
+    }
+
+    public partial record UnimpeachablyClass
+    {
+        [JsonProperty("acerin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Acerin { get; set; }
+
+        [JsonProperty("Bobadil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bobadil { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chlorophylligenous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorophylligenous { get; set; }
+
+        [JsonProperty("conversational", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conversational { get; set; }
+
+        [JsonProperty("demiowl", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Demiowl { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("ectorhinal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ectorhinal { get; set; }
+
+        [JsonProperty("gamblesomeness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamblesomeness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("irrorate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Irrorate { get; set; }
+
+        [JsonProperty("kindergartening", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Kindergartening { get; set; }
+
+        [JsonProperty("lateritic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lateritic { get; set; }
+
+        [JsonProperty("mespil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mespil { get; set; }
+
+        [JsonProperty("misconfiguration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Misconfiguration { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("planometry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Planometry { get; set; }
+
+        [JsonProperty("Quiina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quiina { get; set; }
+
+        [JsonProperty("Robert", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Robert { get; set; }
+
+        [JsonProperty("rot", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rot { get; set; }
+
+        [JsonProperty("subcinctorium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subcinctorium { get; set; }
+
+        [JsonProperty("tussocker", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tussocker { get; set; }
+
+        [JsonProperty("ultraproud", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ultraproud { get; set; }
+
+        [JsonProperty("unsuggestedness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsuggestedness { get; set; }
+    }
+
+    public partial record UnstressedClass
+    {
+        [JsonProperty("Alain", Required = Required.AllowNull)]
+        public object Alain { get; set; }
+
+        [JsonProperty("Amphirhina", Required = Required.AllowNull)]
+        public object Amphirhina { get; set; }
+
+        [JsonProperty("antimachinery", Required = Required.AllowNull)]
+        public object Antimachinery { get; set; }
+
+        [JsonProperty("coldish", Required = Required.AllowNull)]
+        public object Coldish { get; set; }
+
+        [JsonProperty("crantara", Required = Required.AllowNull)]
+        public object Crantara { get; set; }
+
+        [JsonProperty("distinguishing", Required = Required.AllowNull)]
+        public object Distinguishing { get; set; }
+
+        [JsonProperty("elytroposis", Required = Required.AllowNull)]
+        public object Elytroposis { get; set; }
+
+        [JsonProperty("gentianwort", Required = Required.AllowNull)]
+        public object Gentianwort { get; set; }
+
+        [JsonProperty("heliosis", Required = Required.AllowNull)]
+        public object Heliosis { get; set; }
+
+        [JsonProperty("instrumental", Required = Required.AllowNull)]
+        public object Instrumental { get; set; }
+
+        [JsonProperty("introinflection", Required = Required.AllowNull)]
+        public object Introinflection { get; set; }
+
+        [JsonProperty("kala", Required = Required.AllowNull)]
+        public object Kala { get; set; }
+
+        [JsonProperty("Lincolnian", Required = Required.AllowNull)]
+        public object Lincolnian { get; set; }
+
+        [JsonProperty("metad", Required = Required.AllowNull)]
+        public object Metad { get; set; }
+
+        [JsonProperty("Sarcophilus", Required = Required.AllowNull)]
+        public object Sarcophilus { get; set; }
+
+        [JsonProperty("swingingly", Required = Required.AllowNull)]
+        public object Swingingly { get; set; }
+
+        [JsonProperty("unconformity", Required = Required.AllowNull)]
+        public object Unconformity { get; set; }
+
+        [JsonProperty("undecreed", Required = Required.AllowNull)]
+        public object Undecreed { get; set; }
+
+        [JsonProperty("venerable", Required = Required.AllowNull)]
+        public object Venerable { get; set; }
+
+        [JsonProperty("vowellessness", Required = Required.AllowNull)]
+        public object Vowellessness { get; set; }
+    }
+
+    public partial record WrothyClass
+    {
+        [JsonProperty("Aeschynanthus", Required = Required.AllowNull)]
+        public object Aeschynanthus { get; set; }
+
+        [JsonProperty("aquiferous", Required = Required.AllowNull)]
+        public object Aquiferous { get; set; }
+
+        [JsonProperty("cheapener", Required = Required.AllowNull)]
+        public object Cheapener { get; set; }
+
+        [JsonProperty("enumeration", Required = Required.AllowNull)]
+        public object Enumeration { get; set; }
+
+        [JsonProperty("Ephesine", Required = Required.AllowNull)]
+        public object Ephesine { get; set; }
+
+        [JsonProperty("escadrille", Required = Required.AllowNull)]
+        public object Escadrille { get; set; }
+
+        [JsonProperty("estrous", Required = Required.AllowNull)]
+        public object Estrous { get; set; }
+
+        [JsonProperty("interestedly", Required = Required.AllowNull)]
+        public object Interestedly { get; set; }
+
+        [JsonProperty("katakinetomer", Required = Required.AllowNull)]
+        public object Katakinetomer { get; set; }
+
+        [JsonProperty("mortification", Required = Required.AllowNull)]
+        public object Mortification { get; set; }
+
+        [JsonProperty("morula", Required = Required.AllowNull)]
+        public object Morula { get; set; }
+
+        [JsonProperty("orthosymmetrical", Required = Required.AllowNull)]
+        public object Orthosymmetrical { get; set; }
+
+        [JsonProperty("overbark", Required = Required.AllowNull)]
+        public object Overbark { get; set; }
+
+        [JsonProperty("politist", Required = Required.AllowNull)]
+        public object Politist { get; set; }
+
+        [JsonProperty("qualified", Required = Required.AllowNull)]
+        public object Qualified { get; set; }
+
+        [JsonProperty("sphenomalar", Required = Required.AllowNull)]
+        public object Sphenomalar { get; set; }
+
+        [JsonProperty("throatful", Required = Required.AllowNull)]
+        public object Throatful { get; set; }
+
+        [JsonProperty("transhumance", Required = Required.AllowNull)]
+        public object Transhumance { get; set; }
+
+        [JsonProperty("triandrian", Required = Required.AllowNull)]
+        public object Triandrian { get; set; }
+
+        [JsonProperty("unbooked", Required = Required.AllowNull)]
+        public object Unbooked { get; set; }
+    }
+
+    public partial struct Protrusive
+    {
+        public double? Double;
+        public long?[] UnionArray;
+
+        public static implicit operator Protrusive(double Double)
+        {
+            return new Protrusive { Double = Double };
+        }
+        public static implicit operator Protrusive(long?[] UnionArray)
+        {
+            return new Protrusive { UnionArray = UnionArray };
+        }
+    }
+
+    public partial struct PulpitismElement
+    {
+        public double? Double;
+        public long[] IntegerArray;
+        public PulpitismClass PulpitismClass;
+
+        public static implicit operator PulpitismElement(double Double)
+        {
+            return new PulpitismElement { Double = Double };
+        }
+        public static implicit operator PulpitismElement(long[] IntegerArray)
+        {
+            return new PulpitismElement { IntegerArray = IntegerArray };
+        }
+        public static implicit operator PulpitismElement(PulpitismClass PulpitismClass)
+        {
+            return new PulpitismElement { PulpitismClass = PulpitismClass };
+        }
+    }
+
+    public partial struct PyodermiaElement
+    {
+        public long? Integer;
+        public PyodermiaClass PyodermiaClass;
+
+        public static implicit operator PyodermiaElement(long Integer)
+        {
+            return new PyodermiaElement { Integer = Integer };
+        }
+        public static implicit operator PyodermiaElement(PyodermiaClass PyodermiaClass)
+        {
+            return new PyodermiaElement { PyodermiaClass = PyodermiaClass };
+        }
+    }
+
+    public partial struct QuebrachineElement
+    {
+        public bool? Bool;
+        public QuebrachineClass QuebrachineClass;
+
+        public static implicit operator QuebrachineElement(bool Bool)
+        {
+            return new QuebrachineElement { Bool = Bool };
+        }
+        public static implicit operator QuebrachineElement(QuebrachineClass QuebrachineClass)
+        {
+            return new QuebrachineElement { QuebrachineClass = QuebrachineClass };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return Bool == null && QuebrachineClass == null;
+            }
+        }
+    }
+
+    public partial struct Querier
+    {
+        public bool? Bool;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Querier(bool Bool)
+        {
+            return new Querier { Bool = Bool };
+        }
+        public static implicit operator Querier(Dictionary<string, long> IntegerMap)
+        {
+            return new Querier { IntegerMap = IntegerMap };
+        }
+    }
+
+    public partial struct Rebarbative
+    {
+        public bool? Bool;
+        public double? Double;
+        public long[] IntegerArray;
+
+        public static implicit operator Rebarbative(bool Bool)
+        {
+            return new Rebarbative { Bool = Bool };
+        }
+        public static implicit operator Rebarbative(double Double)
+        {
+            return new Rebarbative { Double = Double };
+        }
+        public static implicit operator Rebarbative(long[] IntegerArray)
+        {
+            return new Rebarbative { IntegerArray = IntegerArray };
+        }
+    }
+
+    public partial struct Retrocervical
+    {
+        public long? Integer;
+        public long?[] UnionArray;
+
+        public static implicit operator Retrocervical(long Integer)
+        {
+            return new Retrocervical { Integer = Integer };
+        }
+        public static implicit operator Retrocervical(long?[] UnionArray)
+        {
+            return new Retrocervical { UnionArray = UnionArray };
+        }
+    }
+
+    public partial struct Revert
+    {
+        public bool? Bool;
+        public string String;
+
+        public static implicit operator Revert(bool Bool)
+        {
+            return new Revert { Bool = Bool };
+        }
+        public static implicit operator Revert(string String)
+        {
+            return new Revert { String = String };
+        }
+    }
+
+    public partial struct RewriteElement
+    {
+        public double? Double;
+        public object[] NullArray;
+        public RewriteClass RewriteClass;
+
+        public static implicit operator RewriteElement(double Double)
+        {
+            return new RewriteElement { Double = Double };
+        }
+        public static implicit operator RewriteElement(object[] NullArray)
+        {
+            return new RewriteElement { NullArray = NullArray };
+        }
+        public static implicit operator RewriteElement(RewriteClass RewriteClass)
+        {
+            return new RewriteElement { RewriteClass = RewriteClass };
+        }
+    }
+
+    public partial struct Saccoderm
+    {
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator Saccoderm(long[] IntegerArray)
+        {
+            return new Saccoderm { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Saccoderm(string String)
+        {
+            return new Saccoderm { String = String };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return IntegerArray == null && String == null;
+            }
+        }
+    }
+
+    public partial struct SantirElement
+    {
+        public double? Double;
+        public SantirClass SantirClass;
+
+        public static implicit operator SantirElement(double Double)
+        {
+            return new SantirElement { Double = Double };
+        }
+        public static implicit operator SantirElement(SantirClass SantirClass)
+        {
+            return new SantirElement { SantirClass = SantirClass };
+        }
+    }
+
+    public partial struct Saprophilous
+    {
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Saprophilous(Dictionary<string, long> IntegerMap)
+        {
+            return new Saprophilous { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Saprophilous(string String)
+        {
+            return new Saprophilous { String = String };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return IntegerMap == null && String == null;
+            }
+        }
+    }
+
+    public partial struct SaxtenElement
+    {
+        public SaxtenClass SaxtenClass;
+        public string String;
+
+        public static implicit operator SaxtenElement(SaxtenClass SaxtenClass)
+        {
+            return new SaxtenElement { SaxtenClass = SaxtenClass };
+        }
+        public static implicit operator SaxtenElement(string String)
+        {
+            return new SaxtenElement { String = String };
+        }
+    }
+
+    public partial struct Scoffer
+    {
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+
+        public static implicit operator Scoffer(Dictionary<string, long> IntegerMap)
+        {
+            return new Scoffer { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Scoffer(object[] NullArray)
+        {
+            return new Scoffer { NullArray = NullArray };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return NullArray == null && IntegerMap == null;
+            }
+        }
+    }
+
+    public partial struct Scrampum
+    {
+        public bool? Bool;
+        public long[] IntegerArray;
+
+        public static implicit operator Scrampum(bool Bool)
+        {
+            return new Scrampum { Bool = Bool };
+        }
+        public static implicit operator Scrampum(long[] IntegerArray)
+        {
+            return new Scrampum { IntegerArray = IntegerArray };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return IntegerArray == null && Bool == null;
+            }
+        }
+    }
+
+    public partial struct Serpentinic
+    {
+        public double? Double;
+        public long[] IntegerArray;
+
+        public static implicit operator Serpentinic(double Double)
+        {
+            return new Serpentinic { Double = Double };
+        }
+        public static implicit operator Serpentinic(long[] IntegerArray)
+        {
+            return new Serpentinic { IntegerArray = IntegerArray };
+        }
+    }
+
+    public partial struct Shadowable
+    {
+        public bool? Bool;
+        public long?[] UnionArray;
+
+        public static implicit operator Shadowable(bool Bool)
+        {
+            return new Shadowable { Bool = Bool };
+        }
+        public static implicit operator Shadowable(long?[] UnionArray)
+        {
+            return new Shadowable { UnionArray = UnionArray };
+        }
+    }
+
+    public partial struct SisteringElement
+    {
+        public long? Integer;
+        public object[] NullArray;
+        public SisteringClass SisteringClass;
+
+        public static implicit operator SisteringElement(long Integer)
+        {
+            return new SisteringElement { Integer = Integer };
+        }
+        public static implicit operator SisteringElement(object[] NullArray)
+        {
+            return new SisteringElement { NullArray = NullArray };
+        }
+        public static implicit operator SisteringElement(SisteringClass SisteringClass)
+        {
+            return new SisteringElement { SisteringClass = SisteringClass };
+        }
+    }
+
+    public partial struct Stagmometer
+    {
+        public string String;
+        public long?[] UnionArray;
+
+        public static implicit operator Stagmometer(string String)
+        {
+            return new Stagmometer { String = String };
+        }
+        public static implicit operator Stagmometer(long?[] UnionArray)
+        {
+            return new Stagmometer { UnionArray = UnionArray };
+        }
+    }
+
+    public partial struct Stimulability
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Stimulability(bool Bool)
+        {
+            return new Stimulability { Bool = Bool };
+        }
+        public static implicit operator Stimulability(long Integer)
+        {
+            return new Stimulability { Integer = Integer };
+        }
+        public static implicit operator Stimulability(Dictionary<string, long> IntegerMap)
+        {
+            return new Stimulability { IntegerMap = IntegerMap };
+        }
+    }
+
+    public partial struct Strangleable
+    {
+        public double? Double;
+        public object[] NullArray;
+
+        public static implicit operator Strangleable(double Double)
+        {
+            return new Strangleable { Double = Double };
+        }
+        public static implicit operator Strangleable(object[] NullArray)
+        {
+            return new Strangleable { NullArray = NullArray };
+        }
+    }
+
+    public partial struct StrenuosityElement
+    {
+        public object[] NullArray;
+        public StrenuosityClass StrenuosityClass;
+
+        public static implicit operator StrenuosityElement(object[] NullArray)
+        {
+            return new StrenuosityElement { NullArray = NullArray };
+        }
+        public static implicit operator StrenuosityElement(StrenuosityClass StrenuosityClass)
+        {
+            return new StrenuosityElement { StrenuosityClass = StrenuosityClass };
+        }
+    }
+
+    public partial struct Tabaxir
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Tabaxir(bool Bool)
+        {
+            return new Tabaxir { Bool = Bool };
+        }
+        public static implicit operator Tabaxir(double Double)
+        {
+            return new Tabaxir { Double = Double };
+        }
+    }
+
+    public partial struct Talpiform
+    {
+        public double? Double;
+        public QuebrachineClass QuebrachineClass;
+
+        public static implicit operator Talpiform(double Double)
+        {
+            return new Talpiform { Double = Double };
+        }
+        public static implicit operator Talpiform(QuebrachineClass QuebrachineClass)
+        {
+            return new Talpiform { QuebrachineClass = QuebrachineClass };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return QuebrachineClass == null && Double == null;
+            }
+        }
+    }
+
+    public partial struct Thwack
+    {
+        public bool? Bool;
+        public double? Double;
+        public QuebrachineClass QuebrachineClass;
+
+        public static implicit operator Thwack(bool Bool)
+        {
+            return new Thwack { Bool = Bool };
+        }
+        public static implicit operator Thwack(double Double)
+        {
+            return new Thwack { Double = Double };
+        }
+        public static implicit operator Thwack(QuebrachineClass QuebrachineClass)
+        {
+            return new Thwack { QuebrachineClass = QuebrachineClass };
+        }
+    }
+
+    public partial struct Tortricine
+    {
+        public QuebrachineClass QuebrachineClass;
+        public long?[] UnionArray;
+
+        public static implicit operator Tortricine(QuebrachineClass QuebrachineClass)
+        {
+            return new Tortricine { QuebrachineClass = QuebrachineClass };
+        }
+        public static implicit operator Tortricine(long?[] UnionArray)
+        {
+            return new Tortricine { UnionArray = UnionArray };
+        }
+    }
+
+    public partial struct TruantcyElement
+    {
+        public bool? Bool;
+        public TruantcyClass TruantcyClass;
+
+        public static implicit operator TruantcyElement(bool Bool)
+        {
+            return new TruantcyElement { Bool = Bool };
+        }
+        public static implicit operator TruantcyElement(TruantcyClass TruantcyClass)
+        {
+            return new TruantcyElement { TruantcyClass = TruantcyClass };
+        }
+    }
+
+    public partial struct Unbeginning
+    {
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Unbeginning(Dictionary<string, long> IntegerMap)
+        {
+            return new Unbeginning { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Unbeginning(object[] NullArray)
+        {
+            return new Unbeginning { NullArray = NullArray };
+        }
+        public static implicit operator Unbeginning(string String)
+        {
+            return new Unbeginning { String = String };
+        }
+    }
+
+    public partial struct Undesirability
+    {
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Undesirability(long[] IntegerArray)
+        {
+            return new Undesirability { IntegerArray = IntegerArray };
+        }
+        public static implicit operator Undesirability(Dictionary<string, long> IntegerMap)
+        {
+            return new Undesirability { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Undesirability(string String)
+        {
+            return new Undesirability { String = String };
+        }
+    }
+
+    public partial struct Unerasing
+    {
+        public long? Integer;
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+
+        public static implicit operator Unerasing(long Integer)
+        {
+            return new Unerasing { Integer = Integer };
+        }
+        public static implicit operator Unerasing(Dictionary<string, long> IntegerMap)
+        {
+            return new Unerasing { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Unerasing(object[] NullArray)
+        {
+            return new Unerasing { NullArray = NullArray };
+        }
+    }
+
+    public partial struct Unguentarium
+    {
+        public long? Integer;
+        public object[] NullArray;
+
+        public static implicit operator Unguentarium(long Integer)
+        {
+            return new Unguentarium { Integer = Integer };
+        }
+        public static implicit operator Unguentarium(object[] NullArray)
+        {
+            return new Unguentarium { NullArray = NullArray };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return NullArray == null && Integer == null;
+            }
+        }
+    }
+
+    public partial struct UnimpeachablyElement
+    {
+        public bool? Bool;
+        public UnimpeachablyClass UnimpeachablyClass;
+
+        public static implicit operator UnimpeachablyElement(bool Bool)
+        {
+            return new UnimpeachablyElement { Bool = Bool };
+        }
+        public static implicit operator UnimpeachablyElement(UnimpeachablyClass UnimpeachablyClass)
+        {
+            return new UnimpeachablyElement { UnimpeachablyClass = UnimpeachablyClass };
+        }
+    }
+
+    public partial struct Unmortgaged
+    {
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Unmortgaged(double Double)
+        {
+            return new Unmortgaged { Double = Double };
+        }
+        public static implicit operator Unmortgaged(Dictionary<string, long> IntegerMap)
+        {
+            return new Unmortgaged { IntegerMap = IntegerMap };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return Double == null && IntegerMap == null;
+            }
+        }
+    }
+
+    public partial struct Unobstructed
+    {
+        public long? Integer;
+        public QuebrachineClass QuebrachineClass;
+
+        public static implicit operator Unobstructed(long Integer)
+        {
+            return new Unobstructed { Integer = Integer };
+        }
+        public static implicit operator Unobstructed(QuebrachineClass QuebrachineClass)
+        {
+            return new Unobstructed { QuebrachineClass = QuebrachineClass };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return QuebrachineClass == null && Integer == null;
+            }
+        }
+    }
+
+    public partial struct Unreceptivity
+    {
+        public long? Integer;
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Unreceptivity(long Integer)
+        {
+            return new Unreceptivity { Integer = Integer };
+        }
+        public static implicit operator Unreceptivity(object[] NullArray)
+        {
+            return new Unreceptivity { NullArray = NullArray };
+        }
+        public static implicit operator Unreceptivity(string String)
+        {
+            return new Unreceptivity { String = String };
+        }
+    }
+
+    public partial struct Unsatisfactoriness
+    {
+        public bool? Bool;
+        public long? Integer;
+        public long[] IntegerArray;
+
+        public static implicit operator Unsatisfactoriness(bool Bool)
+        {
+            return new Unsatisfactoriness { Bool = Bool };
+        }
+        public static implicit operator Unsatisfactoriness(long Integer)
+        {
+            return new Unsatisfactoriness { Integer = Integer };
+        }
+        public static implicit operator Unsatisfactoriness(long[] IntegerArray)
+        {
+            return new Unsatisfactoriness { IntegerArray = IntegerArray };
+        }
+    }
+
+    public partial struct UnstressedElement
+    {
+        public bool? Bool;
+        public string String;
+        public UnstressedClass UnstressedClass;
+
+        public static implicit operator UnstressedElement(bool Bool)
+        {
+            return new UnstressedElement { Bool = Bool };
+        }
+        public static implicit operator UnstressedElement(string String)
+        {
+            return new UnstressedElement { String = String };
+        }
+        public static implicit operator UnstressedElement(UnstressedClass UnstressedClass)
+        {
+            return new UnstressedElement { UnstressedClass = UnstressedClass };
+        }
+    }
+
+    public partial struct Untasked
+    {
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+
+        public static implicit operator Untasked(double Double)
+        {
+            return new Untasked { Double = Double };
+        }
+        public static implicit operator Untasked(Dictionary<string, long> IntegerMap)
+        {
+            return new Untasked { IntegerMap = IntegerMap };
+        }
+        public static implicit operator Untasked(object[] NullArray)
+        {
+            return new Untasked { NullArray = NullArray };
+        }
+    }
+
+    public partial struct Unvarying
+    {
+        public bool? Bool;
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Unvarying(bool Bool)
+        {
+            return new Unvarying { Bool = Bool };
+        }
+        public static implicit operator Unvarying(double Double)
+        {
+            return new Unvarying { Double = Double };
+        }
+        public static implicit operator Unvarying(Dictionary<string, long> IntegerMap)
+        {
+            return new Unvarying { IntegerMap = IntegerMap };
+        }
+    }
+
+    public partial struct Vehemently
+    {
+        public bool? Bool;
+        public object[] NullArray;
+
+        public static implicit operator Vehemently(bool Bool)
+        {
+            return new Vehemently { Bool = Bool };
+        }
+        public static implicit operator Vehemently(object[] NullArray)
+        {
+            return new Vehemently { NullArray = NullArray };
+        }
+        public bool IsNull
+        {
+            get
+            {
+                return NullArray == null && Bool == null;
+            }
+        }
+    }
+
+    public partial struct Whitepot
+    {
+        public double? Double;
+        public QuebrachineClass QuebrachineClass;
+
+        public static implicit operator Whitepot(double Double)
+        {
+            return new Whitepot { Double = Double };
+        }
+        public static implicit operator Whitepot(QuebrachineClass QuebrachineClass)
+        {
+            return new Whitepot { QuebrachineClass = QuebrachineClass };
+        }
+    }
+
+    public partial struct WrothyElement
+    {
+        public object[] NullArray;
+        public WrothyClass WrothyClass;
+
+        public static implicit operator WrothyElement(object[] NullArray)
+        {
+            return new WrothyElement { NullArray = NullArray };
+        }
+        public static implicit operator WrothyElement(WrothyClass WrothyClass)
+        {
+            return new WrothyElement { WrothyClass = WrothyClass };
+        }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json)
+        {
+            return JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+        }
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self)
+        {
+            return JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+        }
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ProtrusiveConverter.Singleton,
+                PulpitismElementConverter.Singleton,
+                PyodermiaElementConverter.Singleton,
+                QuebrachineElementConverter.Singleton,
+                QuerierConverter.Singleton,
+                RebarbativeConverter.Singleton,
+                RetrocervicalConverter.Singleton,
+                RevertConverter.Singleton,
+                RewriteElementConverter.Singleton,
+                SaccodermConverter.Singleton,
+                SantirElementConverter.Singleton,
+                SaprophilousConverter.Singleton,
+                SaxtenElementConverter.Singleton,
+                ScofferConverter.Singleton,
+                ScrampumConverter.Singleton,
+                SerpentinicConverter.Singleton,
+                ShadowableConverter.Singleton,
+                SisteringElementConverter.Singleton,
+                StagmometerConverter.Singleton,
+                StimulabilityConverter.Singleton,
+                StrangleableConverter.Singleton,
+                StrenuosityElementConverter.Singleton,
+                TabaxirConverter.Singleton,
+                TalpiformConverter.Singleton,
+                ThwackConverter.Singleton,
+                TortricineConverter.Singleton,
+                TruantcyElementConverter.Singleton,
+                UnbeginningConverter.Singleton,
+                UndesirabilityConverter.Singleton,
+                UnerasingConverter.Singleton,
+                UnguentariumConverter.Singleton,
+                UnimpeachablyElementConverter.Singleton,
+                UnmortgagedConverter.Singleton,
+                UnobstructedConverter.Singleton,
+                UnreceptivityConverter.Singleton,
+                UnsatisfactorinessConverter.Singleton,
+                UnstressedElementConverter.Singleton,
+                UntaskedConverter.Singleton,
+                UnvaryingConverter.Singleton,
+                VehementlyConverter.Singleton,
+                WhitepotConverter.Singleton,
+                WrothyElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ProtrusiveConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Protrusive) || t == typeof(Protrusive?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Protrusive { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Protrusive { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protrusive");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protrusive)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protrusive");
+        }
+
+        public static readonly ProtrusiveConverter Singleton = new ProtrusiveConverter();
+    }
+
+    internal class PulpitismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(PulpitismElement) || t == typeof(PulpitismElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PulpitismElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PulpitismClass>(reader);
+                    return new PulpitismElement { PulpitismClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new PulpitismElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PulpitismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PulpitismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.PulpitismClass != null)
+            {
+                serializer.Serialize(writer, value.PulpitismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PulpitismElement");
+        }
+
+        public static readonly PulpitismElementConverter Singleton = new PulpitismElementConverter();
+    }
+
+    internal class PyodermiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(PyodermiaElement) || t == typeof(PyodermiaElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PyodermiaElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PyodermiaClass>(reader);
+                    return new PyodermiaElement { PyodermiaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PyodermiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PyodermiaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PyodermiaClass != null)
+            {
+                serializer.Serialize(writer, value.PyodermiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PyodermiaElement");
+        }
+
+        public static readonly PyodermiaElementConverter Singleton = new PyodermiaElementConverter();
+    }
+
+    internal class QuebrachineElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(QuebrachineElement) || t == typeof(QuebrachineElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new QuebrachineElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new QuebrachineElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new QuebrachineElement { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type QuebrachineElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (QuebrachineElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type QuebrachineElement");
+        }
+
+        public static readonly QuebrachineElementConverter Singleton = new QuebrachineElementConverter();
+    }
+
+    internal class QuerierConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Querier) || t == typeof(Querier?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Querier { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Querier { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Querier");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Querier)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Querier");
+        }
+
+        public static readonly QuerierConverter Singleton = new QuerierConverter();
+    }
+
+    internal class RebarbativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Rebarbative) || t == typeof(Rebarbative?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Rebarbative { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Rebarbative { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rebarbative { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rebarbative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rebarbative)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rebarbative");
+        }
+
+        public static readonly RebarbativeConverter Singleton = new RebarbativeConverter();
+    }
+
+    internal class RetrocervicalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Retrocervical) || t == typeof(Retrocervical?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Retrocervical { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Retrocervical { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Retrocervical");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Retrocervical)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Retrocervical");
+        }
+
+        public static readonly RetrocervicalConverter Singleton = new RetrocervicalConverter();
+    }
+
+    internal class RevertConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Revert) || t == typeof(Revert?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Revert { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Revert { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Revert");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Revert)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Revert");
+        }
+
+        public static readonly RevertConverter Singleton = new RevertConverter();
+    }
+
+    internal class RewriteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(RewriteElement) || t == typeof(RewriteElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new RewriteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<RewriteClass>(reader);
+                    return new RewriteElement { RewriteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new RewriteElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type RewriteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RewriteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.RewriteClass != null)
+            {
+                serializer.Serialize(writer, value.RewriteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type RewriteElement");
+        }
+
+        public static readonly RewriteElementConverter Singleton = new RewriteElementConverter();
+    }
+
+    internal class SaccodermConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Saccoderm) || t == typeof(Saccoderm?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saccoderm { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saccoderm { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Saccoderm { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Saccoderm");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saccoderm)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saccoderm");
+        }
+
+        public static readonly SaccodermConverter Singleton = new SaccodermConverter();
+    }
+
+    internal class SantirElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(SantirElement) || t == typeof(SantirElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new SantirElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SantirClass>(reader);
+                    return new SantirElement { SantirClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SantirElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SantirElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.SantirClass != null)
+            {
+                serializer.Serialize(writer, value.SantirClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SantirElement");
+        }
+
+        public static readonly SantirElementConverter Singleton = new SantirElementConverter();
+    }
+
+    internal class SaprophilousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Saprophilous) || t == typeof(Saprophilous?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saprophilous { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saprophilous { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Saprophilous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Saprophilous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saprophilous)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saprophilous");
+        }
+
+        public static readonly SaprophilousConverter Singleton = new SaprophilousConverter();
+    }
+
+    internal class SaxtenElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(SaxtenElement) || t == typeof(SaxtenElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new SaxtenElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SaxtenClass>(reader);
+                    return new SaxtenElement { SaxtenClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SaxtenElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SaxtenElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.SaxtenClass != null)
+            {
+                serializer.Serialize(writer, value.SaxtenClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SaxtenElement");
+        }
+
+        public static readonly SaxtenElementConverter Singleton = new SaxtenElementConverter();
+    }
+
+    internal class ScofferConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Scoffer) || t == typeof(Scoffer?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scoffer { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Scoffer { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Scoffer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scoffer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scoffer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scoffer");
+        }
+
+        public static readonly ScofferConverter Singleton = new ScofferConverter();
+    }
+
+    internal class ScrampumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Scrampum) || t == typeof(Scrampum?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scrampum { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Scrampum { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Scrampum { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scrampum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scrampum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scrampum");
+        }
+
+        public static readonly ScrampumConverter Singleton = new ScrampumConverter();
+    }
+
+    internal class SerpentinicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Serpentinic) || t == typeof(Serpentinic?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Serpentinic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Serpentinic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Serpentinic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Serpentinic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Serpentinic");
+        }
+
+        public static readonly SerpentinicConverter Singleton = new SerpentinicConverter();
+    }
+
+    internal class ShadowableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Shadowable) || t == typeof(Shadowable?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Shadowable { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Shadowable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shadowable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shadowable)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shadowable");
+        }
+
+        public static readonly ShadowableConverter Singleton = new ShadowableConverter();
+    }
+
+    internal class SisteringElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(SisteringElement) || t == typeof(SisteringElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new SisteringElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SisteringClass>(reader);
+                    return new SisteringElement { SisteringClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new SisteringElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type SisteringElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SisteringElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.SisteringClass != null)
+            {
+                serializer.Serialize(writer, value.SisteringClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SisteringElement");
+        }
+
+        public static readonly SisteringElementConverter Singleton = new SisteringElementConverter();
+    }
+
+    internal class StagmometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Stagmometer) || t == typeof(Stagmometer?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Stagmometer { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Stagmometer { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Stagmometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stagmometer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stagmometer");
+        }
+
+        public static readonly StagmometerConverter Singleton = new StagmometerConverter();
+    }
+
+    internal class StimulabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Stimulability) || t == typeof(Stimulability?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Stimulability { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Stimulability { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Stimulability { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Stimulability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stimulability)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stimulability");
+        }
+
+        public static readonly StimulabilityConverter Singleton = new StimulabilityConverter();
+    }
+
+    internal class StrangleableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Strangleable) || t == typeof(Strangleable?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Strangleable { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Strangleable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Strangleable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Strangleable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Strangleable");
+        }
+
+        public static readonly StrangleableConverter Singleton = new StrangleableConverter();
+    }
+
+    internal class StrenuosityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(StrenuosityElement) || t == typeof(StrenuosityElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<StrenuosityClass>(reader);
+                    return new StrenuosityElement { StrenuosityClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new StrenuosityElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type StrenuosityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (StrenuosityElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.StrenuosityClass != null)
+            {
+                serializer.Serialize(writer, value.StrenuosityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type StrenuosityElement");
+        }
+
+        public static readonly StrenuosityElementConverter Singleton = new StrenuosityElementConverter();
+    }
+
+    internal class TabaxirConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Tabaxir) || t == typeof(Tabaxir?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Tabaxir { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Tabaxir { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Tabaxir");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tabaxir)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tabaxir");
+        }
+
+        public static readonly TabaxirConverter Singleton = new TabaxirConverter();
+    }
+
+    internal class TalpiformConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Talpiform) || t == typeof(Talpiform?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Talpiform { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Talpiform { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Talpiform { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Talpiform");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Talpiform)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Talpiform");
+        }
+
+        public static readonly TalpiformConverter Singleton = new TalpiformConverter();
+    }
+
+    internal class ThwackConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Thwack) || t == typeof(Thwack?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Thwack { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Thwack { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Thwack { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Thwack");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Thwack)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Thwack");
+        }
+
+        public static readonly ThwackConverter Singleton = new ThwackConverter();
+    }
+
+    internal class TortricineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Tortricine) || t == typeof(Tortricine?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Tortricine { QuebrachineClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Tortricine { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Tortricine");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tortricine)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tortricine");
+        }
+
+        public static readonly TortricineConverter Singleton = new TortricineConverter();
+    }
+
+    internal class TruantcyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(TruantcyElement) || t == typeof(TruantcyElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new TruantcyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TruantcyClass>(reader);
+                    return new TruantcyElement { TruantcyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type TruantcyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TruantcyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.TruantcyClass != null)
+            {
+                serializer.Serialize(writer, value.TruantcyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type TruantcyElement");
+        }
+
+        public static readonly TruantcyElementConverter Singleton = new TruantcyElementConverter();
+    }
+
+    internal class UnbeginningConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Unbeginning) || t == typeof(Unbeginning?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unbeginning { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unbeginning { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unbeginning { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unbeginning");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unbeginning)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unbeginning");
+        }
+
+        public static readonly UnbeginningConverter Singleton = new UnbeginningConverter();
+    }
+
+    internal class UndesirabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Undesirability) || t == typeof(Undesirability?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Undesirability { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Undesirability { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Undesirability { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Undesirability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Undesirability)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Undesirability");
+        }
+
+        public static readonly UndesirabilityConverter Singleton = new UndesirabilityConverter();
+    }
+
+    internal class UnerasingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Unerasing) || t == typeof(Unerasing?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unerasing { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unerasing { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unerasing { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unerasing");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unerasing)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unerasing");
+        }
+
+        public static readonly UnerasingConverter Singleton = new UnerasingConverter();
+    }
+
+    internal class UnguentariumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Unguentarium) || t == typeof(Unguentarium?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unguentarium { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unguentarium { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unguentarium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unguentarium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unguentarium)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unguentarium");
+        }
+
+        public static readonly UnguentariumConverter Singleton = new UnguentariumConverter();
+    }
+
+    internal class UnimpeachablyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(UnimpeachablyElement) || t == typeof(UnimpeachablyElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnimpeachablyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnimpeachablyClass>(reader);
+                    return new UnimpeachablyElement { UnimpeachablyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnimpeachablyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnimpeachablyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnimpeachablyClass != null)
+            {
+                serializer.Serialize(writer, value.UnimpeachablyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnimpeachablyElement");
+        }
+
+        public static readonly UnimpeachablyElementConverter Singleton = new UnimpeachablyElementConverter();
+    }
+
+    internal class UnmortgagedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Unmortgaged) || t == typeof(Unmortgaged?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unmortgaged { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unmortgaged { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unmortgaged { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unmortgaged");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unmortgaged)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unmortgaged");
+        }
+
+        public static readonly UnmortgagedConverter Singleton = new UnmortgagedConverter();
+    }
+
+    internal class UnobstructedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Unobstructed) || t == typeof(Unobstructed?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unobstructed { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unobstructed { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Unobstructed { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unobstructed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unobstructed)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unobstructed");
+        }
+
+        public static readonly UnobstructedConverter Singleton = new UnobstructedConverter();
+    }
+
+    internal class UnreceptivityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Unreceptivity) || t == typeof(Unreceptivity?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unreceptivity { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unreceptivity { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unreceptivity { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unreceptivity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unreceptivity)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unreceptivity");
+        }
+
+        public static readonly UnreceptivityConverter Singleton = new UnreceptivityConverter();
+    }
+
+    internal class UnsatisfactorinessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Unsatisfactoriness) || t == typeof(Unsatisfactoriness?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unsatisfactoriness { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unsatisfactoriness { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Unsatisfactoriness { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unsatisfactoriness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unsatisfactoriness)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unsatisfactoriness");
+        }
+
+        public static readonly UnsatisfactorinessConverter Singleton = new UnsatisfactorinessConverter();
+    }
+
+    internal class UnstressedElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(UnstressedElement) || t == typeof(UnstressedElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnstressedElement { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new UnstressedElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnstressedClass>(reader);
+                    return new UnstressedElement { UnstressedClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnstressedElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnstressedElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnstressedClass != null)
+            {
+                serializer.Serialize(writer, value.UnstressedClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnstressedElement");
+        }
+
+        public static readonly UnstressedElementConverter Singleton = new UnstressedElementConverter();
+    }
+
+    internal class UntaskedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Untasked) || t == typeof(Untasked?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Untasked { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Untasked { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Untasked { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Untasked");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Untasked)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Untasked");
+        }
+
+        public static readonly UntaskedConverter Singleton = new UntaskedConverter();
+    }
+
+    internal class UnvaryingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Unvarying) || t == typeof(Unvarying?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unvarying { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unvarying { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unvarying { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unvarying");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unvarying)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unvarying");
+        }
+
+        public static readonly UnvaryingConverter Singleton = new UnvaryingConverter();
+    }
+
+    internal class VehementlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Vehemently) || t == typeof(Vehemently?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Vehemently { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Vehemently { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Vehemently { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Vehemently");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Vehemently)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Vehemently");
+        }
+
+        public static readonly VehementlyConverter Singleton = new VehementlyConverter();
+    }
+
+    internal class WhitepotConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(Whitepot) || t == typeof(Whitepot?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Whitepot { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Whitepot { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Whitepot");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Whitepot)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Whitepot");
+        }
+
+        public static readonly WhitepotConverter Singleton = new WhitepotConverter();
+    }
+
+    internal class WrothyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t)
+        {
+            return t == typeof(WrothyElement) || t == typeof(WrothyElement?);
+        }
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<WrothyClass>(reader);
+                    return new WrothyElement { WrothyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new WrothyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type WrothyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (WrothyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.WrothyClass != null)
+            {
+                serializer.Serialize(writer, value.WrothyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type WrothyElement");
+        }
+
+        public static readonly WrothyElementConverter Singleton = new WrothyElementConverter();
+    }
+}
diff --git a/head/csharp-records/test/inputs/json/priority/combinations4.json/csharp-version-6--6a3b58bb4100/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations4.json/csharp-version-6--6a3b58bb4100/QuickType.cs
new file mode 100644
index 0000000..b758dd4
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations4.json/csharp-version-6--6a3b58bb4100/QuickType.cs
@@ -0,0 +1,3469 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("protrusive", Required = Required.Always)]
+        public Protrusive[] Protrusive { get; set; }
+
+        [JsonProperty("pulpitism", Required = Required.Always)]
+        public PulpitismElement[] Pulpitism { get; set; }
+
+        [JsonProperty("pyodermia", Required = Required.Always)]
+        public PyodermiaElement[] Pyodermia { get; set; }
+
+        [JsonProperty("quebrachine", Required = Required.Always)]
+        public QuebrachineElement[] Quebrachine { get; set; }
+
+        [JsonProperty("querier", Required = Required.Always)]
+        public Querier[] Querier { get; set; }
+
+        [JsonProperty("rebarbative", Required = Required.Always)]
+        public Rebarbative[] Rebarbative { get; set; }
+
+        [JsonProperty("reimagine", Required = Required.Always)]
+        public Reimagine[] Reimagine { get; set; }
+
+        [JsonProperty("ressaut", Required = Required.Always)]
+        public Ressaut Ressaut { get; set; }
+
+        [JsonProperty("retrocervical", Required = Required.Always)]
+        public Retrocervical[] Retrocervical { get; set; }
+
+        [JsonProperty("revert", Required = Required.Always)]
+        public Revert[] Revert { get; set; }
+
+        [JsonProperty("rewrite", Required = Required.Always)]
+        public RewriteElement[] Rewrite { get; set; }
+
+        [JsonProperty("saccoderm", Required = Required.Always)]
+        public Saccoderm[] Saccoderm { get; set; }
+
+        [JsonProperty("santir", Required = Required.Always)]
+        public SantirElement[] Santir { get; set; }
+
+        [JsonProperty("saprophilous", Required = Required.Always)]
+        public Saprophilous[] Saprophilous { get; set; }
+
+        [JsonProperty("saxten", Required = Required.Always)]
+        public SaxtenElement[] Saxten { get; set; }
+
+        [JsonProperty("scatty", Required = Required.Always)]
+        public Scatty[] Scatty { get; set; }
+
+        [JsonProperty("scoffer", Required = Required.Always)]
+        public Scoffer[] Scoffer { get; set; }
+
+        [JsonProperty("scrampum", Required = Required.Always)]
+        public Scrampum[] Scrampum { get; set; }
+
+        [JsonProperty("semantic", Required = Required.Always)]
+        public double Semantic { get; set; }
+
+        [JsonProperty("serpentinic", Required = Required.Always)]
+        public Serpentinic[] Serpentinic { get; set; }
+
+        [JsonProperty("shadowable", Required = Required.Always)]
+        public Shadowable[] Shadowable { get; set; }
+
+        [JsonProperty("sistering", Required = Required.Always)]
+        public SisteringElement[] Sistering { get; set; }
+
+        [JsonProperty("staghunting", Required = Required.Always)]
+        public Staghunting[] Staghunting { get; set; }
+
+        [JsonProperty("stagmometer", Required = Required.Always)]
+        public Stagmometer[] Stagmometer { get; set; }
+
+        [JsonProperty("stimulability", Required = Required.Always)]
+        public Stimulability[] Stimulability { get; set; }
+
+        [JsonProperty("strangleable", Required = Required.Always)]
+        public Strangleable[] Strangleable { get; set; }
+
+        [JsonProperty("strenuosity", Required = Required.Always)]
+        public StrenuosityElement[] Strenuosity { get; set; }
+
+        [JsonProperty("tabaxir", Required = Required.Always)]
+        public Tabaxir[] Tabaxir { get; set; }
+
+        [JsonProperty("talpiform", Required = Required.Always)]
+        public Talpiform[] Talpiform { get; set; }
+
+        [JsonProperty("thwack", Required = Required.Always)]
+        public Thwack[] Thwack { get; set; }
+
+        [JsonProperty("to", Required = Required.Always)]
+        public double?[] To { get; set; }
+
+        [JsonProperty("tortricine", Required = Required.Always)]
+        public Tortricine[] Tortricine { get; set; }
+
+        [JsonProperty("truantcy", Required = Required.Always)]
+        public TruantcyElement[] Truantcy { get; set; }
+
+        [JsonProperty("turgesce", Required = Required.Always)]
+        public string[] Turgesce { get; set; }
+
+        [JsonProperty("unbeginning", Required = Required.Always)]
+        public Unbeginning[] Unbeginning { get; set; }
+
+        [JsonProperty("underdunged", Required = Required.Always)]
+        public double[] Underdunged { get; set; }
+
+        [JsonProperty("undesirability", Required = Required.Always)]
+        public Undesirability[] Undesirability { get; set; }
+
+        [JsonProperty("unerasing", Required = Required.Always)]
+        public Unerasing[] Unerasing { get; set; }
+
+        [JsonProperty("unguentarium", Required = Required.Always)]
+        public Unguentarium[] Unguentarium { get; set; }
+
+        [JsonProperty("unimpeachably", Required = Required.Always)]
+        public UnimpeachablyElement[] Unimpeachably { get; set; }
+
+        [JsonProperty("unmortgaged", Required = Required.Always)]
+        public Unmortgaged[] Unmortgaged { get; set; }
+
+        [JsonProperty("unobstructed", Required = Required.Always)]
+        public Unobstructed[] Unobstructed { get; set; }
+
+        [JsonProperty("unreceptivity", Required = Required.Always)]
+        public Unreceptivity[] Unreceptivity { get; set; }
+
+        [JsonProperty("unsatisfactoriness", Required = Required.Always)]
+        public Unsatisfactoriness[] Unsatisfactoriness { get; set; }
+
+        [JsonProperty("unsecurity", Required = Required.Always)]
+        public long[] Unsecurity { get; set; }
+
+        [JsonProperty("unstressed", Required = Required.Always)]
+        public UnstressedElement[] Unstressed { get; set; }
+
+        [JsonProperty("untasked", Required = Required.Always)]
+        public Untasked[] Untasked { get; set; }
+
+        [JsonProperty("unvarying", Required = Required.Always)]
+        public Unvarying[] Unvarying { get; set; }
+
+        [JsonProperty("vehemently", Required = Required.Always)]
+        public Vehemently[] Vehemently { get; set; }
+
+        [JsonProperty("warriorship", Required = Required.Always)]
+        public Dictionary<string, bool> Warriorship { get; set; }
+
+        [JsonProperty("whitepot", Required = Required.Always)]
+        public Whitepot[] Whitepot { get; set; }
+
+        [JsonProperty("wrothy", Required = Required.Always)]
+        public WrothyElement[] Wrothy { get; set; }
+    }
+
+    public partial record PulpitismClass
+    {
+        [JsonProperty("abnet", Required = Required.AllowNull)]
+        public object Abnet { get; set; }
+
+        [JsonProperty("buckhorn", Required = Required.AllowNull)]
+        public object Buckhorn { get; set; }
+
+        [JsonProperty("calciform", Required = Required.AllowNull)]
+        public object Calciform { get; set; }
+
+        [JsonProperty("chelophore", Required = Required.AllowNull)]
+        public object Chelophore { get; set; }
+
+        [JsonProperty("cogitation", Required = Required.AllowNull)]
+        public object Cogitation { get; set; }
+
+        [JsonProperty("decreeable", Required = Required.AllowNull)]
+        public object Decreeable { get; set; }
+
+        [JsonProperty("despicable", Required = Required.AllowNull)]
+        public object Despicable { get; set; }
+
+        [JsonProperty("isodiazo", Required = Required.AllowNull)]
+        public object Isodiazo { get; set; }
+
+        [JsonProperty("jadedly", Required = Required.AllowNull)]
+        public object Jadedly { get; set; }
+
+        [JsonProperty("leptochlorite", Required = Required.AllowNull)]
+        public object Leptochlorite { get; set; }
+
+        [JsonProperty("nursling", Required = Required.AllowNull)]
+        public object Nursling { get; set; }
+
+        [JsonProperty("palamedean", Required = Required.AllowNull)]
+        public object Palamedean { get; set; }
+
+        [JsonProperty("photoheliograph", Required = Required.AllowNull)]
+        public object Photoheliograph { get; set; }
+
+        [JsonProperty("pipewood", Required = Required.AllowNull)]
+        public object Pipewood { get; set; }
+
+        [JsonProperty("roberd", Required = Required.AllowNull)]
+        public object Roberd { get; set; }
+
+        [JsonProperty("statable", Required = Required.AllowNull)]
+        public object Statable { get; set; }
+
+        [JsonProperty("superassume", Required = Required.AllowNull)]
+        public object Superassume { get; set; }
+
+        [JsonProperty("syllabe", Required = Required.AllowNull)]
+        public object Syllabe { get; set; }
+
+        [JsonProperty("toughhead", Required = Required.AllowNull)]
+        public object Toughhead { get; set; }
+
+        [JsonProperty("underburn", Required = Required.AllowNull)]
+        public object Underburn { get; set; }
+    }
+
+    public partial record PyodermiaClass
+    {
+        [JsonProperty("aphoristically", Required = Required.AllowNull)]
+        public object Aphoristically { get; set; }
+
+        [JsonProperty("apophyllous", Required = Required.AllowNull)]
+        public object Apophyllous { get; set; }
+
+        [JsonProperty("cognize", Required = Required.AllowNull)]
+        public object Cognize { get; set; }
+
+        [JsonProperty("dermonosology", Required = Required.AllowNull)]
+        public object Dermonosology { get; set; }
+
+        [JsonProperty("Gyppo", Required = Required.AllowNull)]
+        public object Gyppo { get; set; }
+
+        [JsonProperty("ither", Required = Required.AllowNull)]
+        public object Ither { get; set; }
+
+        [JsonProperty("juglandaceous", Required = Required.AllowNull)]
+        public object Juglandaceous { get; set; }
+
+        [JsonProperty("litho", Required = Required.AllowNull)]
+        public object Litho { get; set; }
+
+        [JsonProperty("macropterous", Required = Required.AllowNull)]
+        public object Macropterous { get; set; }
+
+        [JsonProperty("photographer", Required = Required.AllowNull)]
+        public object Photographer { get; set; }
+
+        [JsonProperty("romancing", Required = Required.AllowNull)]
+        public object Romancing { get; set; }
+
+        [JsonProperty("rumness", Required = Required.AllowNull)]
+        public object Rumness { get; set; }
+
+        [JsonProperty("somniloquist", Required = Required.AllowNull)]
+        public object Somniloquist { get; set; }
+
+        [JsonProperty("stressfully", Required = Required.AllowNull)]
+        public object Stressfully { get; set; }
+
+        [JsonProperty("tactically", Required = Required.AllowNull)]
+        public object Tactically { get; set; }
+
+        [JsonProperty("tracheophony", Required = Required.AllowNull)]
+        public object Tracheophony { get; set; }
+
+        [JsonProperty("unappositely", Required = Required.AllowNull)]
+        public object Unappositely { get; set; }
+
+        [JsonProperty("unclothedly", Required = Required.AllowNull)]
+        public object Unclothedly { get; set; }
+
+        [JsonProperty("unimplied", Required = Required.AllowNull)]
+        public object Unimplied { get; set; }
+
+        [JsonProperty("unsyncopated", Required = Required.AllowNull)]
+        public object Unsyncopated { get; set; }
+    }
+
+    public partial record QuebrachineClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Reimagine
+    {
+        [JsonProperty("adducible")]
+        public object Adducible { get; set; }
+
+        [JsonProperty("anabolin")]
+        public object Anabolin { get; set; }
+
+        [JsonProperty("brainy")]
+        public object Brainy { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chrysamine")]
+        public object Chrysamine { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("fluxweed")]
+        public object Fluxweed { get; set; }
+
+        [JsonProperty("glaucine")]
+        public object Glaucine { get; set; }
+
+        [JsonProperty("grobianism")]
+        public object Grobianism { get; set; }
+
+        [JsonProperty("Hermo")]
+        public object Hermo { get; set; }
+
+        [JsonProperty("hieroglyphist")]
+        public object Hieroglyphist { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("icteroid")]
+        public object Icteroid { get; set; }
+
+        [JsonProperty("immortal")]
+        public object Immortal { get; set; }
+
+        [JsonProperty("impetulant")]
+        public object Impetulant { get; set; }
+
+        [JsonProperty("irrigate")]
+        public object Irrigate { get; set; }
+
+        [JsonProperty("myxedema")]
+        public object Myxedema { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("onyx")]
+        public object Onyx { get; set; }
+
+        [JsonProperty("repasser")]
+        public object Repasser { get; set; }
+
+        [JsonProperty("septomarginal")]
+        public object Septomarginal { get; set; }
+
+        [JsonProperty("subdie")]
+        public object Subdie { get; set; }
+
+        [JsonProperty("tibiometatarsal")]
+        public object Tibiometatarsal { get; set; }
+
+        [JsonProperty("waltzlike")]
+        public object Waltzlike { get; set; }
+    }
+
+    public partial record Ressaut
+    {
+        [JsonProperty("apperceptive", Required = Required.Always)]
+        public string Apperceptive { get; set; }
+
+        [JsonProperty("cuttoo", Required = Required.Always)]
+        public string Cuttoo { get; set; }
+
+        [JsonProperty("douser", Required = Required.Always)]
+        public string Douser { get; set; }
+
+        [JsonProperty("drinkproof", Required = Required.Always)]
+        public string Drinkproof { get; set; }
+
+        [JsonProperty("forementioned", Required = Required.Always)]
+        public string Forementioned { get; set; }
+
+        [JsonProperty("Freesia", Required = Required.Always)]
+        public string Freesia { get; set; }
+
+        [JsonProperty("Genevieve", Required = Required.Always)]
+        public string Genevieve { get; set; }
+
+        [JsonProperty("hyperdiabolical", Required = Required.Always)]
+        public string Hyperdiabolical { get; set; }
+
+        [JsonProperty("hypocone", Required = Required.Always)]
+        public string Hypocone { get; set; }
+
+        [JsonProperty("irreverentially", Required = Required.Always)]
+        public string Irreverentially { get; set; }
+
+        [JsonProperty("jumart", Required = Required.Always)]
+        public string Jumart { get; set; }
+
+        [JsonProperty("Mimosaceae", Required = Required.Always)]
+        public string Mimosaceae { get; set; }
+
+        [JsonProperty("mollicrush", Required = Required.Always)]
+        public string Mollicrush { get; set; }
+
+        [JsonProperty("nedder", Required = Required.Always)]
+        public string Nedder { get; set; }
+
+        [JsonProperty("retinasphalt", Required = Required.Always)]
+        public string Retinasphalt { get; set; }
+
+        [JsonProperty("sough", Required = Required.Always)]
+        public string Sough { get; set; }
+
+        [JsonProperty("steading", Required = Required.Always)]
+        public string Steading { get; set; }
+
+        [JsonProperty("Theopaschitism", Required = Required.Always)]
+        public string Theopaschitism { get; set; }
+
+        [JsonProperty("undurableness", Required = Required.Always)]
+        public string Undurableness { get; set; }
+
+        [JsonProperty("unmingleable", Required = Required.Always)]
+        public string Unmingleable { get; set; }
+    }
+
+    public partial record RewriteClass
+    {
+        [JsonProperty("accountancy", Required = Required.AllowNull)]
+        public object Accountancy { get; set; }
+
+        [JsonProperty("cacotrophic", Required = Required.AllowNull)]
+        public object Cacotrophic { get; set; }
+
+        [JsonProperty("contest", Required = Required.AllowNull)]
+        public object Contest { get; set; }
+
+        [JsonProperty("couthily", Required = Required.AllowNull)]
+        public object Couthily { get; set; }
+
+        [JsonProperty("falculate", Required = Required.AllowNull)]
+        public object Falculate { get; set; }
+
+        [JsonProperty("foreseize", Required = Required.AllowNull)]
+        public object Foreseize { get; set; }
+
+        [JsonProperty("Hyades", Required = Required.AllowNull)]
+        public object Hyades { get; set; }
+
+        [JsonProperty("lemnad", Required = Required.AllowNull)]
+        public object Lemnad { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.AllowNull)]
+        public object Monotheistically { get; set; }
+
+        [JsonProperty("nonflying", Required = Required.AllowNull)]
+        public object Nonflying { get; set; }
+
+        [JsonProperty("Ptenoglossa", Required = Required.AllowNull)]
+        public object Ptenoglossa { get; set; }
+
+        [JsonProperty("repatch", Required = Required.AllowNull)]
+        public object Repatch { get; set; }
+
+        [JsonProperty("rodman", Required = Required.AllowNull)]
+        public object Rodman { get; set; }
+
+        [JsonProperty("strung", Required = Required.AllowNull)]
+        public object Strung { get; set; }
+
+        [JsonProperty("titmal", Required = Required.AllowNull)]
+        public object Titmal { get; set; }
+
+        [JsonProperty("twalpennyworth", Required = Required.AllowNull)]
+        public object Twalpennyworth { get; set; }
+
+        [JsonProperty("unblamable", Required = Required.AllowNull)]
+        public object Unblamable { get; set; }
+
+        [JsonProperty("vertical", Required = Required.AllowNull)]
+        public object Vertical { get; set; }
+
+        [JsonProperty("Whiggification", Required = Required.AllowNull)]
+        public object Whiggification { get; set; }
+
+        [JsonProperty("yardman", Required = Required.AllowNull)]
+        public object Yardman { get; set; }
+    }
+
+    public partial record SantirClass
+    {
+        [JsonProperty("admiredly", Required = Required.AllowNull)]
+        public object Admiredly { get; set; }
+
+        [JsonProperty("demicaponier", Required = Required.AllowNull)]
+        public object Demicaponier { get; set; }
+
+        [JsonProperty("epitympanic", Required = Required.AllowNull)]
+        public object Epitympanic { get; set; }
+
+        [JsonProperty("investitor", Required = Required.AllowNull)]
+        public object Investitor { get; set; }
+
+        [JsonProperty("lupiform", Required = Required.AllowNull)]
+        public object Lupiform { get; set; }
+
+        [JsonProperty("monoflagellate", Required = Required.AllowNull)]
+        public object Monoflagellate { get; set; }
+
+        [JsonProperty("paleoethnic", Required = Required.AllowNull)]
+        public object Paleoethnic { get; set; }
+
+        [JsonProperty("prediscountable", Required = Required.AllowNull)]
+        public object Prediscountable { get; set; }
+
+        [JsonProperty("rhetoricals", Required = Required.AllowNull)]
+        public object Rhetoricals { get; set; }
+
+        [JsonProperty("roomth", Required = Required.AllowNull)]
+        public object Roomth { get; set; }
+
+        [JsonProperty("saccharose", Required = Required.AllowNull)]
+        public object Saccharose { get; set; }
+
+        [JsonProperty("septonasal", Required = Required.AllowNull)]
+        public object Septonasal { get; set; }
+
+        [JsonProperty("serpenticide", Required = Required.AllowNull)]
+        public object Serpenticide { get; set; }
+
+        [JsonProperty("setarious", Required = Required.AllowNull)]
+        public object Setarious { get; set; }
+
+        [JsonProperty("spaework", Required = Required.AllowNull)]
+        public object Spaework { get; set; }
+
+        [JsonProperty("stylite", Required = Required.AllowNull)]
+        public object Stylite { get; set; }
+
+        [JsonProperty("Suessiones", Required = Required.AllowNull)]
+        public object Suessiones { get; set; }
+
+        [JsonProperty("timelily", Required = Required.AllowNull)]
+        public object Timelily { get; set; }
+
+        [JsonProperty("unprofaned", Required = Required.AllowNull)]
+        public object Unprofaned { get; set; }
+
+        [JsonProperty("vorticular", Required = Required.AllowNull)]
+        public object Vorticular { get; set; }
+    }
+
+    public partial record SaxtenClass
+    {
+        [JsonProperty("algarrobilla")]
+        public object Algarrobilla { get; set; }
+
+        [JsonProperty("bowgrace")]
+        public object Bowgrace { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Centaurid")]
+        public object Centaurid { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("flix")]
+        public object Flix { get; set; }
+
+        [JsonProperty("germanely")]
+        public object Germanely { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("inhume")]
+        public object Inhume { get; set; }
+
+        [JsonProperty("lepidote")]
+        public object Lepidote { get; set; }
+
+        [JsonProperty("megalochirous")]
+        public object Megalochirous { get; set; }
+
+        [JsonProperty("ninepenny")]
+        public object Ninepenny { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("nondeist")]
+        public object Nondeist { get; set; }
+
+        [JsonProperty("nymphaeaceous")]
+        public object Nymphaeaceous { get; set; }
+
+        [JsonProperty("parietofrontal")]
+        public object Parietofrontal { get; set; }
+
+        [JsonProperty("sancyite")]
+        public object Sancyite { get; set; }
+
+        [JsonProperty("subjectivist")]
+        public object Subjectivist { get; set; }
+
+        [JsonProperty("tibiad")]
+        public object Tibiad { get; set; }
+
+        [JsonProperty("transonic")]
+        public object Transonic { get; set; }
+
+        [JsonProperty("tripetalous")]
+        public object Tripetalous { get; set; }
+
+        [JsonProperty("trunchman")]
+        public object Trunchman { get; set; }
+
+        [JsonProperty("urger")]
+        public object Urger { get; set; }
+
+        [JsonProperty("withdrawnness")]
+        public object Withdrawnness { get; set; }
+    }
+
+    public partial record Scatty
+    {
+        [JsonProperty("aeriferous", Required = Required.AllowNull)]
+        public object Aeriferous { get; set; }
+
+        [JsonProperty("antical", Required = Required.AllowNull)]
+        public object Antical { get; set; }
+
+        [JsonProperty("antighostism", Required = Required.AllowNull)]
+        public object Antighostism { get; set; }
+
+        [JsonProperty("arcanum", Required = Required.AllowNull)]
+        public object Arcanum { get; set; }
+
+        [JsonProperty("autotrophy", Required = Required.AllowNull)]
+        public object Autotrophy { get; set; }
+
+        [JsonProperty("baronial", Required = Required.AllowNull)]
+        public object Baronial { get; set; }
+
+        [JsonProperty("caffeine", Required = Required.AllowNull)]
+        public object Caffeine { get; set; }
+
+        [JsonProperty("gorgoniacean", Required = Required.AllowNull)]
+        public object Gorgoniacean { get; set; }
+
+        [JsonProperty("heroical", Required = Required.AllowNull)]
+        public object Heroical { get; set; }
+
+        [JsonProperty("hydropical", Required = Required.AllowNull)]
+        public object Hydropical { get; set; }
+
+        [JsonProperty("mechanology", Required = Required.AllowNull)]
+        public object Mechanology { get; set; }
+
+        [JsonProperty("musicopoetic", Required = Required.AllowNull)]
+        public object Musicopoetic { get; set; }
+
+        [JsonProperty("officiality", Required = Required.AllowNull)]
+        public object Officiality { get; set; }
+
+        [JsonProperty("oftentimes", Required = Required.AllowNull)]
+        public object Oftentimes { get; set; }
+
+        [JsonProperty("ophthalmotonometer", Required = Required.AllowNull)]
+        public object Ophthalmotonometer { get; set; }
+
+        [JsonProperty("reflectively", Required = Required.AllowNull)]
+        public object Reflectively { get; set; }
+
+        [JsonProperty("springer", Required = Required.AllowNull)]
+        public object Springer { get; set; }
+
+        [JsonProperty("Tabasco", Required = Required.AllowNull)]
+        public object Tabasco { get; set; }
+
+        [JsonProperty("teleianthous", Required = Required.AllowNull)]
+        public object Teleianthous { get; set; }
+
+        [JsonProperty("uncombated", Required = Required.AllowNull)]
+        public object Uncombated { get; set; }
+    }
+
+    public partial record SisteringClass
+    {
+        [JsonProperty("amphicarpic", Required = Required.AllowNull)]
+        public object Amphicarpic { get; set; }
+
+        [JsonProperty("Chianti", Required = Required.AllowNull)]
+        public object Chianti { get; set; }
+
+        [JsonProperty("frigorific", Required = Required.AllowNull)]
+        public object Frigorific { get; set; }
+
+        [JsonProperty("Haplomi", Required = Required.AllowNull)]
+        public object Haplomi { get; set; }
+
+        [JsonProperty("hyperkinesis", Required = Required.AllowNull)]
+        public object Hyperkinesis { get; set; }
+
+        [JsonProperty("laudable", Required = Required.AllowNull)]
+        public object Laudable { get; set; }
+
+        [JsonProperty("madwoman", Required = Required.AllowNull)]
+        public object Madwoman { get; set; }
+
+        [JsonProperty("maimedly", Required = Required.AllowNull)]
+        public object Maimedly { get; set; }
+
+        [JsonProperty("Micropterygidae", Required = Required.AllowNull)]
+        public object Micropterygidae { get; set; }
+
+        [JsonProperty("microrhabdus", Required = Required.AllowNull)]
+        public object Microrhabdus { get; set; }
+
+        [JsonProperty("nondense", Required = Required.AllowNull)]
+        public object Nondense { get; set; }
+
+        [JsonProperty("phlebemphraxis", Required = Required.AllowNull)]
+        public object Phlebemphraxis { get; set; }
+
+        [JsonProperty("redsear", Required = Required.AllowNull)]
+        public object Redsear { get; set; }
+
+        [JsonProperty("schismatical", Required = Required.AllowNull)]
+        public object Schismatical { get; set; }
+
+        [JsonProperty("tartryl", Required = Required.AllowNull)]
+        public object Tartryl { get; set; }
+
+        [JsonProperty("unabhorred", Required = Required.AllowNull)]
+        public object Unabhorred { get; set; }
+
+        [JsonProperty("undeliberateness", Required = Required.AllowNull)]
+        public object Undeliberateness { get; set; }
+
+        [JsonProperty("unmixable", Required = Required.AllowNull)]
+        public object Unmixable { get; set; }
+
+        [JsonProperty("untruckling", Required = Required.AllowNull)]
+        public object Untruckling { get; set; }
+
+        [JsonProperty("vineal", Required = Required.AllowNull)]
+        public object Vineal { get; set; }
+    }
+
+    public partial record Staghunting
+    {
+        [JsonProperty("calorimetric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Calorimetric { get; set; }
+
+        [JsonProperty("canid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Canid { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("ditriglyphic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ditriglyphic { get; set; }
+
+        [JsonProperty("floriferousness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Floriferousness { get; set; }
+
+        [JsonProperty("gamelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamelike { get; set; }
+
+        [JsonProperty("grig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Grig { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("interloan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Interloan { get; set; }
+
+        [JsonProperty("lithotomy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lithotomy { get; set; }
+
+        [JsonProperty("loric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loric { get; set; }
+
+        [JsonProperty("membranocoriaceous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranocoriaceous { get; set; }
+
+        [JsonProperty("membranogenic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranogenic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("overtrump", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overtrump { get; set; }
+
+        [JsonProperty("scotino", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scotino { get; set; }
+
+        [JsonProperty("seasonable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seasonable { get; set; }
+
+        [JsonProperty("sephen", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sephen { get; set; }
+
+        [JsonProperty("stigmarioid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stigmarioid { get; set; }
+
+        [JsonProperty("tired", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tired { get; set; }
+
+        [JsonProperty("trifid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trifid { get; set; }
+
+        [JsonProperty("undefeatedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undefeatedly { get; set; }
+
+        [JsonProperty("ungirlish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ungirlish { get; set; }
+    }
+
+    public partial record StrenuosityClass
+    {
+        [JsonProperty("bliss", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bliss { get; set; }
+
+        [JsonProperty("buccate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Buccate { get; set; }
+
+        [JsonProperty("bulletproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bulletproof { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("crumblingness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crumblingness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("engagedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Engagedly { get; set; }
+
+        [JsonProperty("fightable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fightable { get; set; }
+
+        [JsonProperty("hoariness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hoariness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hypopodium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hypopodium { get; set; }
+
+        [JsonProperty("luxurist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Luxurist { get; set; }
+
+        [JsonProperty("mechanician", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mechanician { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("Onopordon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Onopordon { get; set; }
+
+        [JsonProperty("podgily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Podgily { get; set; }
+
+        [JsonProperty("reformableness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Reformableness { get; set; }
+
+        [JsonProperty("scatterbrains", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scatterbrains { get; set; }
+
+        [JsonProperty("seminuria", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seminuria { get; set; }
+
+        [JsonProperty("Sodomite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sodomite { get; set; }
+
+        [JsonProperty("tramp", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tramp { get; set; }
+
+        [JsonProperty("undueness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undueness { get; set; }
+
+        [JsonProperty("worthily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Worthily { get; set; }
+
+        [JsonProperty("Yankeeist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yankeeist { get; set; }
+    }
+
+    public partial record TruantcyClass
+    {
+        [JsonProperty("alfiona")]
+        public object Alfiona { get; set; }
+
+        [JsonProperty("ascaridiasis")]
+        public object Ascaridiasis { get; set; }
+
+        [JsonProperty("bungey")]
+        public object Bungey { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("ceroxyle")]
+        public object Ceroxyle { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chorology")]
+        public object Chorology { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("enmarble")]
+        public object Enmarble { get; set; }
+
+        [JsonProperty("Epeira")]
+        public object Epeira { get; set; }
+
+        [JsonProperty("Eurylaimi")]
+        public object Eurylaimi { get; set; }
+
+        [JsonProperty("germination")]
+        public object Germination { get; set; }
+
+        [JsonProperty("hallelujah")]
+        public object Hallelujah { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lev")]
+        public object Lev { get; set; }
+
+        [JsonProperty("mouthing")]
+        public object Mouthing { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("philliloo")]
+        public object Philliloo { get; set; }
+
+        [JsonProperty("planetal")]
+        public object Planetal { get; set; }
+
+        [JsonProperty("poney")]
+        public object Poney { get; set; }
+
+        [JsonProperty("punctualist")]
+        public object Punctualist { get; set; }
+
+        [JsonProperty("returnlessly")]
+        public object Returnlessly { get; set; }
+
+        [JsonProperty("skelder")]
+        public object Skelder { get; set; }
+
+        [JsonProperty("windwaywardly")]
+        public object Windwaywardly { get; set; }
+
+        [JsonProperty("Yuman")]
+        public object Yuman { get; set; }
+    }
+
+    public partial record UnimpeachablyClass
+    {
+        [JsonProperty("acerin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Acerin { get; set; }
+
+        [JsonProperty("Bobadil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bobadil { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chlorophylligenous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorophylligenous { get; set; }
+
+        [JsonProperty("conversational", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conversational { get; set; }
+
+        [JsonProperty("demiowl", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Demiowl { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("ectorhinal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ectorhinal { get; set; }
+
+        [JsonProperty("gamblesomeness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamblesomeness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("irrorate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Irrorate { get; set; }
+
+        [JsonProperty("kindergartening", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Kindergartening { get; set; }
+
+        [JsonProperty("lateritic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lateritic { get; set; }
+
+        [JsonProperty("mespil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mespil { get; set; }
+
+        [JsonProperty("misconfiguration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Misconfiguration { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object Nonbookish { get; set; }
+
+        [JsonProperty("planometry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Planometry { get; set; }
+
+        [JsonProperty("Quiina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quiina { get; set; }
+
+        [JsonProperty("Robert", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Robert { get; set; }
+
+        [JsonProperty("rot", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rot { get; set; }
+
+        [JsonProperty("subcinctorium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subcinctorium { get; set; }
+
+        [JsonProperty("tussocker", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tussocker { get; set; }
+
+        [JsonProperty("ultraproud", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ultraproud { get; set; }
+
+        [JsonProperty("unsuggestedness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsuggestedness { get; set; }
+    }
+
+    public partial record UnstressedClass
+    {
+        [JsonProperty("Alain", Required = Required.AllowNull)]
+        public object Alain { get; set; }
+
+        [JsonProperty("Amphirhina", Required = Required.AllowNull)]
+        public object Amphirhina { get; set; }
+
+        [JsonProperty("antimachinery", Required = Required.AllowNull)]
+        public object Antimachinery { get; set; }
+
+        [JsonProperty("coldish", Required = Required.AllowNull)]
+        public object Coldish { get; set; }
+
+        [JsonProperty("crantara", Required = Required.AllowNull)]
+        public object Crantara { get; set; }
+
+        [JsonProperty("distinguishing", Required = Required.AllowNull)]
+        public object Distinguishing { get; set; }
+
+        [JsonProperty("elytroposis", Required = Required.AllowNull)]
+        public object Elytroposis { get; set; }
+
+        [JsonProperty("gentianwort", Required = Required.AllowNull)]
+        public object Gentianwort { get; set; }
+
+        [JsonProperty("heliosis", Required = Required.AllowNull)]
+        public object Heliosis { get; set; }
+
+        [JsonProperty("instrumental", Required = Required.AllowNull)]
+        public object Instrumental { get; set; }
+
+        [JsonProperty("introinflection", Required = Required.AllowNull)]
+        public object Introinflection { get; set; }
+
+        [JsonProperty("kala", Required = Required.AllowNull)]
+        public object Kala { get; set; }
+
+        [JsonProperty("Lincolnian", Required = Required.AllowNull)]
+        public object Lincolnian { get; set; }
+
+        [JsonProperty("metad", Required = Required.AllowNull)]
+        public object Metad { get; set; }
+
+        [JsonProperty("Sarcophilus", Required = Required.AllowNull)]
+        public object Sarcophilus { get; set; }
+
+        [JsonProperty("swingingly", Required = Required.AllowNull)]
+        public object Swingingly { get; set; }
+
+        [JsonProperty("unconformity", Required = Required.AllowNull)]
+        public object Unconformity { get; set; }
+
+        [JsonProperty("undecreed", Required = Required.AllowNull)]
+        public object Undecreed { get; set; }
+
+        [JsonProperty("venerable", Required = Required.AllowNull)]
+        public object Venerable { get; set; }
+
+        [JsonProperty("vowellessness", Required = Required.AllowNull)]
+        public object Vowellessness { get; set; }
+    }
+
+    public partial record WrothyClass
+    {
+        [JsonProperty("Aeschynanthus", Required = Required.AllowNull)]
+        public object Aeschynanthus { get; set; }
+
+        [JsonProperty("aquiferous", Required = Required.AllowNull)]
+        public object Aquiferous { get; set; }
+
+        [JsonProperty("cheapener", Required = Required.AllowNull)]
+        public object Cheapener { get; set; }
+
+        [JsonProperty("enumeration", Required = Required.AllowNull)]
+        public object Enumeration { get; set; }
+
+        [JsonProperty("Ephesine", Required = Required.AllowNull)]
+        public object Ephesine { get; set; }
+
+        [JsonProperty("escadrille", Required = Required.AllowNull)]
+        public object Escadrille { get; set; }
+
+        [JsonProperty("estrous", Required = Required.AllowNull)]
+        public object Estrous { get; set; }
+
+        [JsonProperty("interestedly", Required = Required.AllowNull)]
+        public object Interestedly { get; set; }
+
+        [JsonProperty("katakinetomer", Required = Required.AllowNull)]
+        public object Katakinetomer { get; set; }
+
+        [JsonProperty("mortification", Required = Required.AllowNull)]
+        public object Mortification { get; set; }
+
+        [JsonProperty("morula", Required = Required.AllowNull)]
+        public object Morula { get; set; }
+
+        [JsonProperty("orthosymmetrical", Required = Required.AllowNull)]
+        public object Orthosymmetrical { get; set; }
+
+        [JsonProperty("overbark", Required = Required.AllowNull)]
+        public object Overbark { get; set; }
+
+        [JsonProperty("politist", Required = Required.AllowNull)]
+        public object Politist { get; set; }
+
+        [JsonProperty("qualified", Required = Required.AllowNull)]
+        public object Qualified { get; set; }
+
+        [JsonProperty("sphenomalar", Required = Required.AllowNull)]
+        public object Sphenomalar { get; set; }
+
+        [JsonProperty("throatful", Required = Required.AllowNull)]
+        public object Throatful { get; set; }
+
+        [JsonProperty("transhumance", Required = Required.AllowNull)]
+        public object Transhumance { get; set; }
+
+        [JsonProperty("triandrian", Required = Required.AllowNull)]
+        public object Triandrian { get; set; }
+
+        [JsonProperty("unbooked", Required = Required.AllowNull)]
+        public object Unbooked { get; set; }
+    }
+
+    public partial struct Protrusive
+    {
+        public double? Double;
+        public long?[] UnionArray;
+
+        public static implicit operator Protrusive(double Double) => new Protrusive { Double = Double };
+        public static implicit operator Protrusive(long?[] UnionArray) => new Protrusive { UnionArray = UnionArray };
+    }
+
+    public partial struct PulpitismElement
+    {
+        public double? Double;
+        public long[] IntegerArray;
+        public PulpitismClass PulpitismClass;
+
+        public static implicit operator PulpitismElement(double Double) => new PulpitismElement { Double = Double };
+        public static implicit operator PulpitismElement(long[] IntegerArray) => new PulpitismElement { IntegerArray = IntegerArray };
+        public static implicit operator PulpitismElement(PulpitismClass PulpitismClass) => new PulpitismElement { PulpitismClass = PulpitismClass };
+    }
+
+    public partial struct PyodermiaElement
+    {
+        public long? Integer;
+        public PyodermiaClass PyodermiaClass;
+
+        public static implicit operator PyodermiaElement(long Integer) => new PyodermiaElement { Integer = Integer };
+        public static implicit operator PyodermiaElement(PyodermiaClass PyodermiaClass) => new PyodermiaElement { PyodermiaClass = PyodermiaClass };
+    }
+
+    public partial struct QuebrachineElement
+    {
+        public bool? Bool;
+        public QuebrachineClass QuebrachineClass;
+
+        public static implicit operator QuebrachineElement(bool Bool) => new QuebrachineElement { Bool = Bool };
+        public static implicit operator QuebrachineElement(QuebrachineClass QuebrachineClass) => new QuebrachineElement { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => Bool == null && QuebrachineClass == null;
+    }
+
+    public partial struct Querier
+    {
+        public bool? Bool;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Querier(bool Bool) => new Querier { Bool = Bool };
+        public static implicit operator Querier(Dictionary<string, long> IntegerMap) => new Querier { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Rebarbative
+    {
+        public bool? Bool;
+        public double? Double;
+        public long[] IntegerArray;
+
+        public static implicit operator Rebarbative(bool Bool) => new Rebarbative { Bool = Bool };
+        public static implicit operator Rebarbative(double Double) => new Rebarbative { Double = Double };
+        public static implicit operator Rebarbative(long[] IntegerArray) => new Rebarbative { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Retrocervical
+    {
+        public long? Integer;
+        public long?[] UnionArray;
+
+        public static implicit operator Retrocervical(long Integer) => new Retrocervical { Integer = Integer };
+        public static implicit operator Retrocervical(long?[] UnionArray) => new Retrocervical { UnionArray = UnionArray };
+    }
+
+    public partial struct Revert
+    {
+        public bool? Bool;
+        public string String;
+
+        public static implicit operator Revert(bool Bool) => new Revert { Bool = Bool };
+        public static implicit operator Revert(string String) => new Revert { String = String };
+    }
+
+    public partial struct RewriteElement
+    {
+        public double? Double;
+        public object[] NullArray;
+        public RewriteClass RewriteClass;
+
+        public static implicit operator RewriteElement(double Double) => new RewriteElement { Double = Double };
+        public static implicit operator RewriteElement(object[] NullArray) => new RewriteElement { NullArray = NullArray };
+        public static implicit operator RewriteElement(RewriteClass RewriteClass) => new RewriteElement { RewriteClass = RewriteClass };
+    }
+
+    public partial struct Saccoderm
+    {
+        public long[] IntegerArray;
+        public string String;
+
+        public static implicit operator Saccoderm(long[] IntegerArray) => new Saccoderm { IntegerArray = IntegerArray };
+        public static implicit operator Saccoderm(string String) => new Saccoderm { String = String };
+        public bool IsNull => IntegerArray == null && String == null;
+    }
+
+    public partial struct SantirElement
+    {
+        public double? Double;
+        public SantirClass SantirClass;
+
+        public static implicit operator SantirElement(double Double) => new SantirElement { Double = Double };
+        public static implicit operator SantirElement(SantirClass SantirClass) => new SantirElement { SantirClass = SantirClass };
+    }
+
+    public partial struct Saprophilous
+    {
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Saprophilous(Dictionary<string, long> IntegerMap) => new Saprophilous { IntegerMap = IntegerMap };
+        public static implicit operator Saprophilous(string String) => new Saprophilous { String = String };
+        public bool IsNull => IntegerMap == null && String == null;
+    }
+
+    public partial struct SaxtenElement
+    {
+        public SaxtenClass SaxtenClass;
+        public string String;
+
+        public static implicit operator SaxtenElement(SaxtenClass SaxtenClass) => new SaxtenElement { SaxtenClass = SaxtenClass };
+        public static implicit operator SaxtenElement(string String) => new SaxtenElement { String = String };
+    }
+
+    public partial struct Scoffer
+    {
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+
+        public static implicit operator Scoffer(Dictionary<string, long> IntegerMap) => new Scoffer { IntegerMap = IntegerMap };
+        public static implicit operator Scoffer(object[] NullArray) => new Scoffer { NullArray = NullArray };
+        public bool IsNull => NullArray == null && IntegerMap == null;
+    }
+
+    public partial struct Scrampum
+    {
+        public bool? Bool;
+        public long[] IntegerArray;
+
+        public static implicit operator Scrampum(bool Bool) => new Scrampum { Bool = Bool };
+        public static implicit operator Scrampum(long[] IntegerArray) => new Scrampum { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Bool == null;
+    }
+
+    public partial struct Serpentinic
+    {
+        public double? Double;
+        public long[] IntegerArray;
+
+        public static implicit operator Serpentinic(double Double) => new Serpentinic { Double = Double };
+        public static implicit operator Serpentinic(long[] IntegerArray) => new Serpentinic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Shadowable
+    {
+        public bool? Bool;
+        public long?[] UnionArray;
+
+        public static implicit operator Shadowable(bool Bool) => new Shadowable { Bool = Bool };
+        public static implicit operator Shadowable(long?[] UnionArray) => new Shadowable { UnionArray = UnionArray };
+    }
+
+    public partial struct SisteringElement
+    {
+        public long? Integer;
+        public object[] NullArray;
+        public SisteringClass SisteringClass;
+
+        public static implicit operator SisteringElement(long Integer) => new SisteringElement { Integer = Integer };
+        public static implicit operator SisteringElement(object[] NullArray) => new SisteringElement { NullArray = NullArray };
+        public static implicit operator SisteringElement(SisteringClass SisteringClass) => new SisteringElement { SisteringClass = SisteringClass };
+    }
+
+    public partial struct Stagmometer
+    {
+        public string String;
+        public long?[] UnionArray;
+
+        public static implicit operator Stagmometer(string String) => new Stagmometer { String = String };
+        public static implicit operator Stagmometer(long?[] UnionArray) => new Stagmometer { UnionArray = UnionArray };
+    }
+
+    public partial struct Stimulability
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Stimulability(bool Bool) => new Stimulability { Bool = Bool };
+        public static implicit operator Stimulability(long Integer) => new Stimulability { Integer = Integer };
+        public static implicit operator Stimulability(Dictionary<string, long> IntegerMap) => new Stimulability { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Strangleable
+    {
+        public double? Double;
+        public object[] NullArray;
+
+        public static implicit operator Strangleable(double Double) => new Strangleable { Double = Double };
+        public static implicit operator Strangleable(object[] NullArray) => new Strangleable { NullArray = NullArray };
+    }
+
+    public partial struct StrenuosityElement
+    {
+        public object[] NullArray;
+        public StrenuosityClass StrenuosityClass;
+
+        public static implicit operator StrenuosityElement(object[] NullArray) => new StrenuosityElement { NullArray = NullArray };
+        public static implicit operator StrenuosityElement(StrenuosityClass StrenuosityClass) => new StrenuosityElement { StrenuosityClass = StrenuosityClass };
+    }
+
+    public partial struct Tabaxir
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Tabaxir(bool Bool) => new Tabaxir { Bool = Bool };
+        public static implicit operator Tabaxir(double Double) => new Tabaxir { Double = Double };
+    }
+
+    public partial struct Talpiform
+    {
+        public double? Double;
+        public QuebrachineClass QuebrachineClass;
+
+        public static implicit operator Talpiform(double Double) => new Talpiform { Double = Double };
+        public static implicit operator Talpiform(QuebrachineClass QuebrachineClass) => new Talpiform { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Double == null;
+    }
+
+    public partial struct Thwack
+    {
+        public bool? Bool;
+        public double? Double;
+        public QuebrachineClass QuebrachineClass;
+
+        public static implicit operator Thwack(bool Bool) => new Thwack { Bool = Bool };
+        public static implicit operator Thwack(double Double) => new Thwack { Double = Double };
+        public static implicit operator Thwack(QuebrachineClass QuebrachineClass) => new Thwack { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct Tortricine
+    {
+        public QuebrachineClass QuebrachineClass;
+        public long?[] UnionArray;
+
+        public static implicit operator Tortricine(QuebrachineClass QuebrachineClass) => new Tortricine { QuebrachineClass = QuebrachineClass };
+        public static implicit operator Tortricine(long?[] UnionArray) => new Tortricine { UnionArray = UnionArray };
+    }
+
+    public partial struct TruantcyElement
+    {
+        public bool? Bool;
+        public TruantcyClass TruantcyClass;
+
+        public static implicit operator TruantcyElement(bool Bool) => new TruantcyElement { Bool = Bool };
+        public static implicit operator TruantcyElement(TruantcyClass TruantcyClass) => new TruantcyElement { TruantcyClass = TruantcyClass };
+    }
+
+    public partial struct Unbeginning
+    {
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Unbeginning(Dictionary<string, long> IntegerMap) => new Unbeginning { IntegerMap = IntegerMap };
+        public static implicit operator Unbeginning(object[] NullArray) => new Unbeginning { NullArray = NullArray };
+        public static implicit operator Unbeginning(string String) => new Unbeginning { String = String };
+    }
+
+    public partial struct Undesirability
+    {
+        public long[] IntegerArray;
+        public Dictionary<string, long> IntegerMap;
+        public string String;
+
+        public static implicit operator Undesirability(long[] IntegerArray) => new Undesirability { IntegerArray = IntegerArray };
+        public static implicit operator Undesirability(Dictionary<string, long> IntegerMap) => new Undesirability { IntegerMap = IntegerMap };
+        public static implicit operator Undesirability(string String) => new Undesirability { String = String };
+    }
+
+    public partial struct Unerasing
+    {
+        public long? Integer;
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+
+        public static implicit operator Unerasing(long Integer) => new Unerasing { Integer = Integer };
+        public static implicit operator Unerasing(Dictionary<string, long> IntegerMap) => new Unerasing { IntegerMap = IntegerMap };
+        public static implicit operator Unerasing(object[] NullArray) => new Unerasing { NullArray = NullArray };
+    }
+
+    public partial struct Unguentarium
+    {
+        public long? Integer;
+        public object[] NullArray;
+
+        public static implicit operator Unguentarium(long Integer) => new Unguentarium { Integer = Integer };
+        public static implicit operator Unguentarium(object[] NullArray) => new Unguentarium { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Integer == null;
+    }
+
+    public partial struct UnimpeachablyElement
+    {
+        public bool? Bool;
+        public UnimpeachablyClass UnimpeachablyClass;
+
+        public static implicit operator UnimpeachablyElement(bool Bool) => new UnimpeachablyElement { Bool = Bool };
+        public static implicit operator UnimpeachablyElement(UnimpeachablyClass UnimpeachablyClass) => new UnimpeachablyElement { UnimpeachablyClass = UnimpeachablyClass };
+    }
+
+    public partial struct Unmortgaged
+    {
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Unmortgaged(double Double) => new Unmortgaged { Double = Double };
+        public static implicit operator Unmortgaged(Dictionary<string, long> IntegerMap) => new Unmortgaged { IntegerMap = IntegerMap };
+        public bool IsNull => Double == null && IntegerMap == null;
+    }
+
+    public partial struct Unobstructed
+    {
+        public long? Integer;
+        public QuebrachineClass QuebrachineClass;
+
+        public static implicit operator Unobstructed(long Integer) => new Unobstructed { Integer = Integer };
+        public static implicit operator Unobstructed(QuebrachineClass QuebrachineClass) => new Unobstructed { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Integer == null;
+    }
+
+    public partial struct Unreceptivity
+    {
+        public long? Integer;
+        public object[] NullArray;
+        public string String;
+
+        public static implicit operator Unreceptivity(long Integer) => new Unreceptivity { Integer = Integer };
+        public static implicit operator Unreceptivity(object[] NullArray) => new Unreceptivity { NullArray = NullArray };
+        public static implicit operator Unreceptivity(string String) => new Unreceptivity { String = String };
+    }
+
+    public partial struct Unsatisfactoriness
+    {
+        public bool? Bool;
+        public long? Integer;
+        public long[] IntegerArray;
+
+        public static implicit operator Unsatisfactoriness(bool Bool) => new Unsatisfactoriness { Bool = Bool };
+        public static implicit operator Unsatisfactoriness(long Integer) => new Unsatisfactoriness { Integer = Integer };
+        public static implicit operator Unsatisfactoriness(long[] IntegerArray) => new Unsatisfactoriness { IntegerArray = IntegerArray };
+    }
+
+    public partial struct UnstressedElement
+    {
+        public bool? Bool;
+        public string String;
+        public UnstressedClass UnstressedClass;
+
+        public static implicit operator UnstressedElement(bool Bool) => new UnstressedElement { Bool = Bool };
+        public static implicit operator UnstressedElement(string String) => new UnstressedElement { String = String };
+        public static implicit operator UnstressedElement(UnstressedClass UnstressedClass) => new UnstressedElement { UnstressedClass = UnstressedClass };
+    }
+
+    public partial struct Untasked
+    {
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+        public object[] NullArray;
+
+        public static implicit operator Untasked(double Double) => new Untasked { Double = Double };
+        public static implicit operator Untasked(Dictionary<string, long> IntegerMap) => new Untasked { IntegerMap = IntegerMap };
+        public static implicit operator Untasked(object[] NullArray) => new Untasked { NullArray = NullArray };
+    }
+
+    public partial struct Unvarying
+    {
+        public bool? Bool;
+        public double? Double;
+        public Dictionary<string, long> IntegerMap;
+
+        public static implicit operator Unvarying(bool Bool) => new Unvarying { Bool = Bool };
+        public static implicit operator Unvarying(double Double) => new Unvarying { Double = Double };
+        public static implicit operator Unvarying(Dictionary<string, long> IntegerMap) => new Unvarying { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Vehemently
+    {
+        public bool? Bool;
+        public object[] NullArray;
+
+        public static implicit operator Vehemently(bool Bool) => new Vehemently { Bool = Bool };
+        public static implicit operator Vehemently(object[] NullArray) => new Vehemently { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Bool == null;
+    }
+
+    public partial struct Whitepot
+    {
+        public double? Double;
+        public QuebrachineClass QuebrachineClass;
+
+        public static implicit operator Whitepot(double Double) => new Whitepot { Double = Double };
+        public static implicit operator Whitepot(QuebrachineClass QuebrachineClass) => new Whitepot { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct WrothyElement
+    {
+        public object[] NullArray;
+        public WrothyClass WrothyClass;
+
+        public static implicit operator WrothyElement(object[] NullArray) => new WrothyElement { NullArray = NullArray };
+        public static implicit operator WrothyElement(WrothyClass WrothyClass) => new WrothyElement { WrothyClass = WrothyClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ProtrusiveConverter.Singleton,
+                PulpitismElementConverter.Singleton,
+                PyodermiaElementConverter.Singleton,
+                QuebrachineElementConverter.Singleton,
+                QuerierConverter.Singleton,
+                RebarbativeConverter.Singleton,
+                RetrocervicalConverter.Singleton,
+                RevertConverter.Singleton,
+                RewriteElementConverter.Singleton,
+                SaccodermConverter.Singleton,
+                SantirElementConverter.Singleton,
+                SaprophilousConverter.Singleton,
+                SaxtenElementConverter.Singleton,
+                ScofferConverter.Singleton,
+                ScrampumConverter.Singleton,
+                SerpentinicConverter.Singleton,
+                ShadowableConverter.Singleton,
+                SisteringElementConverter.Singleton,
+                StagmometerConverter.Singleton,
+                StimulabilityConverter.Singleton,
+                StrangleableConverter.Singleton,
+                StrenuosityElementConverter.Singleton,
+                TabaxirConverter.Singleton,
+                TalpiformConverter.Singleton,
+                ThwackConverter.Singleton,
+                TortricineConverter.Singleton,
+                TruantcyElementConverter.Singleton,
+                UnbeginningConverter.Singleton,
+                UndesirabilityConverter.Singleton,
+                UnerasingConverter.Singleton,
+                UnguentariumConverter.Singleton,
+                UnimpeachablyElementConverter.Singleton,
+                UnmortgagedConverter.Singleton,
+                UnobstructedConverter.Singleton,
+                UnreceptivityConverter.Singleton,
+                UnsatisfactorinessConverter.Singleton,
+                UnstressedElementConverter.Singleton,
+                UntaskedConverter.Singleton,
+                UnvaryingConverter.Singleton,
+                VehementlyConverter.Singleton,
+                WhitepotConverter.Singleton,
+                WrothyElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ProtrusiveConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protrusive) || t == typeof(Protrusive?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Protrusive { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Protrusive { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protrusive");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protrusive)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protrusive");
+        }
+
+        public static readonly ProtrusiveConverter Singleton = new ProtrusiveConverter();
+    }
+
+    internal class PulpitismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PulpitismElement) || t == typeof(PulpitismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PulpitismElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PulpitismClass>(reader);
+                    return new PulpitismElement { PulpitismClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new PulpitismElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PulpitismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PulpitismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.PulpitismClass != null)
+            {
+                serializer.Serialize(writer, value.PulpitismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PulpitismElement");
+        }
+
+        public static readonly PulpitismElementConverter Singleton = new PulpitismElementConverter();
+    }
+
+    internal class PyodermiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PyodermiaElement) || t == typeof(PyodermiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PyodermiaElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PyodermiaClass>(reader);
+                    return new PyodermiaElement { PyodermiaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PyodermiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PyodermiaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PyodermiaClass != null)
+            {
+                serializer.Serialize(writer, value.PyodermiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PyodermiaElement");
+        }
+
+        public static readonly PyodermiaElementConverter Singleton = new PyodermiaElementConverter();
+    }
+
+    internal class QuebrachineElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(QuebrachineElement) || t == typeof(QuebrachineElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new QuebrachineElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new QuebrachineElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new QuebrachineElement { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type QuebrachineElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (QuebrachineElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type QuebrachineElement");
+        }
+
+        public static readonly QuebrachineElementConverter Singleton = new QuebrachineElementConverter();
+    }
+
+    internal class QuerierConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Querier) || t == typeof(Querier?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Querier { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Querier { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Querier");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Querier)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Querier");
+        }
+
+        public static readonly QuerierConverter Singleton = new QuerierConverter();
+    }
+
+    internal class RebarbativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rebarbative) || t == typeof(Rebarbative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Rebarbative { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Rebarbative { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rebarbative { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rebarbative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rebarbative)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rebarbative");
+        }
+
+        public static readonly RebarbativeConverter Singleton = new RebarbativeConverter();
+    }
+
+    internal class RetrocervicalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Retrocervical) || t == typeof(Retrocervical?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Retrocervical { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Retrocervical { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Retrocervical");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Retrocervical)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Retrocervical");
+        }
+
+        public static readonly RetrocervicalConverter Singleton = new RetrocervicalConverter();
+    }
+
+    internal class RevertConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Revert) || t == typeof(Revert?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Revert { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Revert { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Revert");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Revert)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Revert");
+        }
+
+        public static readonly RevertConverter Singleton = new RevertConverter();
+    }
+
+    internal class RewriteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RewriteElement) || t == typeof(RewriteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new RewriteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<RewriteClass>(reader);
+                    return new RewriteElement { RewriteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new RewriteElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type RewriteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RewriteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.RewriteClass != null)
+            {
+                serializer.Serialize(writer, value.RewriteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type RewriteElement");
+        }
+
+        public static readonly RewriteElementConverter Singleton = new RewriteElementConverter();
+    }
+
+    internal class SaccodermConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saccoderm) || t == typeof(Saccoderm?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saccoderm { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saccoderm { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Saccoderm { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Saccoderm");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saccoderm)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saccoderm");
+        }
+
+        public static readonly SaccodermConverter Singleton = new SaccodermConverter();
+    }
+
+    internal class SantirElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SantirElement) || t == typeof(SantirElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new SantirElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SantirClass>(reader);
+                    return new SantirElement { SantirClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SantirElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SantirElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.SantirClass != null)
+            {
+                serializer.Serialize(writer, value.SantirClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SantirElement");
+        }
+
+        public static readonly SantirElementConverter Singleton = new SantirElementConverter();
+    }
+
+    internal class SaprophilousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saprophilous) || t == typeof(Saprophilous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saprophilous { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saprophilous { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Saprophilous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Saprophilous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saprophilous)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saprophilous");
+        }
+
+        public static readonly SaprophilousConverter Singleton = new SaprophilousConverter();
+    }
+
+    internal class SaxtenElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SaxtenElement) || t == typeof(SaxtenElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new SaxtenElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SaxtenClass>(reader);
+                    return new SaxtenElement { SaxtenClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SaxtenElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SaxtenElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.SaxtenClass != null)
+            {
+                serializer.Serialize(writer, value.SaxtenClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SaxtenElement");
+        }
+
+        public static readonly SaxtenElementConverter Singleton = new SaxtenElementConverter();
+    }
+
+    internal class ScofferConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scoffer) || t == typeof(Scoffer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scoffer { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Scoffer { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Scoffer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scoffer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scoffer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scoffer");
+        }
+
+        public static readonly ScofferConverter Singleton = new ScofferConverter();
+    }
+
+    internal class ScrampumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scrampum) || t == typeof(Scrampum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scrampum { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Scrampum { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Scrampum { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scrampum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scrampum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scrampum");
+        }
+
+        public static readonly ScrampumConverter Singleton = new ScrampumConverter();
+    }
+
+    internal class SerpentinicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Serpentinic) || t == typeof(Serpentinic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Serpentinic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Serpentinic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Serpentinic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Serpentinic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Serpentinic");
+        }
+
+        public static readonly SerpentinicConverter Singleton = new SerpentinicConverter();
+    }
+
+    internal class ShadowableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shadowable) || t == typeof(Shadowable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Shadowable { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Shadowable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shadowable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shadowable)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shadowable");
+        }
+
+        public static readonly ShadowableConverter Singleton = new ShadowableConverter();
+    }
+
+    internal class SisteringElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SisteringElement) || t == typeof(SisteringElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new SisteringElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SisteringClass>(reader);
+                    return new SisteringElement { SisteringClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new SisteringElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type SisteringElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SisteringElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.SisteringClass != null)
+            {
+                serializer.Serialize(writer, value.SisteringClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SisteringElement");
+        }
+
+        public static readonly SisteringElementConverter Singleton = new SisteringElementConverter();
+    }
+
+    internal class StagmometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stagmometer) || t == typeof(Stagmometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Stagmometer { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Stagmometer { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Stagmometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stagmometer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stagmometer");
+        }
+
+        public static readonly StagmometerConverter Singleton = new StagmometerConverter();
+    }
+
+    internal class StimulabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stimulability) || t == typeof(Stimulability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Stimulability { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Stimulability { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Stimulability { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Stimulability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stimulability)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stimulability");
+        }
+
+        public static readonly StimulabilityConverter Singleton = new StimulabilityConverter();
+    }
+
+    internal class StrangleableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Strangleable) || t == typeof(Strangleable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Strangleable { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Strangleable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Strangleable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Strangleable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Strangleable");
+        }
+
+        public static readonly StrangleableConverter Singleton = new StrangleableConverter();
+    }
+
+    internal class StrenuosityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(StrenuosityElement) || t == typeof(StrenuosityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<StrenuosityClass>(reader);
+                    return new StrenuosityElement { StrenuosityClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new StrenuosityElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type StrenuosityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (StrenuosityElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.StrenuosityClass != null)
+            {
+                serializer.Serialize(writer, value.StrenuosityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type StrenuosityElement");
+        }
+
+        public static readonly StrenuosityElementConverter Singleton = new StrenuosityElementConverter();
+    }
+
+    internal class TabaxirConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tabaxir) || t == typeof(Tabaxir?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Tabaxir { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Tabaxir { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Tabaxir");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tabaxir)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tabaxir");
+        }
+
+        public static readonly TabaxirConverter Singleton = new TabaxirConverter();
+    }
+
+    internal class TalpiformConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Talpiform) || t == typeof(Talpiform?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Talpiform { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Talpiform { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Talpiform { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Talpiform");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Talpiform)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Talpiform");
+        }
+
+        public static readonly TalpiformConverter Singleton = new TalpiformConverter();
+    }
+
+    internal class ThwackConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Thwack) || t == typeof(Thwack?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Thwack { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Thwack { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Thwack { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Thwack");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Thwack)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Thwack");
+        }
+
+        public static readonly ThwackConverter Singleton = new ThwackConverter();
+    }
+
+    internal class TortricineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tortricine) || t == typeof(Tortricine?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Tortricine { QuebrachineClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Tortricine { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Tortricine");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tortricine)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tortricine");
+        }
+
+        public static readonly TortricineConverter Singleton = new TortricineConverter();
+    }
+
+    internal class TruantcyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TruantcyElement) || t == typeof(TruantcyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new TruantcyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TruantcyClass>(reader);
+                    return new TruantcyElement { TruantcyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type TruantcyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TruantcyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.TruantcyClass != null)
+            {
+                serializer.Serialize(writer, value.TruantcyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type TruantcyElement");
+        }
+
+        public static readonly TruantcyElementConverter Singleton = new TruantcyElementConverter();
+    }
+
+    internal class UnbeginningConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unbeginning) || t == typeof(Unbeginning?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unbeginning { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unbeginning { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unbeginning { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unbeginning");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unbeginning)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unbeginning");
+        }
+
+        public static readonly UnbeginningConverter Singleton = new UnbeginningConverter();
+    }
+
+    internal class UndesirabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Undesirability) || t == typeof(Undesirability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Undesirability { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Undesirability { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Undesirability { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Undesirability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Undesirability)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Undesirability");
+        }
+
+        public static readonly UndesirabilityConverter Singleton = new UndesirabilityConverter();
+    }
+
+    internal class UnerasingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unerasing) || t == typeof(Unerasing?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unerasing { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unerasing { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unerasing { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unerasing");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unerasing)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unerasing");
+        }
+
+        public static readonly UnerasingConverter Singleton = new UnerasingConverter();
+    }
+
+    internal class UnguentariumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unguentarium) || t == typeof(Unguentarium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unguentarium { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unguentarium { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unguentarium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unguentarium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unguentarium)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unguentarium");
+        }
+
+        public static readonly UnguentariumConverter Singleton = new UnguentariumConverter();
+    }
+
+    internal class UnimpeachablyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnimpeachablyElement) || t == typeof(UnimpeachablyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnimpeachablyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnimpeachablyClass>(reader);
+                    return new UnimpeachablyElement { UnimpeachablyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnimpeachablyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnimpeachablyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnimpeachablyClass != null)
+            {
+                serializer.Serialize(writer, value.UnimpeachablyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnimpeachablyElement");
+        }
+
+        public static readonly UnimpeachablyElementConverter Singleton = new UnimpeachablyElementConverter();
+    }
+
+    internal class UnmortgagedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unmortgaged) || t == typeof(Unmortgaged?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unmortgaged { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unmortgaged { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unmortgaged { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unmortgaged");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unmortgaged)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unmortgaged");
+        }
+
+        public static readonly UnmortgagedConverter Singleton = new UnmortgagedConverter();
+    }
+
+    internal class UnobstructedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unobstructed) || t == typeof(Unobstructed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unobstructed { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unobstructed { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Unobstructed { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unobstructed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unobstructed)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unobstructed");
+        }
+
+        public static readonly UnobstructedConverter Singleton = new UnobstructedConverter();
+    }
+
+    internal class UnreceptivityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unreceptivity) || t == typeof(Unreceptivity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unreceptivity { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unreceptivity { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unreceptivity { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unreceptivity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unreceptivity)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unreceptivity");
+        }
+
+        public static readonly UnreceptivityConverter Singleton = new UnreceptivityConverter();
+    }
+
+    internal class UnsatisfactorinessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unsatisfactoriness) || t == typeof(Unsatisfactoriness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unsatisfactoriness { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unsatisfactoriness { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Unsatisfactoriness { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unsatisfactoriness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unsatisfactoriness)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unsatisfactoriness");
+        }
+
+        public static readonly UnsatisfactorinessConverter Singleton = new UnsatisfactorinessConverter();
+    }
+
+    internal class UnstressedElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnstressedElement) || t == typeof(UnstressedElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnstressedElement { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new UnstressedElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnstressedClass>(reader);
+                    return new UnstressedElement { UnstressedClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnstressedElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnstressedElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnstressedClass != null)
+            {
+                serializer.Serialize(writer, value.UnstressedClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnstressedElement");
+        }
+
+        public static readonly UnstressedElementConverter Singleton = new UnstressedElementConverter();
+    }
+
+    internal class UntaskedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Untasked) || t == typeof(Untasked?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Untasked { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Untasked { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Untasked { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Untasked");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Untasked)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Untasked");
+        }
+
+        public static readonly UntaskedConverter Singleton = new UntaskedConverter();
+    }
+
+    internal class UnvaryingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unvarying) || t == typeof(Unvarying?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unvarying { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unvarying { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unvarying { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unvarying");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unvarying)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unvarying");
+        }
+
+        public static readonly UnvaryingConverter Singleton = new UnvaryingConverter();
+    }
+
+    internal class VehementlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Vehemently) || t == typeof(Vehemently?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Vehemently { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Vehemently { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Vehemently { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Vehemently");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Vehemently)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Vehemently");
+        }
+
+        public static readonly VehementlyConverter Singleton = new VehementlyConverter();
+    }
+
+    internal class WhitepotConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Whitepot) || t == typeof(Whitepot?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Whitepot { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Whitepot { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Whitepot");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Whitepot)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Whitepot");
+        }
+
+        public static readonly WhitepotConverter Singleton = new WhitepotConverter();
+    }
+
+    internal class WrothyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(WrothyElement) || t == typeof(WrothyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<WrothyClass>(reader);
+                    return new WrothyElement { WrothyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new WrothyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type WrothyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (WrothyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.WrothyClass != null)
+            {
+                serializer.Serialize(writer, value.WrothyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type WrothyElement");
+        }
+
+        public static readonly WrothyElementConverter Singleton = new WrothyElementConverter();
+    }
+}
diff --git a/head/csharp-records/test/inputs/json/priority/combinations4.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations4.json/default/QuickType.cs
new file mode 100644
index 0000000..262bef9
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations4.json/default/QuickType.cs
@@ -0,0 +1,3484 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("protrusive", Required = Required.Always)]
+        public Protrusive[] Protrusive { get; set; }
+
+        [JsonProperty("pulpitism", Required = Required.Always)]
+        public PulpitismElement[] Pulpitism { get; set; }
+
+        [JsonProperty("pyodermia", Required = Required.Always)]
+        public PyodermiaElement[] Pyodermia { get; set; }
+
+        [JsonProperty("quebrachine", Required = Required.Always)]
+        public QuebrachineElement[] Quebrachine { get; set; }
+
+        [JsonProperty("querier", Required = Required.Always)]
+        public Querier[] Querier { get; set; }
+
+        [JsonProperty("rebarbative", Required = Required.Always)]
+        public Rebarbative[] Rebarbative { get; set; }
+
+        [JsonProperty("reimagine", Required = Required.Always)]
+        public Reimagine[] Reimagine { get; set; }
+
+        [JsonProperty("ressaut", Required = Required.Always)]
+        public Ressaut Ressaut { get; set; }
+
+        [JsonProperty("retrocervical", Required = Required.Always)]
+        public Retrocervical[] Retrocervical { get; set; }
+
+        [JsonProperty("revert", Required = Required.Always)]
+        public Revert[] Revert { get; set; }
+
+        [JsonProperty("rewrite", Required = Required.Always)]
+        public RewriteElement[] Rewrite { get; set; }
+
+        [JsonProperty("saccoderm", Required = Required.Always)]
+        public Saccoderm[] Saccoderm { get; set; }
+
+        [JsonProperty("santir", Required = Required.Always)]
+        public SantirElement[] Santir { get; set; }
+
+        [JsonProperty("saprophilous", Required = Required.Always)]
+        public Saprophilous[] Saprophilous { get; set; }
+
+        [JsonProperty("saxten", Required = Required.Always)]
+        public SaxtenElement[] Saxten { get; set; }
+
+        [JsonProperty("scatty", Required = Required.Always)]
+        public Scatty?[] Scatty { get; set; }
+
+        [JsonProperty("scoffer", Required = Required.Always)]
+        public Scoffer[] Scoffer { get; set; }
+
+        [JsonProperty("scrampum", Required = Required.Always)]
+        public Scrampum[] Scrampum { get; set; }
+
+        [JsonProperty("semantic", Required = Required.Always)]
+        public double Semantic { get; set; }
+
+        [JsonProperty("serpentinic", Required = Required.Always)]
+        public Serpentinic[] Serpentinic { get; set; }
+
+        [JsonProperty("shadowable", Required = Required.Always)]
+        public Shadowable[] Shadowable { get; set; }
+
+        [JsonProperty("sistering", Required = Required.Always)]
+        public SisteringElement[] Sistering { get; set; }
+
+        [JsonProperty("staghunting", Required = Required.Always)]
+        public Staghunting[] Staghunting { get; set; }
+
+        [JsonProperty("stagmometer", Required = Required.Always)]
+        public Stagmometer[] Stagmometer { get; set; }
+
+        [JsonProperty("stimulability", Required = Required.Always)]
+        public Stimulability[] Stimulability { get; set; }
+
+        [JsonProperty("strangleable", Required = Required.Always)]
+        public Strangleable[] Strangleable { get; set; }
+
+        [JsonProperty("strenuosity", Required = Required.Always)]
+        public StrenuosityElement[] Strenuosity { get; set; }
+
+        [JsonProperty("tabaxir", Required = Required.Always)]
+        public Tabaxir[] Tabaxir { get; set; }
+
+        [JsonProperty("talpiform", Required = Required.Always)]
+        public Talpiform[] Talpiform { get; set; }
+
+        [JsonProperty("thwack", Required = Required.Always)]
+        public Thwack[] Thwack { get; set; }
+
+        [JsonProperty("to", Required = Required.Always)]
+        public double?[] To { get; set; }
+
+        [JsonProperty("tortricine", Required = Required.Always)]
+        public Tortricine[] Tortricine { get; set; }
+
+        [JsonProperty("truantcy", Required = Required.Always)]
+        public TruantcyElement[] Truantcy { get; set; }
+
+        [JsonProperty("turgesce", Required = Required.Always)]
+        public string[] Turgesce { get; set; }
+
+        [JsonProperty("unbeginning", Required = Required.Always)]
+        public Unbeginning[] Unbeginning { get; set; }
+
+        [JsonProperty("underdunged", Required = Required.Always)]
+        public double[] Underdunged { get; set; }
+
+        [JsonProperty("undesirability", Required = Required.Always)]
+        public Undesirability[] Undesirability { get; set; }
+
+        [JsonProperty("unerasing", Required = Required.Always)]
+        public Unerasing[] Unerasing { get; set; }
+
+        [JsonProperty("unguentarium", Required = Required.Always)]
+        public Unguentarium[] Unguentarium { get; set; }
+
+        [JsonProperty("unimpeachably", Required = Required.Always)]
+        public UnimpeachablyElement[] Unimpeachably { get; set; }
+
+        [JsonProperty("unmortgaged", Required = Required.Always)]
+        public Unmortgaged[] Unmortgaged { get; set; }
+
+        [JsonProperty("unobstructed", Required = Required.Always)]
+        public Unobstructed[] Unobstructed { get; set; }
+
+        [JsonProperty("unreceptivity", Required = Required.Always)]
+        public Unreceptivity[] Unreceptivity { get; set; }
+
+        [JsonProperty("unsatisfactoriness", Required = Required.Always)]
+        public Unsatisfactoriness[] Unsatisfactoriness { get; set; }
+
+        [JsonProperty("unsecurity", Required = Required.Always)]
+        public long[] Unsecurity { get; set; }
+
+        [JsonProperty("unstressed", Required = Required.Always)]
+        public UnstressedElement[] Unstressed { get; set; }
+
+        [JsonProperty("untasked", Required = Required.Always)]
+        public Untasked[] Untasked { get; set; }
+
+        [JsonProperty("unvarying", Required = Required.Always)]
+        public Unvarying[] Unvarying { get; set; }
+
+        [JsonProperty("vehemently", Required = Required.Always)]
+        public Vehemently[] Vehemently { get; set; }
+
+        [JsonProperty("warriorship", Required = Required.Always)]
+        public Dictionary<string, bool> Warriorship { get; set; }
+
+        [JsonProperty("whitepot", Required = Required.Always)]
+        public Whitepot[] Whitepot { get; set; }
+
+        [JsonProperty("wrothy", Required = Required.Always)]
+        public WrothyElement[] Wrothy { get; set; }
+    }
+
+    public partial record PulpitismClass
+    {
+        [JsonProperty("abnet", Required = Required.AllowNull)]
+        public object Abnet { get; set; }
+
+        [JsonProperty("buckhorn", Required = Required.AllowNull)]
+        public object Buckhorn { get; set; }
+
+        [JsonProperty("calciform", Required = Required.AllowNull)]
+        public object Calciform { get; set; }
+
+        [JsonProperty("chelophore", Required = Required.AllowNull)]
+        public object Chelophore { get; set; }
+
+        [JsonProperty("cogitation", Required = Required.AllowNull)]
+        public object Cogitation { get; set; }
+
+        [JsonProperty("decreeable", Required = Required.AllowNull)]
+        public object Decreeable { get; set; }
+
+        [JsonProperty("despicable", Required = Required.AllowNull)]
+        public object Despicable { get; set; }
+
+        [JsonProperty("isodiazo", Required = Required.AllowNull)]
+        public object Isodiazo { get; set; }
+
+        [JsonProperty("jadedly", Required = Required.AllowNull)]
+        public object Jadedly { get; set; }
+
+        [JsonProperty("leptochlorite", Required = Required.AllowNull)]
+        public object Leptochlorite { get; set; }
+
+        [JsonProperty("nursling", Required = Required.AllowNull)]
+        public object Nursling { get; set; }
+
+        [JsonProperty("palamedean", Required = Required.AllowNull)]
+        public object Palamedean { get; set; }
+
+        [JsonProperty("photoheliograph", Required = Required.AllowNull)]
+        public object Photoheliograph { get; set; }
+
+        [JsonProperty("pipewood", Required = Required.AllowNull)]
+        public object Pipewood { get; set; }
+
+        [JsonProperty("roberd", Required = Required.AllowNull)]
+        public object Roberd { get; set; }
+
+        [JsonProperty("statable", Required = Required.AllowNull)]
+        public object Statable { get; set; }
+
+        [JsonProperty("superassume", Required = Required.AllowNull)]
+        public object Superassume { get; set; }
+
+        [JsonProperty("syllabe", Required = Required.AllowNull)]
+        public object Syllabe { get; set; }
+
+        [JsonProperty("toughhead", Required = Required.AllowNull)]
+        public object Toughhead { get; set; }
+
+        [JsonProperty("underburn", Required = Required.AllowNull)]
+        public object Underburn { get; set; }
+    }
+
+    public partial record PyodermiaClass
+    {
+        [JsonProperty("aphoristically", Required = Required.AllowNull)]
+        public object Aphoristically { get; set; }
+
+        [JsonProperty("apophyllous", Required = Required.AllowNull)]
+        public object Apophyllous { get; set; }
+
+        [JsonProperty("cognize", Required = Required.AllowNull)]
+        public object Cognize { get; set; }
+
+        [JsonProperty("dermonosology", Required = Required.AllowNull)]
+        public object Dermonosology { get; set; }
+
+        [JsonProperty("Gyppo", Required = Required.AllowNull)]
+        public object Gyppo { get; set; }
+
+        [JsonProperty("ither", Required = Required.AllowNull)]
+        public object Ither { get; set; }
+
+        [JsonProperty("juglandaceous", Required = Required.AllowNull)]
+        public object Juglandaceous { get; set; }
+
+        [JsonProperty("litho", Required = Required.AllowNull)]
+        public object Litho { get; set; }
+
+        [JsonProperty("macropterous", Required = Required.AllowNull)]
+        public object Macropterous { get; set; }
+
+        [JsonProperty("photographer", Required = Required.AllowNull)]
+        public object Photographer { get; set; }
+
+        [JsonProperty("romancing", Required = Required.AllowNull)]
+        public object Romancing { get; set; }
+
+        [JsonProperty("rumness", Required = Required.AllowNull)]
+        public object Rumness { get; set; }
+
+        [JsonProperty("somniloquist", Required = Required.AllowNull)]
+        public object Somniloquist { get; set; }
+
+        [JsonProperty("stressfully", Required = Required.AllowNull)]
+        public object Stressfully { get; set; }
+
+        [JsonProperty("tactically", Required = Required.AllowNull)]
+        public object Tactically { get; set; }
+
+        [JsonProperty("tracheophony", Required = Required.AllowNull)]
+        public object Tracheophony { get; set; }
+
+        [JsonProperty("unappositely", Required = Required.AllowNull)]
+        public object Unappositely { get; set; }
+
+        [JsonProperty("unclothedly", Required = Required.AllowNull)]
+        public object Unclothedly { get; set; }
+
+        [JsonProperty("unimplied", Required = Required.AllowNull)]
+        public object Unimplied { get; set; }
+
+        [JsonProperty("unsyncopated", Required = Required.AllowNull)]
+        public object Unsyncopated { get; set; }
+    }
+
+    public partial record QuebrachineClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public double Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Reimagine
+    {
+        [JsonProperty("adducible")]
+        public object? Adducible { get; set; }
+
+        [JsonProperty("anabolin")]
+        public object? Anabolin { get; set; }
+
+        [JsonProperty("brainy")]
+        public object? Brainy { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chrysamine")]
+        public object? Chrysamine { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("fluxweed")]
+        public object? Fluxweed { get; set; }
+
+        [JsonProperty("glaucine")]
+        public object? Glaucine { get; set; }
+
+        [JsonProperty("grobianism")]
+        public object? Grobianism { get; set; }
+
+        [JsonProperty("Hermo")]
+        public object? Hermo { get; set; }
+
+        [JsonProperty("hieroglyphist")]
+        public object? Hieroglyphist { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("icteroid")]
+        public object? Icteroid { get; set; }
+
+        [JsonProperty("immortal")]
+        public object? Immortal { get; set; }
+
+        [JsonProperty("impetulant")]
+        public object? Impetulant { get; set; }
+
+        [JsonProperty("irrigate")]
+        public object? Irrigate { get; set; }
+
+        [JsonProperty("myxedema")]
+        public object? Myxedema { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("onyx")]
+        public object? Onyx { get; set; }
+
+        [JsonProperty("repasser")]
+        public object? Repasser { get; set; }
+
+        [JsonProperty("septomarginal")]
+        public object? Septomarginal { get; set; }
+
+        [JsonProperty("subdie")]
+        public object? Subdie { get; set; }
+
+        [JsonProperty("tibiometatarsal")]
+        public object? Tibiometatarsal { get; set; }
+
+        [JsonProperty("waltzlike")]
+        public object? Waltzlike { get; set; }
+    }
+
+    public partial record Ressaut
+    {
+        [JsonProperty("apperceptive", Required = Required.Always)]
+        public string Apperceptive { get; set; }
+
+        [JsonProperty("cuttoo", Required = Required.Always)]
+        public string Cuttoo { get; set; }
+
+        [JsonProperty("douser", Required = Required.Always)]
+        public string Douser { get; set; }
+
+        [JsonProperty("drinkproof", Required = Required.Always)]
+        public string Drinkproof { get; set; }
+
+        [JsonProperty("forementioned", Required = Required.Always)]
+        public string Forementioned { get; set; }
+
+        [JsonProperty("Freesia", Required = Required.Always)]
+        public string Freesia { get; set; }
+
+        [JsonProperty("Genevieve", Required = Required.Always)]
+        public string Genevieve { get; set; }
+
+        [JsonProperty("hyperdiabolical", Required = Required.Always)]
+        public string Hyperdiabolical { get; set; }
+
+        [JsonProperty("hypocone", Required = Required.Always)]
+        public string Hypocone { get; set; }
+
+        [JsonProperty("irreverentially", Required = Required.Always)]
+        public string Irreverentially { get; set; }
+
+        [JsonProperty("jumart", Required = Required.Always)]
+        public string Jumart { get; set; }
+
+        [JsonProperty("Mimosaceae", Required = Required.Always)]
+        public string Mimosaceae { get; set; }
+
+        [JsonProperty("mollicrush", Required = Required.Always)]
+        public string Mollicrush { get; set; }
+
+        [JsonProperty("nedder", Required = Required.Always)]
+        public string Nedder { get; set; }
+
+        [JsonProperty("retinasphalt", Required = Required.Always)]
+        public string Retinasphalt { get; set; }
+
+        [JsonProperty("sough", Required = Required.Always)]
+        public string Sough { get; set; }
+
+        [JsonProperty("steading", Required = Required.Always)]
+        public string Steading { get; set; }
+
+        [JsonProperty("Theopaschitism", Required = Required.Always)]
+        public string Theopaschitism { get; set; }
+
+        [JsonProperty("undurableness", Required = Required.Always)]
+        public string Undurableness { get; set; }
+
+        [JsonProperty("unmingleable", Required = Required.Always)]
+        public string Unmingleable { get; set; }
+    }
+
+    public partial record RewriteClass
+    {
+        [JsonProperty("accountancy", Required = Required.AllowNull)]
+        public object Accountancy { get; set; }
+
+        [JsonProperty("cacotrophic", Required = Required.AllowNull)]
+        public object Cacotrophic { get; set; }
+
+        [JsonProperty("contest", Required = Required.AllowNull)]
+        public object Contest { get; set; }
+
+        [JsonProperty("couthily", Required = Required.AllowNull)]
+        public object Couthily { get; set; }
+
+        [JsonProperty("falculate", Required = Required.AllowNull)]
+        public object Falculate { get; set; }
+
+        [JsonProperty("foreseize", Required = Required.AllowNull)]
+        public object Foreseize { get; set; }
+
+        [JsonProperty("Hyades", Required = Required.AllowNull)]
+        public object Hyades { get; set; }
+
+        [JsonProperty("lemnad", Required = Required.AllowNull)]
+        public object Lemnad { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.AllowNull)]
+        public object Monotheistically { get; set; }
+
+        [JsonProperty("nonflying", Required = Required.AllowNull)]
+        public object Nonflying { get; set; }
+
+        [JsonProperty("Ptenoglossa", Required = Required.AllowNull)]
+        public object Ptenoglossa { get; set; }
+
+        [JsonProperty("repatch", Required = Required.AllowNull)]
+        public object Repatch { get; set; }
+
+        [JsonProperty("rodman", Required = Required.AllowNull)]
+        public object Rodman { get; set; }
+
+        [JsonProperty("strung", Required = Required.AllowNull)]
+        public object Strung { get; set; }
+
+        [JsonProperty("titmal", Required = Required.AllowNull)]
+        public object Titmal { get; set; }
+
+        [JsonProperty("twalpennyworth", Required = Required.AllowNull)]
+        public object Twalpennyworth { get; set; }
+
+        [JsonProperty("unblamable", Required = Required.AllowNull)]
+        public object Unblamable { get; set; }
+
+        [JsonProperty("vertical", Required = Required.AllowNull)]
+        public object Vertical { get; set; }
+
+        [JsonProperty("Whiggification", Required = Required.AllowNull)]
+        public object Whiggification { get; set; }
+
+        [JsonProperty("yardman", Required = Required.AllowNull)]
+        public object Yardman { get; set; }
+    }
+
+    public partial record SantirClass
+    {
+        [JsonProperty("admiredly", Required = Required.AllowNull)]
+        public object Admiredly { get; set; }
+
+        [JsonProperty("demicaponier", Required = Required.AllowNull)]
+        public object Demicaponier { get; set; }
+
+        [JsonProperty("epitympanic", Required = Required.AllowNull)]
+        public object Epitympanic { get; set; }
+
+        [JsonProperty("investitor", Required = Required.AllowNull)]
+        public object Investitor { get; set; }
+
+        [JsonProperty("lupiform", Required = Required.AllowNull)]
+        public object Lupiform { get; set; }
+
+        [JsonProperty("monoflagellate", Required = Required.AllowNull)]
+        public object Monoflagellate { get; set; }
+
+        [JsonProperty("paleoethnic", Required = Required.AllowNull)]
+        public object Paleoethnic { get; set; }
+
+        [JsonProperty("prediscountable", Required = Required.AllowNull)]
+        public object Prediscountable { get; set; }
+
+        [JsonProperty("rhetoricals", Required = Required.AllowNull)]
+        public object Rhetoricals { get; set; }
+
+        [JsonProperty("roomth", Required = Required.AllowNull)]
+        public object Roomth { get; set; }
+
+        [JsonProperty("saccharose", Required = Required.AllowNull)]
+        public object Saccharose { get; set; }
+
+        [JsonProperty("septonasal", Required = Required.AllowNull)]
+        public object Septonasal { get; set; }
+
+        [JsonProperty("serpenticide", Required = Required.AllowNull)]
+        public object Serpenticide { get; set; }
+
+        [JsonProperty("setarious", Required = Required.AllowNull)]
+        public object Setarious { get; set; }
+
+        [JsonProperty("spaework", Required = Required.AllowNull)]
+        public object Spaework { get; set; }
+
+        [JsonProperty("stylite", Required = Required.AllowNull)]
+        public object Stylite { get; set; }
+
+        [JsonProperty("Suessiones", Required = Required.AllowNull)]
+        public object Suessiones { get; set; }
+
+        [JsonProperty("timelily", Required = Required.AllowNull)]
+        public object Timelily { get; set; }
+
+        [JsonProperty("unprofaned", Required = Required.AllowNull)]
+        public object Unprofaned { get; set; }
+
+        [JsonProperty("vorticular", Required = Required.AllowNull)]
+        public object Vorticular { get; set; }
+    }
+
+    public partial record SaxtenClass
+    {
+        [JsonProperty("algarrobilla")]
+        public object? Algarrobilla { get; set; }
+
+        [JsonProperty("bowgrace")]
+        public object? Bowgrace { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Centaurid")]
+        public object? Centaurid { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("flix")]
+        public object? Flix { get; set; }
+
+        [JsonProperty("germanely")]
+        public object? Germanely { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("inhume")]
+        public object? Inhume { get; set; }
+
+        [JsonProperty("lepidote")]
+        public object? Lepidote { get; set; }
+
+        [JsonProperty("megalochirous")]
+        public object? Megalochirous { get; set; }
+
+        [JsonProperty("ninepenny")]
+        public object? Ninepenny { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("nondeist")]
+        public object? Nondeist { get; set; }
+
+        [JsonProperty("nymphaeaceous")]
+        public object? Nymphaeaceous { get; set; }
+
+        [JsonProperty("parietofrontal")]
+        public object? Parietofrontal { get; set; }
+
+        [JsonProperty("sancyite")]
+        public object? Sancyite { get; set; }
+
+        [JsonProperty("subjectivist")]
+        public object? Subjectivist { get; set; }
+
+        [JsonProperty("tibiad")]
+        public object? Tibiad { get; set; }
+
+        [JsonProperty("transonic")]
+        public object? Transonic { get; set; }
+
+        [JsonProperty("tripetalous")]
+        public object? Tripetalous { get; set; }
+
+        [JsonProperty("trunchman")]
+        public object? Trunchman { get; set; }
+
+        [JsonProperty("urger")]
+        public object? Urger { get; set; }
+
+        [JsonProperty("withdrawnness")]
+        public object? Withdrawnness { get; set; }
+    }
+
+    public partial record Scatty
+    {
+        [JsonProperty("aeriferous", Required = Required.AllowNull)]
+        public object Aeriferous { get; set; }
+
+        [JsonProperty("antical", Required = Required.AllowNull)]
+        public object Antical { get; set; }
+
+        [JsonProperty("antighostism", Required = Required.AllowNull)]
+        public object Antighostism { get; set; }
+
+        [JsonProperty("arcanum", Required = Required.AllowNull)]
+        public object Arcanum { get; set; }
+
+        [JsonProperty("autotrophy", Required = Required.AllowNull)]
+        public object Autotrophy { get; set; }
+
+        [JsonProperty("baronial", Required = Required.AllowNull)]
+        public object Baronial { get; set; }
+
+        [JsonProperty("caffeine", Required = Required.AllowNull)]
+        public object Caffeine { get; set; }
+
+        [JsonProperty("gorgoniacean", Required = Required.AllowNull)]
+        public object Gorgoniacean { get; set; }
+
+        [JsonProperty("heroical", Required = Required.AllowNull)]
+        public object Heroical { get; set; }
+
+        [JsonProperty("hydropical", Required = Required.AllowNull)]
+        public object Hydropical { get; set; }
+
+        [JsonProperty("mechanology", Required = Required.AllowNull)]
+        public object Mechanology { get; set; }
+
+        [JsonProperty("musicopoetic", Required = Required.AllowNull)]
+        public object Musicopoetic { get; set; }
+
+        [JsonProperty("officiality", Required = Required.AllowNull)]
+        public object Officiality { get; set; }
+
+        [JsonProperty("oftentimes", Required = Required.AllowNull)]
+        public object Oftentimes { get; set; }
+
+        [JsonProperty("ophthalmotonometer", Required = Required.AllowNull)]
+        public object Ophthalmotonometer { get; set; }
+
+        [JsonProperty("reflectively", Required = Required.AllowNull)]
+        public object Reflectively { get; set; }
+
+        [JsonProperty("springer", Required = Required.AllowNull)]
+        public object Springer { get; set; }
+
+        [JsonProperty("Tabasco", Required = Required.AllowNull)]
+        public object Tabasco { get; set; }
+
+        [JsonProperty("teleianthous", Required = Required.AllowNull)]
+        public object Teleianthous { get; set; }
+
+        [JsonProperty("uncombated", Required = Required.AllowNull)]
+        public object Uncombated { get; set; }
+    }
+
+    public partial record SisteringClass
+    {
+        [JsonProperty("amphicarpic", Required = Required.AllowNull)]
+        public object Amphicarpic { get; set; }
+
+        [JsonProperty("Chianti", Required = Required.AllowNull)]
+        public object Chianti { get; set; }
+
+        [JsonProperty("frigorific", Required = Required.AllowNull)]
+        public object Frigorific { get; set; }
+
+        [JsonProperty("Haplomi", Required = Required.AllowNull)]
+        public object Haplomi { get; set; }
+
+        [JsonProperty("hyperkinesis", Required = Required.AllowNull)]
+        public object Hyperkinesis { get; set; }
+
+        [JsonProperty("laudable", Required = Required.AllowNull)]
+        public object Laudable { get; set; }
+
+        [JsonProperty("madwoman", Required = Required.AllowNull)]
+        public object Madwoman { get; set; }
+
+        [JsonProperty("maimedly", Required = Required.AllowNull)]
+        public object Maimedly { get; set; }
+
+        [JsonProperty("Micropterygidae", Required = Required.AllowNull)]
+        public object Micropterygidae { get; set; }
+
+        [JsonProperty("microrhabdus", Required = Required.AllowNull)]
+        public object Microrhabdus { get; set; }
+
+        [JsonProperty("nondense", Required = Required.AllowNull)]
+        public object Nondense { get; set; }
+
+        [JsonProperty("phlebemphraxis", Required = Required.AllowNull)]
+        public object Phlebemphraxis { get; set; }
+
+        [JsonProperty("redsear", Required = Required.AllowNull)]
+        public object Redsear { get; set; }
+
+        [JsonProperty("schismatical", Required = Required.AllowNull)]
+        public object Schismatical { get; set; }
+
+        [JsonProperty("tartryl", Required = Required.AllowNull)]
+        public object Tartryl { get; set; }
+
+        [JsonProperty("unabhorred", Required = Required.AllowNull)]
+        public object Unabhorred { get; set; }
+
+        [JsonProperty("undeliberateness", Required = Required.AllowNull)]
+        public object Undeliberateness { get; set; }
+
+        [JsonProperty("unmixable", Required = Required.AllowNull)]
+        public object Unmixable { get; set; }
+
+        [JsonProperty("untruckling", Required = Required.AllowNull)]
+        public object Untruckling { get; set; }
+
+        [JsonProperty("vineal", Required = Required.AllowNull)]
+        public object Vineal { get; set; }
+    }
+
+    public partial record Staghunting
+    {
+        [JsonProperty("calorimetric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Calorimetric { get; set; }
+
+        [JsonProperty("canid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Canid { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ditriglyphic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ditriglyphic { get; set; }
+
+        [JsonProperty("floriferousness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Floriferousness { get; set; }
+
+        [JsonProperty("gamelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamelike { get; set; }
+
+        [JsonProperty("grig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Grig { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("interloan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Interloan { get; set; }
+
+        [JsonProperty("lithotomy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lithotomy { get; set; }
+
+        [JsonProperty("loric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loric { get; set; }
+
+        [JsonProperty("membranocoriaceous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranocoriaceous { get; set; }
+
+        [JsonProperty("membranogenic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranogenic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("overtrump", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overtrump { get; set; }
+
+        [JsonProperty("scotino", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scotino { get; set; }
+
+        [JsonProperty("seasonable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seasonable { get; set; }
+
+        [JsonProperty("sephen", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sephen { get; set; }
+
+        [JsonProperty("stigmarioid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stigmarioid { get; set; }
+
+        [JsonProperty("tired", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tired { get; set; }
+
+        [JsonProperty("trifid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trifid { get; set; }
+
+        [JsonProperty("undefeatedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undefeatedly { get; set; }
+
+        [JsonProperty("ungirlish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ungirlish { get; set; }
+    }
+
+    public partial record StrenuosityClass
+    {
+        [JsonProperty("bliss", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bliss { get; set; }
+
+        [JsonProperty("buccate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Buccate { get; set; }
+
+        [JsonProperty("bulletproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bulletproof { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("crumblingness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crumblingness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("engagedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Engagedly { get; set; }
+
+        [JsonProperty("fightable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fightable { get; set; }
+
+        [JsonProperty("hoariness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hoariness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hypopodium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hypopodium { get; set; }
+
+        [JsonProperty("luxurist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Luxurist { get; set; }
+
+        [JsonProperty("mechanician", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mechanician { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("Onopordon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Onopordon { get; set; }
+
+        [JsonProperty("podgily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Podgily { get; set; }
+
+        [JsonProperty("reformableness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Reformableness { get; set; }
+
+        [JsonProperty("scatterbrains", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scatterbrains { get; set; }
+
+        [JsonProperty("seminuria", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seminuria { get; set; }
+
+        [JsonProperty("Sodomite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sodomite { get; set; }
+
+        [JsonProperty("tramp", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tramp { get; set; }
+
+        [JsonProperty("undueness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undueness { get; set; }
+
+        [JsonProperty("worthily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Worthily { get; set; }
+
+        [JsonProperty("Yankeeist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yankeeist { get; set; }
+    }
+
+    public partial record TruantcyClass
+    {
+        [JsonProperty("alfiona")]
+        public object? Alfiona { get; set; }
+
+        [JsonProperty("ascaridiasis")]
+        public object? Ascaridiasis { get; set; }
+
+        [JsonProperty("bungey")]
+        public object? Bungey { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("ceroxyle")]
+        public object? Ceroxyle { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chorology")]
+        public object? Chorology { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enmarble")]
+        public object? Enmarble { get; set; }
+
+        [JsonProperty("Epeira")]
+        public object? Epeira { get; set; }
+
+        [JsonProperty("Eurylaimi")]
+        public object? Eurylaimi { get; set; }
+
+        [JsonProperty("germination")]
+        public object? Germination { get; set; }
+
+        [JsonProperty("hallelujah")]
+        public object? Hallelujah { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lev")]
+        public object? Lev { get; set; }
+
+        [JsonProperty("mouthing")]
+        public object? Mouthing { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("philliloo")]
+        public object? Philliloo { get; set; }
+
+        [JsonProperty("planetal")]
+        public object? Planetal { get; set; }
+
+        [JsonProperty("poney")]
+        public object? Poney { get; set; }
+
+        [JsonProperty("punctualist")]
+        public object? Punctualist { get; set; }
+
+        [JsonProperty("returnlessly")]
+        public object? Returnlessly { get; set; }
+
+        [JsonProperty("skelder")]
+        public object? Skelder { get; set; }
+
+        [JsonProperty("windwaywardly")]
+        public object? Windwaywardly { get; set; }
+
+        [JsonProperty("Yuman")]
+        public object? Yuman { get; set; }
+    }
+
+    public partial record UnimpeachablyClass
+    {
+        [JsonProperty("acerin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Acerin { get; set; }
+
+        [JsonProperty("Bobadil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bobadil { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chlorophylligenous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorophylligenous { get; set; }
+
+        [JsonProperty("conversational", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conversational { get; set; }
+
+        [JsonProperty("demiowl", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Demiowl { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ectorhinal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ectorhinal { get; set; }
+
+        [JsonProperty("gamblesomeness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamblesomeness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("irrorate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Irrorate { get; set; }
+
+        [JsonProperty("kindergartening", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Kindergartening { get; set; }
+
+        [JsonProperty("lateritic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lateritic { get; set; }
+
+        [JsonProperty("mespil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mespil { get; set; }
+
+        [JsonProperty("misconfiguration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Misconfiguration { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("planometry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Planometry { get; set; }
+
+        [JsonProperty("Quiina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quiina { get; set; }
+
+        [JsonProperty("Robert", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Robert { get; set; }
+
+        [JsonProperty("rot", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rot { get; set; }
+
+        [JsonProperty("subcinctorium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subcinctorium { get; set; }
+
+        [JsonProperty("tussocker", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tussocker { get; set; }
+
+        [JsonProperty("ultraproud", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ultraproud { get; set; }
+
+        [JsonProperty("unsuggestedness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsuggestedness { get; set; }
+    }
+
+    public partial record UnstressedClass
+    {
+        [JsonProperty("Alain", Required = Required.AllowNull)]
+        public object Alain { get; set; }
+
+        [JsonProperty("Amphirhina", Required = Required.AllowNull)]
+        public object Amphirhina { get; set; }
+
+        [JsonProperty("antimachinery", Required = Required.AllowNull)]
+        public object Antimachinery { get; set; }
+
+        [JsonProperty("coldish", Required = Required.AllowNull)]
+        public object Coldish { get; set; }
+
+        [JsonProperty("crantara", Required = Required.AllowNull)]
+        public object Crantara { get; set; }
+
+        [JsonProperty("distinguishing", Required = Required.AllowNull)]
+        public object Distinguishing { get; set; }
+
+        [JsonProperty("elytroposis", Required = Required.AllowNull)]
+        public object Elytroposis { get; set; }
+
+        [JsonProperty("gentianwort", Required = Required.AllowNull)]
+        public object Gentianwort { get; set; }
+
+        [JsonProperty("heliosis", Required = Required.AllowNull)]
+        public object Heliosis { get; set; }
+
+        [JsonProperty("instrumental", Required = Required.AllowNull)]
+        public object Instrumental { get; set; }
+
+        [JsonProperty("introinflection", Required = Required.AllowNull)]
+        public object Introinflection { get; set; }
+
+        [JsonProperty("kala", Required = Required.AllowNull)]
+        public object Kala { get; set; }
+
+        [JsonProperty("Lincolnian", Required = Required.AllowNull)]
+        public object Lincolnian { get; set; }
+
+        [JsonProperty("metad", Required = Required.AllowNull)]
+        public object Metad { get; set; }
+
+        [JsonProperty("Sarcophilus", Required = Required.AllowNull)]
+        public object Sarcophilus { get; set; }
+
+        [JsonProperty("swingingly", Required = Required.AllowNull)]
+        public object Swingingly { get; set; }
+
+        [JsonProperty("unconformity", Required = Required.AllowNull)]
+        public object Unconformity { get; set; }
+
+        [JsonProperty("undecreed", Required = Required.AllowNull)]
+        public object Undecreed { get; set; }
+
+        [JsonProperty("venerable", Required = Required.AllowNull)]
+        public object Venerable { get; set; }
+
+        [JsonProperty("vowellessness", Required = Required.AllowNull)]
+        public object Vowellessness { get; set; }
+    }
+
+    public partial record WrothyClass
+    {
+        [JsonProperty("Aeschynanthus", Required = Required.AllowNull)]
+        public object Aeschynanthus { get; set; }
+
+        [JsonProperty("aquiferous", Required = Required.AllowNull)]
+        public object Aquiferous { get; set; }
+
+        [JsonProperty("cheapener", Required = Required.AllowNull)]
+        public object Cheapener { get; set; }
+
+        [JsonProperty("enumeration", Required = Required.AllowNull)]
+        public object Enumeration { get; set; }
+
+        [JsonProperty("Ephesine", Required = Required.AllowNull)]
+        public object Ephesine { get; set; }
+
+        [JsonProperty("escadrille", Required = Required.AllowNull)]
+        public object Escadrille { get; set; }
+
+        [JsonProperty("estrous", Required = Required.AllowNull)]
+        public object Estrous { get; set; }
+
+        [JsonProperty("interestedly", Required = Required.AllowNull)]
+        public object Interestedly { get; set; }
+
+        [JsonProperty("katakinetomer", Required = Required.AllowNull)]
+        public object Katakinetomer { get; set; }
+
+        [JsonProperty("mortification", Required = Required.AllowNull)]
+        public object Mortification { get; set; }
+
+        [JsonProperty("morula", Required = Required.AllowNull)]
+        public object Morula { get; set; }
+
+        [JsonProperty("orthosymmetrical", Required = Required.AllowNull)]
+        public object Orthosymmetrical { get; set; }
+
+        [JsonProperty("overbark", Required = Required.AllowNull)]
+        public object Overbark { get; set; }
+
+        [JsonProperty("politist", Required = Required.AllowNull)]
+        public object Politist { get; set; }
+
+        [JsonProperty("qualified", Required = Required.AllowNull)]
+        public object Qualified { get; set; }
+
+        [JsonProperty("sphenomalar", Required = Required.AllowNull)]
+        public object Sphenomalar { get; set; }
+
+        [JsonProperty("throatful", Required = Required.AllowNull)]
+        public object Throatful { get; set; }
+
+        [JsonProperty("transhumance", Required = Required.AllowNull)]
+        public object Transhumance { get; set; }
+
+        [JsonProperty("triandrian", Required = Required.AllowNull)]
+        public object Triandrian { get; set; }
+
+        [JsonProperty("unbooked", Required = Required.AllowNull)]
+        public object Unbooked { get; set; }
+    }
+
+    public partial struct Protrusive
+    {
+        public double? Double;
+        public long?[]? UnionArray;
+
+        public static implicit operator Protrusive(double Double) => new Protrusive { Double = Double };
+        public static implicit operator Protrusive(long?[] UnionArray) => new Protrusive { UnionArray = UnionArray };
+    }
+
+    public partial struct PulpitismElement
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public PulpitismClass? PulpitismClass;
+
+        public static implicit operator PulpitismElement(double Double) => new PulpitismElement { Double = Double };
+        public static implicit operator PulpitismElement(long[] IntegerArray) => new PulpitismElement { IntegerArray = IntegerArray };
+        public static implicit operator PulpitismElement(PulpitismClass PulpitismClass) => new PulpitismElement { PulpitismClass = PulpitismClass };
+    }
+
+    public partial struct PyodermiaElement
+    {
+        public long? Integer;
+        public PyodermiaClass? PyodermiaClass;
+
+        public static implicit operator PyodermiaElement(long Integer) => new PyodermiaElement { Integer = Integer };
+        public static implicit operator PyodermiaElement(PyodermiaClass PyodermiaClass) => new PyodermiaElement { PyodermiaClass = PyodermiaClass };
+    }
+
+    public partial struct QuebrachineElement
+    {
+        public bool? Bool;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator QuebrachineElement(bool Bool) => new QuebrachineElement { Bool = Bool };
+        public static implicit operator QuebrachineElement(QuebrachineClass QuebrachineClass) => new QuebrachineElement { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => Bool == null && QuebrachineClass == null;
+    }
+
+    public partial struct Querier
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Querier(bool Bool) => new Querier { Bool = Bool };
+        public static implicit operator Querier(Dictionary<string, long> IntegerMap) => new Querier { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Rebarbative
+    {
+        public bool? Bool;
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Rebarbative(bool Bool) => new Rebarbative { Bool = Bool };
+        public static implicit operator Rebarbative(double Double) => new Rebarbative { Double = Double };
+        public static implicit operator Rebarbative(long[] IntegerArray) => new Rebarbative { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Retrocervical
+    {
+        public long? Integer;
+        public long?[]? UnionArray;
+
+        public static implicit operator Retrocervical(long Integer) => new Retrocervical { Integer = Integer };
+        public static implicit operator Retrocervical(long?[] UnionArray) => new Retrocervical { UnionArray = UnionArray };
+    }
+
+    public partial struct Revert
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Revert(bool Bool) => new Revert { Bool = Bool };
+        public static implicit operator Revert(string String) => new Revert { String = String };
+    }
+
+    public partial struct RewriteElement
+    {
+        public double? Double;
+        public object[]? NullArray;
+        public RewriteClass? RewriteClass;
+
+        public static implicit operator RewriteElement(double Double) => new RewriteElement { Double = Double };
+        public static implicit operator RewriteElement(object[] NullArray) => new RewriteElement { NullArray = NullArray };
+        public static implicit operator RewriteElement(RewriteClass RewriteClass) => new RewriteElement { RewriteClass = RewriteClass };
+    }
+
+    public partial struct Saccoderm
+    {
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Saccoderm(long[] IntegerArray) => new Saccoderm { IntegerArray = IntegerArray };
+        public static implicit operator Saccoderm(string String) => new Saccoderm { String = String };
+        public bool IsNull => IntegerArray == null && String == null;
+    }
+
+    public partial struct SantirElement
+    {
+        public double? Double;
+        public SantirClass? SantirClass;
+
+        public static implicit operator SantirElement(double Double) => new SantirElement { Double = Double };
+        public static implicit operator SantirElement(SantirClass SantirClass) => new SantirElement { SantirClass = SantirClass };
+    }
+
+    public partial struct Saprophilous
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Saprophilous(Dictionary<string, long> IntegerMap) => new Saprophilous { IntegerMap = IntegerMap };
+        public static implicit operator Saprophilous(string String) => new Saprophilous { String = String };
+        public bool IsNull => IntegerMap == null && String == null;
+    }
+
+    public partial struct SaxtenElement
+    {
+        public SaxtenClass? SaxtenClass;
+        public string? String;
+
+        public static implicit operator SaxtenElement(SaxtenClass SaxtenClass) => new SaxtenElement { SaxtenClass = SaxtenClass };
+        public static implicit operator SaxtenElement(string String) => new SaxtenElement { String = String };
+    }
+
+    public partial struct Scoffer
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Scoffer(Dictionary<string, long> IntegerMap) => new Scoffer { IntegerMap = IntegerMap };
+        public static implicit operator Scoffer(object[] NullArray) => new Scoffer { NullArray = NullArray };
+        public bool IsNull => NullArray == null && IntegerMap == null;
+    }
+
+    public partial struct Scrampum
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+
+        public static implicit operator Scrampum(bool Bool) => new Scrampum { Bool = Bool };
+        public static implicit operator Scrampum(long[] IntegerArray) => new Scrampum { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Bool == null;
+    }
+
+    public partial struct Serpentinic
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Serpentinic(double Double) => new Serpentinic { Double = Double };
+        public static implicit operator Serpentinic(long[] IntegerArray) => new Serpentinic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Shadowable
+    {
+        public bool? Bool;
+        public long?[]? UnionArray;
+
+        public static implicit operator Shadowable(bool Bool) => new Shadowable { Bool = Bool };
+        public static implicit operator Shadowable(long?[] UnionArray) => new Shadowable { UnionArray = UnionArray };
+    }
+
+    public partial struct SisteringElement
+    {
+        public long? Integer;
+        public object[]? NullArray;
+        public SisteringClass? SisteringClass;
+
+        public static implicit operator SisteringElement(long Integer) => new SisteringElement { Integer = Integer };
+        public static implicit operator SisteringElement(object[] NullArray) => new SisteringElement { NullArray = NullArray };
+        public static implicit operator SisteringElement(SisteringClass SisteringClass) => new SisteringElement { SisteringClass = SisteringClass };
+    }
+
+    public partial struct Stagmometer
+    {
+        public string? String;
+        public long?[]? UnionArray;
+
+        public static implicit operator Stagmometer(string String) => new Stagmometer { String = String };
+        public static implicit operator Stagmometer(long?[] UnionArray) => new Stagmometer { UnionArray = UnionArray };
+    }
+
+    public partial struct Stimulability
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Stimulability(bool Bool) => new Stimulability { Bool = Bool };
+        public static implicit operator Stimulability(long Integer) => new Stimulability { Integer = Integer };
+        public static implicit operator Stimulability(Dictionary<string, long> IntegerMap) => new Stimulability { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Strangleable
+    {
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Strangleable(double Double) => new Strangleable { Double = Double };
+        public static implicit operator Strangleable(object[] NullArray) => new Strangleable { NullArray = NullArray };
+    }
+
+    public partial struct StrenuosityElement
+    {
+        public object[]? NullArray;
+        public StrenuosityClass? StrenuosityClass;
+
+        public static implicit operator StrenuosityElement(object[] NullArray) => new StrenuosityElement { NullArray = NullArray };
+        public static implicit operator StrenuosityElement(StrenuosityClass StrenuosityClass) => new StrenuosityElement { StrenuosityClass = StrenuosityClass };
+    }
+
+    public partial struct Tabaxir
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Tabaxir(bool Bool) => new Tabaxir { Bool = Bool };
+        public static implicit operator Tabaxir(double Double) => new Tabaxir { Double = Double };
+    }
+
+    public partial struct Talpiform
+    {
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Talpiform(double Double) => new Talpiform { Double = Double };
+        public static implicit operator Talpiform(QuebrachineClass QuebrachineClass) => new Talpiform { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Double == null;
+    }
+
+    public partial struct Thwack
+    {
+        public bool? Bool;
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Thwack(bool Bool) => new Thwack { Bool = Bool };
+        public static implicit operator Thwack(double Double) => new Thwack { Double = Double };
+        public static implicit operator Thwack(QuebrachineClass QuebrachineClass) => new Thwack { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct Tortricine
+    {
+        public QuebrachineClass? QuebrachineClass;
+        public long?[]? UnionArray;
+
+        public static implicit operator Tortricine(QuebrachineClass QuebrachineClass) => new Tortricine { QuebrachineClass = QuebrachineClass };
+        public static implicit operator Tortricine(long?[] UnionArray) => new Tortricine { UnionArray = UnionArray };
+    }
+
+    public partial struct TruantcyElement
+    {
+        public bool? Bool;
+        public TruantcyClass? TruantcyClass;
+
+        public static implicit operator TruantcyElement(bool Bool) => new TruantcyElement { Bool = Bool };
+        public static implicit operator TruantcyElement(TruantcyClass TruantcyClass) => new TruantcyElement { TruantcyClass = TruantcyClass };
+    }
+
+    public partial struct Unbeginning
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Unbeginning(Dictionary<string, long> IntegerMap) => new Unbeginning { IntegerMap = IntegerMap };
+        public static implicit operator Unbeginning(object[] NullArray) => new Unbeginning { NullArray = NullArray };
+        public static implicit operator Unbeginning(string String) => new Unbeginning { String = String };
+    }
+
+    public partial struct Undesirability
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Undesirability(long[] IntegerArray) => new Undesirability { IntegerArray = IntegerArray };
+        public static implicit operator Undesirability(Dictionary<string, long> IntegerMap) => new Undesirability { IntegerMap = IntegerMap };
+        public static implicit operator Undesirability(string String) => new Undesirability { String = String };
+    }
+
+    public partial struct Unerasing
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Unerasing(long Integer) => new Unerasing { Integer = Integer };
+        public static implicit operator Unerasing(Dictionary<string, long> IntegerMap) => new Unerasing { IntegerMap = IntegerMap };
+        public static implicit operator Unerasing(object[] NullArray) => new Unerasing { NullArray = NullArray };
+    }
+
+    public partial struct Unguentarium
+    {
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Unguentarium(long Integer) => new Unguentarium { Integer = Integer };
+        public static implicit operator Unguentarium(object[] NullArray) => new Unguentarium { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Integer == null;
+    }
+
+    public partial struct UnimpeachablyElement
+    {
+        public bool? Bool;
+        public UnimpeachablyClass? UnimpeachablyClass;
+
+        public static implicit operator UnimpeachablyElement(bool Bool) => new UnimpeachablyElement { Bool = Bool };
+        public static implicit operator UnimpeachablyElement(UnimpeachablyClass UnimpeachablyClass) => new UnimpeachablyElement { UnimpeachablyClass = UnimpeachablyClass };
+    }
+
+    public partial struct Unmortgaged
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unmortgaged(double Double) => new Unmortgaged { Double = Double };
+        public static implicit operator Unmortgaged(Dictionary<string, long> IntegerMap) => new Unmortgaged { IntegerMap = IntegerMap };
+        public bool IsNull => Double == null && IntegerMap == null;
+    }
+
+    public partial struct Unobstructed
+    {
+        public long? Integer;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Unobstructed(long Integer) => new Unobstructed { Integer = Integer };
+        public static implicit operator Unobstructed(QuebrachineClass QuebrachineClass) => new Unobstructed { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Integer == null;
+    }
+
+    public partial struct Unreceptivity
+    {
+        public long? Integer;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Unreceptivity(long Integer) => new Unreceptivity { Integer = Integer };
+        public static implicit operator Unreceptivity(object[] NullArray) => new Unreceptivity { NullArray = NullArray };
+        public static implicit operator Unreceptivity(string String) => new Unreceptivity { String = String };
+    }
+
+    public partial struct Unsatisfactoriness
+    {
+        public bool? Bool;
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Unsatisfactoriness(bool Bool) => new Unsatisfactoriness { Bool = Bool };
+        public static implicit operator Unsatisfactoriness(long Integer) => new Unsatisfactoriness { Integer = Integer };
+        public static implicit operator Unsatisfactoriness(long[] IntegerArray) => new Unsatisfactoriness { IntegerArray = IntegerArray };
+    }
+
+    public partial struct UnstressedElement
+    {
+        public bool? Bool;
+        public string? String;
+        public UnstressedClass? UnstressedClass;
+
+        public static implicit operator UnstressedElement(bool Bool) => new UnstressedElement { Bool = Bool };
+        public static implicit operator UnstressedElement(string String) => new UnstressedElement { String = String };
+        public static implicit operator UnstressedElement(UnstressedClass UnstressedClass) => new UnstressedElement { UnstressedClass = UnstressedClass };
+    }
+
+    public partial struct Untasked
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Untasked(double Double) => new Untasked { Double = Double };
+        public static implicit operator Untasked(Dictionary<string, long> IntegerMap) => new Untasked { IntegerMap = IntegerMap };
+        public static implicit operator Untasked(object[] NullArray) => new Untasked { NullArray = NullArray };
+    }
+
+    public partial struct Unvarying
+    {
+        public bool? Bool;
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unvarying(bool Bool) => new Unvarying { Bool = Bool };
+        public static implicit operator Unvarying(double Double) => new Unvarying { Double = Double };
+        public static implicit operator Unvarying(Dictionary<string, long> IntegerMap) => new Unvarying { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Vehemently
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+
+        public static implicit operator Vehemently(bool Bool) => new Vehemently { Bool = Bool };
+        public static implicit operator Vehemently(object[] NullArray) => new Vehemently { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Bool == null;
+    }
+
+    public partial struct Whitepot
+    {
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Whitepot(double Double) => new Whitepot { Double = Double };
+        public static implicit operator Whitepot(QuebrachineClass QuebrachineClass) => new Whitepot { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct WrothyElement
+    {
+        public object[]? NullArray;
+        public WrothyClass? WrothyClass;
+
+        public static implicit operator WrothyElement(object[] NullArray) => new WrothyElement { NullArray = NullArray };
+        public static implicit operator WrothyElement(WrothyClass WrothyClass) => new WrothyElement { WrothyClass = WrothyClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ProtrusiveConverter.Singleton,
+                PulpitismElementConverter.Singleton,
+                PyodermiaElementConverter.Singleton,
+                QuebrachineElementConverter.Singleton,
+                QuerierConverter.Singleton,
+                RebarbativeConverter.Singleton,
+                RetrocervicalConverter.Singleton,
+                RevertConverter.Singleton,
+                RewriteElementConverter.Singleton,
+                SaccodermConverter.Singleton,
+                SantirElementConverter.Singleton,
+                SaprophilousConverter.Singleton,
+                SaxtenElementConverter.Singleton,
+                ScofferConverter.Singleton,
+                ScrampumConverter.Singleton,
+                SerpentinicConverter.Singleton,
+                ShadowableConverter.Singleton,
+                SisteringElementConverter.Singleton,
+                StagmometerConverter.Singleton,
+                StimulabilityConverter.Singleton,
+                StrangleableConverter.Singleton,
+                StrenuosityElementConverter.Singleton,
+                TabaxirConverter.Singleton,
+                TalpiformConverter.Singleton,
+                ThwackConverter.Singleton,
+                TortricineConverter.Singleton,
+                TruantcyElementConverter.Singleton,
+                UnbeginningConverter.Singleton,
+                UndesirabilityConverter.Singleton,
+                UnerasingConverter.Singleton,
+                UnguentariumConverter.Singleton,
+                UnimpeachablyElementConverter.Singleton,
+                UnmortgagedConverter.Singleton,
+                UnobstructedConverter.Singleton,
+                UnreceptivityConverter.Singleton,
+                UnsatisfactorinessConverter.Singleton,
+                UnstressedElementConverter.Singleton,
+                UntaskedConverter.Singleton,
+                UnvaryingConverter.Singleton,
+                VehementlyConverter.Singleton,
+                WhitepotConverter.Singleton,
+                WrothyElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ProtrusiveConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protrusive) || t == typeof(Protrusive?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Protrusive { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Protrusive { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protrusive");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protrusive)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protrusive");
+        }
+
+        public static readonly ProtrusiveConverter Singleton = new ProtrusiveConverter();
+    }
+
+    internal class PulpitismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PulpitismElement) || t == typeof(PulpitismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PulpitismElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PulpitismClass>(reader);
+                    return new PulpitismElement { PulpitismClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new PulpitismElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PulpitismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PulpitismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.PulpitismClass != null)
+            {
+                serializer.Serialize(writer, value.PulpitismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PulpitismElement");
+        }
+
+        public static readonly PulpitismElementConverter Singleton = new PulpitismElementConverter();
+    }
+
+    internal class PyodermiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PyodermiaElement) || t == typeof(PyodermiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PyodermiaElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PyodermiaClass>(reader);
+                    return new PyodermiaElement { PyodermiaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PyodermiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PyodermiaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PyodermiaClass != null)
+            {
+                serializer.Serialize(writer, value.PyodermiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PyodermiaElement");
+        }
+
+        public static readonly PyodermiaElementConverter Singleton = new PyodermiaElementConverter();
+    }
+
+    internal class QuebrachineElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(QuebrachineElement) || t == typeof(QuebrachineElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new QuebrachineElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new QuebrachineElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new QuebrachineElement { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type QuebrachineElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (QuebrachineElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type QuebrachineElement");
+        }
+
+        public static readonly QuebrachineElementConverter Singleton = new QuebrachineElementConverter();
+    }
+
+    internal class QuerierConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Querier) || t == typeof(Querier?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Querier { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Querier { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Querier");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Querier)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Querier");
+        }
+
+        public static readonly QuerierConverter Singleton = new QuerierConverter();
+    }
+
+    internal class RebarbativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rebarbative) || t == typeof(Rebarbative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Rebarbative { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Rebarbative { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rebarbative { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rebarbative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rebarbative)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rebarbative");
+        }
+
+        public static readonly RebarbativeConverter Singleton = new RebarbativeConverter();
+    }
+
+    internal class RetrocervicalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Retrocervical) || t == typeof(Retrocervical?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Retrocervical { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Retrocervical { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Retrocervical");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Retrocervical)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Retrocervical");
+        }
+
+        public static readonly RetrocervicalConverter Singleton = new RetrocervicalConverter();
+    }
+
+    internal class RevertConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Revert) || t == typeof(Revert?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Revert { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Revert { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Revert");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Revert)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Revert");
+        }
+
+        public static readonly RevertConverter Singleton = new RevertConverter();
+    }
+
+    internal class RewriteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RewriteElement) || t == typeof(RewriteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new RewriteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<RewriteClass>(reader);
+                    return new RewriteElement { RewriteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new RewriteElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type RewriteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RewriteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.RewriteClass != null)
+            {
+                serializer.Serialize(writer, value.RewriteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type RewriteElement");
+        }
+
+        public static readonly RewriteElementConverter Singleton = new RewriteElementConverter();
+    }
+
+    internal class SaccodermConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saccoderm) || t == typeof(Saccoderm?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saccoderm { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saccoderm { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Saccoderm { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Saccoderm");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saccoderm)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saccoderm");
+        }
+
+        public static readonly SaccodermConverter Singleton = new SaccodermConverter();
+    }
+
+    internal class SantirElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SantirElement) || t == typeof(SantirElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new SantirElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SantirClass>(reader);
+                    return new SantirElement { SantirClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SantirElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SantirElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.SantirClass != null)
+            {
+                serializer.Serialize(writer, value.SantirClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SantirElement");
+        }
+
+        public static readonly SantirElementConverter Singleton = new SantirElementConverter();
+    }
+
+    internal class SaprophilousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saprophilous) || t == typeof(Saprophilous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saprophilous { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saprophilous { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Saprophilous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Saprophilous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saprophilous)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saprophilous");
+        }
+
+        public static readonly SaprophilousConverter Singleton = new SaprophilousConverter();
+    }
+
+    internal class SaxtenElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SaxtenElement) || t == typeof(SaxtenElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new SaxtenElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SaxtenClass>(reader);
+                    return new SaxtenElement { SaxtenClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SaxtenElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SaxtenElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.SaxtenClass != null)
+            {
+                serializer.Serialize(writer, value.SaxtenClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SaxtenElement");
+        }
+
+        public static readonly SaxtenElementConverter Singleton = new SaxtenElementConverter();
+    }
+
+    internal class ScofferConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scoffer) || t == typeof(Scoffer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scoffer { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Scoffer { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Scoffer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scoffer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scoffer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scoffer");
+        }
+
+        public static readonly ScofferConverter Singleton = new ScofferConverter();
+    }
+
+    internal class ScrampumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scrampum) || t == typeof(Scrampum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scrampum { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Scrampum { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Scrampum { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scrampum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scrampum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scrampum");
+        }
+
+        public static readonly ScrampumConverter Singleton = new ScrampumConverter();
+    }
+
+    internal class SerpentinicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Serpentinic) || t == typeof(Serpentinic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Serpentinic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Serpentinic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Serpentinic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Serpentinic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Serpentinic");
+        }
+
+        public static readonly SerpentinicConverter Singleton = new SerpentinicConverter();
+    }
+
+    internal class ShadowableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shadowable) || t == typeof(Shadowable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Shadowable { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Shadowable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shadowable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shadowable)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shadowable");
+        }
+
+        public static readonly ShadowableConverter Singleton = new ShadowableConverter();
+    }
+
+    internal class SisteringElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SisteringElement) || t == typeof(SisteringElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new SisteringElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SisteringClass>(reader);
+                    return new SisteringElement { SisteringClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new SisteringElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type SisteringElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SisteringElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.SisteringClass != null)
+            {
+                serializer.Serialize(writer, value.SisteringClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SisteringElement");
+        }
+
+        public static readonly SisteringElementConverter Singleton = new SisteringElementConverter();
+    }
+
+    internal class StagmometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stagmometer) || t == typeof(Stagmometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Stagmometer { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Stagmometer { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Stagmometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stagmometer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stagmometer");
+        }
+
+        public static readonly StagmometerConverter Singleton = new StagmometerConverter();
+    }
+
+    internal class StimulabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stimulability) || t == typeof(Stimulability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Stimulability { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Stimulability { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Stimulability { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Stimulability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stimulability)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stimulability");
+        }
+
+        public static readonly StimulabilityConverter Singleton = new StimulabilityConverter();
+    }
+
+    internal class StrangleableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Strangleable) || t == typeof(Strangleable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Strangleable { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Strangleable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Strangleable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Strangleable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Strangleable");
+        }
+
+        public static readonly StrangleableConverter Singleton = new StrangleableConverter();
+    }
+
+    internal class StrenuosityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(StrenuosityElement) || t == typeof(StrenuosityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<StrenuosityClass>(reader);
+                    return new StrenuosityElement { StrenuosityClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new StrenuosityElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type StrenuosityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (StrenuosityElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.StrenuosityClass != null)
+            {
+                serializer.Serialize(writer, value.StrenuosityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type StrenuosityElement");
+        }
+
+        public static readonly StrenuosityElementConverter Singleton = new StrenuosityElementConverter();
+    }
+
+    internal class TabaxirConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tabaxir) || t == typeof(Tabaxir?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Tabaxir { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Tabaxir { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Tabaxir");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tabaxir)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tabaxir");
+        }
+
+        public static readonly TabaxirConverter Singleton = new TabaxirConverter();
+    }
+
+    internal class TalpiformConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Talpiform) || t == typeof(Talpiform?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Talpiform { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Talpiform { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Talpiform { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Talpiform");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Talpiform)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Talpiform");
+        }
+
+        public static readonly TalpiformConverter Singleton = new TalpiformConverter();
+    }
+
+    internal class ThwackConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Thwack) || t == typeof(Thwack?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Thwack { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Thwack { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Thwack { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Thwack");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Thwack)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Thwack");
+        }
+
+        public static readonly ThwackConverter Singleton = new ThwackConverter();
+    }
+
+    internal class TortricineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tortricine) || t == typeof(Tortricine?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Tortricine { QuebrachineClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Tortricine { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Tortricine");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tortricine)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tortricine");
+        }
+
+        public static readonly TortricineConverter Singleton = new TortricineConverter();
+    }
+
+    internal class TruantcyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TruantcyElement) || t == typeof(TruantcyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new TruantcyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TruantcyClass>(reader);
+                    return new TruantcyElement { TruantcyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type TruantcyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TruantcyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.TruantcyClass != null)
+            {
+                serializer.Serialize(writer, value.TruantcyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type TruantcyElement");
+        }
+
+        public static readonly TruantcyElementConverter Singleton = new TruantcyElementConverter();
+    }
+
+    internal class UnbeginningConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unbeginning) || t == typeof(Unbeginning?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unbeginning { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unbeginning { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unbeginning { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unbeginning");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unbeginning)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unbeginning");
+        }
+
+        public static readonly UnbeginningConverter Singleton = new UnbeginningConverter();
+    }
+
+    internal class UndesirabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Undesirability) || t == typeof(Undesirability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Undesirability { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Undesirability { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Undesirability { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Undesirability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Undesirability)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Undesirability");
+        }
+
+        public static readonly UndesirabilityConverter Singleton = new UndesirabilityConverter();
+    }
+
+    internal class UnerasingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unerasing) || t == typeof(Unerasing?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unerasing { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unerasing { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unerasing { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unerasing");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unerasing)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unerasing");
+        }
+
+        public static readonly UnerasingConverter Singleton = new UnerasingConverter();
+    }
+
+    internal class UnguentariumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unguentarium) || t == typeof(Unguentarium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unguentarium { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unguentarium { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unguentarium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unguentarium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unguentarium)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unguentarium");
+        }
+
+        public static readonly UnguentariumConverter Singleton = new UnguentariumConverter();
+    }
+
+    internal class UnimpeachablyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnimpeachablyElement) || t == typeof(UnimpeachablyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnimpeachablyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnimpeachablyClass>(reader);
+                    return new UnimpeachablyElement { UnimpeachablyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnimpeachablyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnimpeachablyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnimpeachablyClass != null)
+            {
+                serializer.Serialize(writer, value.UnimpeachablyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnimpeachablyElement");
+        }
+
+        public static readonly UnimpeachablyElementConverter Singleton = new UnimpeachablyElementConverter();
+    }
+
+    internal class UnmortgagedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unmortgaged) || t == typeof(Unmortgaged?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unmortgaged { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unmortgaged { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unmortgaged { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unmortgaged");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unmortgaged)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unmortgaged");
+        }
+
+        public static readonly UnmortgagedConverter Singleton = new UnmortgagedConverter();
+    }
+
+    internal class UnobstructedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unobstructed) || t == typeof(Unobstructed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unobstructed { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unobstructed { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Unobstructed { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unobstructed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unobstructed)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unobstructed");
+        }
+
+        public static readonly UnobstructedConverter Singleton = new UnobstructedConverter();
+    }
+
+    internal class UnreceptivityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unreceptivity) || t == typeof(Unreceptivity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unreceptivity { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unreceptivity { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unreceptivity { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unreceptivity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unreceptivity)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unreceptivity");
+        }
+
+        public static readonly UnreceptivityConverter Singleton = new UnreceptivityConverter();
+    }
+
+    internal class UnsatisfactorinessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unsatisfactoriness) || t == typeof(Unsatisfactoriness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unsatisfactoriness { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unsatisfactoriness { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Unsatisfactoriness { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unsatisfactoriness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unsatisfactoriness)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unsatisfactoriness");
+        }
+
+        public static readonly UnsatisfactorinessConverter Singleton = new UnsatisfactorinessConverter();
+    }
+
+    internal class UnstressedElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnstressedElement) || t == typeof(UnstressedElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnstressedElement { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new UnstressedElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnstressedClass>(reader);
+                    return new UnstressedElement { UnstressedClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnstressedElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnstressedElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnstressedClass != null)
+            {
+                serializer.Serialize(writer, value.UnstressedClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnstressedElement");
+        }
+
+        public static readonly UnstressedElementConverter Singleton = new UnstressedElementConverter();
+    }
+
+    internal class UntaskedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Untasked) || t == typeof(Untasked?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Untasked { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Untasked { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Untasked { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Untasked");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Untasked)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Untasked");
+        }
+
+        public static readonly UntaskedConverter Singleton = new UntaskedConverter();
+    }
+
+    internal class UnvaryingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unvarying) || t == typeof(Unvarying?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unvarying { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unvarying { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unvarying { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unvarying");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unvarying)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unvarying");
+        }
+
+        public static readonly UnvaryingConverter Singleton = new UnvaryingConverter();
+    }
+
+    internal class VehementlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Vehemently) || t == typeof(Vehemently?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Vehemently { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Vehemently { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Vehemently { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Vehemently");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Vehemently)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Vehemently");
+        }
+
+        public static readonly VehementlyConverter Singleton = new VehementlyConverter();
+    }
+
+    internal class WhitepotConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Whitepot) || t == typeof(Whitepot?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Whitepot { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Whitepot { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Whitepot");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Whitepot)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Whitepot");
+        }
+
+        public static readonly WhitepotConverter Singleton = new WhitepotConverter();
+    }
+
+    internal class WrothyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(WrothyElement) || t == typeof(WrothyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<WrothyClass>(reader);
+                    return new WrothyElement { WrothyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new WrothyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type WrothyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (WrothyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.WrothyClass != null)
+            {
+                serializer.Serialize(writer, value.WrothyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type WrothyElement");
+        }
+
+        public static readonly WrothyElementConverter Singleton = new WrothyElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations4.json/density-dense--3bfb4c22cfd0/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations4.json/density-dense--3bfb4c22cfd0/QuickType.cs
new file mode 100644
index 0000000..7ca24a8
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations4.json/density-dense--3bfb4c22cfd0/QuickType.cs
@@ -0,0 +1,2730 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+    using J = Newtonsoft.Json.JsonPropertyAttribute;
+    using R = Newtonsoft.Json.Required;
+    using N = Newtonsoft.Json.NullValueHandling;
+
+    public partial record TopLevel
+    {
+        [J("protrusive", Required = R.Always)]         public Protrusive[] Protrusive { get; set; }                
+        [J("pulpitism", Required = R.Always)]          public PulpitismElement[] Pulpitism { get; set; }           
+        [J("pyodermia", Required = R.Always)]          public PyodermiaElement[] Pyodermia { get; set; }           
+        [J("quebrachine", Required = R.Always)]        public QuebrachineElement[] Quebrachine { get; set; }       
+        [J("querier", Required = R.Always)]            public Querier[] Querier { get; set; }                      
+        [J("rebarbative", Required = R.Always)]        public Rebarbative[] Rebarbative { get; set; }              
+        [J("reimagine", Required = R.Always)]          public Reimagine[] Reimagine { get; set; }                  
+        [J("ressaut", Required = R.Always)]            public Ressaut Ressaut { get; set; }                        
+        [J("retrocervical", Required = R.Always)]      public Retrocervical[] Retrocervical { get; set; }          
+        [J("revert", Required = R.Always)]             public Revert[] Revert { get; set; }                        
+        [J("rewrite", Required = R.Always)]            public RewriteElement[] Rewrite { get; set; }               
+        [J("saccoderm", Required = R.Always)]          public Saccoderm[] Saccoderm { get; set; }                  
+        [J("santir", Required = R.Always)]             public SantirElement[] Santir { get; set; }                 
+        [J("saprophilous", Required = R.Always)]       public Saprophilous[] Saprophilous { get; set; }            
+        [J("saxten", Required = R.Always)]             public SaxtenElement[] Saxten { get; set; }                 
+        [J("scatty", Required = R.Always)]             public Scatty?[] Scatty { get; set; }                       
+        [J("scoffer", Required = R.Always)]            public Scoffer[] Scoffer { get; set; }                      
+        [J("scrampum", Required = R.Always)]           public Scrampum[] Scrampum { get; set; }                    
+        [J("semantic", Required = R.Always)]           public double Semantic { get; set; }                        
+        [J("serpentinic", Required = R.Always)]        public Serpentinic[] Serpentinic { get; set; }              
+        [J("shadowable", Required = R.Always)]         public Shadowable[] Shadowable { get; set; }                
+        [J("sistering", Required = R.Always)]          public SisteringElement[] Sistering { get; set; }           
+        [J("staghunting", Required = R.Always)]        public Staghunting[] Staghunting { get; set; }              
+        [J("stagmometer", Required = R.Always)]        public Stagmometer[] Stagmometer { get; set; }              
+        [J("stimulability", Required = R.Always)]      public Stimulability[] Stimulability { get; set; }          
+        [J("strangleable", Required = R.Always)]       public Strangleable[] Strangleable { get; set; }            
+        [J("strenuosity", Required = R.Always)]        public StrenuosityElement[] Strenuosity { get; set; }       
+        [J("tabaxir", Required = R.Always)]            public Tabaxir[] Tabaxir { get; set; }                      
+        [J("talpiform", Required = R.Always)]          public Talpiform[] Talpiform { get; set; }                  
+        [J("thwack", Required = R.Always)]             public Thwack[] Thwack { get; set; }                        
+        [J("to", Required = R.Always)]                 public double?[] To { get; set; }                           
+        [J("tortricine", Required = R.Always)]         public Tortricine[] Tortricine { get; set; }                
+        [J("truantcy", Required = R.Always)]           public TruantcyElement[] Truantcy { get; set; }             
+        [J("turgesce", Required = R.Always)]           public string[] Turgesce { get; set; }                      
+        [J("unbeginning", Required = R.Always)]        public Unbeginning[] Unbeginning { get; set; }              
+        [J("underdunged", Required = R.Always)]        public double[] Underdunged { get; set; }                   
+        [J("undesirability", Required = R.Always)]     public Undesirability[] Undesirability { get; set; }        
+        [J("unerasing", Required = R.Always)]          public Unerasing[] Unerasing { get; set; }                  
+        [J("unguentarium", Required = R.Always)]       public Unguentarium[] Unguentarium { get; set; }            
+        [J("unimpeachably", Required = R.Always)]      public UnimpeachablyElement[] Unimpeachably { get; set; }   
+        [J("unmortgaged", Required = R.Always)]        public Unmortgaged[] Unmortgaged { get; set; }              
+        [J("unobstructed", Required = R.Always)]       public Unobstructed[] Unobstructed { get; set; }            
+        [J("unreceptivity", Required = R.Always)]      public Unreceptivity[] Unreceptivity { get; set; }          
+        [J("unsatisfactoriness", Required = R.Always)] public Unsatisfactoriness[] Unsatisfactoriness { get; set; }
+        [J("unsecurity", Required = R.Always)]         public long[] Unsecurity { get; set; }                      
+        [J("unstressed", Required = R.Always)]         public UnstressedElement[] Unstressed { get; set; }         
+        [J("untasked", Required = R.Always)]           public Untasked[] Untasked { get; set; }                    
+        [J("unvarying", Required = R.Always)]          public Unvarying[] Unvarying { get; set; }                  
+        [J("vehemently", Required = R.Always)]         public Vehemently[] Vehemently { get; set; }                
+        [J("warriorship", Required = R.Always)]        public Dictionary<string, bool> Warriorship { get; set; }   
+        [J("whitepot", Required = R.Always)]           public Whitepot[] Whitepot { get; set; }                    
+        [J("wrothy", Required = R.Always)]             public WrothyElement[] Wrothy { get; set; }                 
+    }
+
+    public partial record PulpitismClass
+    {
+        [J("abnet", Required = R.AllowNull)]           public object Abnet { get; set; }          
+        [J("buckhorn", Required = R.AllowNull)]        public object Buckhorn { get; set; }       
+        [J("calciform", Required = R.AllowNull)]       public object Calciform { get; set; }      
+        [J("chelophore", Required = R.AllowNull)]      public object Chelophore { get; set; }     
+        [J("cogitation", Required = R.AllowNull)]      public object Cogitation { get; set; }     
+        [J("decreeable", Required = R.AllowNull)]      public object Decreeable { get; set; }     
+        [J("despicable", Required = R.AllowNull)]      public object Despicable { get; set; }     
+        [J("isodiazo", Required = R.AllowNull)]        public object Isodiazo { get; set; }       
+        [J("jadedly", Required = R.AllowNull)]         public object Jadedly { get; set; }        
+        [J("leptochlorite", Required = R.AllowNull)]   public object Leptochlorite { get; set; }  
+        [J("nursling", Required = R.AllowNull)]        public object Nursling { get; set; }       
+        [J("palamedean", Required = R.AllowNull)]      public object Palamedean { get; set; }     
+        [J("photoheliograph", Required = R.AllowNull)] public object Photoheliograph { get; set; }
+        [J("pipewood", Required = R.AllowNull)]        public object Pipewood { get; set; }       
+        [J("roberd", Required = R.AllowNull)]          public object Roberd { get; set; }         
+        [J("statable", Required = R.AllowNull)]        public object Statable { get; set; }       
+        [J("superassume", Required = R.AllowNull)]     public object Superassume { get; set; }    
+        [J("syllabe", Required = R.AllowNull)]         public object Syllabe { get; set; }        
+        [J("toughhead", Required = R.AllowNull)]       public object Toughhead { get; set; }      
+        [J("underburn", Required = R.AllowNull)]       public object Underburn { get; set; }      
+    }
+
+    public partial record PyodermiaClass
+    {
+        [J("aphoristically", Required = R.AllowNull)] public object Aphoristically { get; set; }
+        [J("apophyllous", Required = R.AllowNull)]    public object Apophyllous { get; set; }   
+        [J("cognize", Required = R.AllowNull)]        public object Cognize { get; set; }       
+        [J("dermonosology", Required = R.AllowNull)]  public object Dermonosology { get; set; } 
+        [J("Gyppo", Required = R.AllowNull)]          public object Gyppo { get; set; }         
+        [J("ither", Required = R.AllowNull)]          public object Ither { get; set; }         
+        [J("juglandaceous", Required = R.AllowNull)]  public object Juglandaceous { get; set; } 
+        [J("litho", Required = R.AllowNull)]          public object Litho { get; set; }         
+        [J("macropterous", Required = R.AllowNull)]   public object Macropterous { get; set; }  
+        [J("photographer", Required = R.AllowNull)]   public object Photographer { get; set; }  
+        [J("romancing", Required = R.AllowNull)]      public object Romancing { get; set; }     
+        [J("rumness", Required = R.AllowNull)]        public object Rumness { get; set; }       
+        [J("somniloquist", Required = R.AllowNull)]   public object Somniloquist { get; set; }  
+        [J("stressfully", Required = R.AllowNull)]    public object Stressfully { get; set; }   
+        [J("tactically", Required = R.AllowNull)]     public object Tactically { get; set; }    
+        [J("tracheophony", Required = R.AllowNull)]   public object Tracheophony { get; set; }  
+        [J("unappositely", Required = R.AllowNull)]   public object Unappositely { get; set; }  
+        [J("unclothedly", Required = R.AllowNull)]    public object Unclothedly { get; set; }   
+        [J("unimplied", Required = R.AllowNull)]      public object Unimplied { get; set; }     
+        [J("unsyncopated", Required = R.AllowNull)]   public object Unsyncopated { get; set; }  
+    }
+
+    public partial record QuebrachineClass
+    {
+        [J("catharticalness", Required = R.Always)] public double Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.Always)]    public long Chirotherium { get; set; }     
+        [J("disdiapason", Required = R.Always)]     public string Disdiapason { get; set; }    
+        [J("homocerc", Required = R.Always)]        public bool Homocerc { get; set; }         
+        [J("nonbookish", Required = R.AllowNull)]   public object Nonbookish { get; set; }     
+    }
+
+    public partial record Reimagine
+    {
+        [J("adducible")]                                                                public object? Adducible { get; set; }      
+        [J("anabolin")]                                                                 public object? Anabolin { get; set; }       
+        [J("brainy")]                                                                   public object? Brainy { get; set; }         
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }     
+        [J("chrysamine")]                                                               public object? Chrysamine { get; set; }     
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }    
+        [J("fluxweed")]                                                                 public object? Fluxweed { get; set; }       
+        [J("glaucine")]                                                                 public object? Glaucine { get; set; }       
+        [J("grobianism")]                                                               public object? Grobianism { get; set; }     
+        [J("Hermo")]                                                                    public object? Hermo { get; set; }          
+        [J("hieroglyphist")]                                                            public object? Hieroglyphist { get; set; }  
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }         
+        [J("icteroid")]                                                                 public object? Icteroid { get; set; }       
+        [J("immortal")]                                                                 public object? Immortal { get; set; }       
+        [J("impetulant")]                                                               public object? Impetulant { get; set; }     
+        [J("irrigate")]                                                                 public object? Irrigate { get; set; }       
+        [J("myxedema")]                                                                 public object? Myxedema { get; set; }       
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }     
+        [J("onyx")]                                                                     public object? Onyx { get; set; }           
+        [J("repasser")]                                                                 public object? Repasser { get; set; }       
+        [J("septomarginal")]                                                            public object? Septomarginal { get; set; }  
+        [J("subdie")]                                                                   public object? Subdie { get; set; }         
+        [J("tibiometatarsal")]                                                          public object? Tibiometatarsal { get; set; }
+        [J("waltzlike")]                                                                public object? Waltzlike { get; set; }      
+    }
+
+    public partial record Ressaut
+    {
+        [J("apperceptive", Required = R.Always)]    public string Apperceptive { get; set; }   
+        [J("cuttoo", Required = R.Always)]          public string Cuttoo { get; set; }         
+        [J("douser", Required = R.Always)]          public string Douser { get; set; }         
+        [J("drinkproof", Required = R.Always)]      public string Drinkproof { get; set; }     
+        [J("forementioned", Required = R.Always)]   public string Forementioned { get; set; }  
+        [J("Freesia", Required = R.Always)]         public string Freesia { get; set; }        
+        [J("Genevieve", Required = R.Always)]       public string Genevieve { get; set; }      
+        [J("hyperdiabolical", Required = R.Always)] public string Hyperdiabolical { get; set; }
+        [J("hypocone", Required = R.Always)]        public string Hypocone { get; set; }       
+        [J("irreverentially", Required = R.Always)] public string Irreverentially { get; set; }
+        [J("jumart", Required = R.Always)]          public string Jumart { get; set; }         
+        [J("Mimosaceae", Required = R.Always)]      public string Mimosaceae { get; set; }     
+        [J("mollicrush", Required = R.Always)]      public string Mollicrush { get; set; }     
+        [J("nedder", Required = R.Always)]          public string Nedder { get; set; }         
+        [J("retinasphalt", Required = R.Always)]    public string Retinasphalt { get; set; }   
+        [J("sough", Required = R.Always)]           public string Sough { get; set; }          
+        [J("steading", Required = R.Always)]        public string Steading { get; set; }       
+        [J("Theopaschitism", Required = R.Always)]  public string Theopaschitism { get; set; } 
+        [J("undurableness", Required = R.Always)]   public string Undurableness { get; set; }  
+        [J("unmingleable", Required = R.Always)]    public string Unmingleable { get; set; }   
+    }
+
+    public partial record RewriteClass
+    {
+        [J("accountancy", Required = R.AllowNull)]      public object Accountancy { get; set; }     
+        [J("cacotrophic", Required = R.AllowNull)]      public object Cacotrophic { get; set; }     
+        [J("contest", Required = R.AllowNull)]          public object Contest { get; set; }         
+        [J("couthily", Required = R.AllowNull)]         public object Couthily { get; set; }        
+        [J("falculate", Required = R.AllowNull)]        public object Falculate { get; set; }       
+        [J("foreseize", Required = R.AllowNull)]        public object Foreseize { get; set; }       
+        [J("Hyades", Required = R.AllowNull)]           public object Hyades { get; set; }          
+        [J("lemnad", Required = R.AllowNull)]           public object Lemnad { get; set; }          
+        [J("monotheistically", Required = R.AllowNull)] public object Monotheistically { get; set; }
+        [J("nonflying", Required = R.AllowNull)]        public object Nonflying { get; set; }       
+        [J("Ptenoglossa", Required = R.AllowNull)]      public object Ptenoglossa { get; set; }     
+        [J("repatch", Required = R.AllowNull)]          public object Repatch { get; set; }         
+        [J("rodman", Required = R.AllowNull)]           public object Rodman { get; set; }          
+        [J("strung", Required = R.AllowNull)]           public object Strung { get; set; }          
+        [J("titmal", Required = R.AllowNull)]           public object Titmal { get; set; }          
+        [J("twalpennyworth", Required = R.AllowNull)]   public object Twalpennyworth { get; set; }  
+        [J("unblamable", Required = R.AllowNull)]       public object Unblamable { get; set; }      
+        [J("vertical", Required = R.AllowNull)]         public object Vertical { get; set; }        
+        [J("Whiggification", Required = R.AllowNull)]   public object Whiggification { get; set; }  
+        [J("yardman", Required = R.AllowNull)]          public object Yardman { get; set; }         
+    }
+
+    public partial record SantirClass
+    {
+        [J("admiredly", Required = R.AllowNull)]       public object Admiredly { get; set; }      
+        [J("demicaponier", Required = R.AllowNull)]    public object Demicaponier { get; set; }   
+        [J("epitympanic", Required = R.AllowNull)]     public object Epitympanic { get; set; }    
+        [J("investitor", Required = R.AllowNull)]      public object Investitor { get; set; }     
+        [J("lupiform", Required = R.AllowNull)]        public object Lupiform { get; set; }       
+        [J("monoflagellate", Required = R.AllowNull)]  public object Monoflagellate { get; set; } 
+        [J("paleoethnic", Required = R.AllowNull)]     public object Paleoethnic { get; set; }    
+        [J("prediscountable", Required = R.AllowNull)] public object Prediscountable { get; set; }
+        [J("rhetoricals", Required = R.AllowNull)]     public object Rhetoricals { get; set; }    
+        [J("roomth", Required = R.AllowNull)]          public object Roomth { get; set; }         
+        [J("saccharose", Required = R.AllowNull)]      public object Saccharose { get; set; }     
+        [J("septonasal", Required = R.AllowNull)]      public object Septonasal { get; set; }     
+        [J("serpenticide", Required = R.AllowNull)]    public object Serpenticide { get; set; }   
+        [J("setarious", Required = R.AllowNull)]       public object Setarious { get; set; }      
+        [J("spaework", Required = R.AllowNull)]        public object Spaework { get; set; }       
+        [J("stylite", Required = R.AllowNull)]         public object Stylite { get; set; }        
+        [J("Suessiones", Required = R.AllowNull)]      public object Suessiones { get; set; }     
+        [J("timelily", Required = R.AllowNull)]        public object Timelily { get; set; }       
+        [J("unprofaned", Required = R.AllowNull)]      public object Unprofaned { get; set; }     
+        [J("vorticular", Required = R.AllowNull)]      public object Vorticular { get; set; }     
+    }
+
+    public partial record SaxtenClass
+    {
+        [J("algarrobilla")]                                                             public object? Algarrobilla { get; set; }   
+        [J("bowgrace")]                                                                 public object? Bowgrace { get; set; }       
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }
+        [J("Centaurid")]                                                                public object? Centaurid { get; set; }      
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }     
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }    
+        [J("flix")]                                                                     public object? Flix { get; set; }           
+        [J("germanely")]                                                                public object? Germanely { get; set; }      
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }         
+        [J("inhume")]                                                                   public object? Inhume { get; set; }         
+        [J("lepidote")]                                                                 public object? Lepidote { get; set; }       
+        [J("megalochirous")]                                                            public object? Megalochirous { get; set; }  
+        [J("ninepenny")]                                                                public object? Ninepenny { get; set; }      
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }     
+        [J("nondeist")]                                                                 public object? Nondeist { get; set; }       
+        [J("nymphaeaceous")]                                                            public object? Nymphaeaceous { get; set; }  
+        [J("parietofrontal")]                                                           public object? Parietofrontal { get; set; } 
+        [J("sancyite")]                                                                 public object? Sancyite { get; set; }       
+        [J("subjectivist")]                                                             public object? Subjectivist { get; set; }   
+        [J("tibiad")]                                                                   public object? Tibiad { get; set; }         
+        [J("transonic")]                                                                public object? Transonic { get; set; }      
+        [J("tripetalous")]                                                              public object? Tripetalous { get; set; }    
+        [J("trunchman")]                                                                public object? Trunchman { get; set; }      
+        [J("urger")]                                                                    public object? Urger { get; set; }          
+        [J("withdrawnness")]                                                            public object? Withdrawnness { get; set; }  
+    }
+
+    public partial record Scatty
+    {
+        [J("aeriferous", Required = R.AllowNull)]         public object Aeriferous { get; set; }        
+        [J("antical", Required = R.AllowNull)]            public object Antical { get; set; }           
+        [J("antighostism", Required = R.AllowNull)]       public object Antighostism { get; set; }      
+        [J("arcanum", Required = R.AllowNull)]            public object Arcanum { get; set; }           
+        [J("autotrophy", Required = R.AllowNull)]         public object Autotrophy { get; set; }        
+        [J("baronial", Required = R.AllowNull)]           public object Baronial { get; set; }          
+        [J("caffeine", Required = R.AllowNull)]           public object Caffeine { get; set; }          
+        [J("gorgoniacean", Required = R.AllowNull)]       public object Gorgoniacean { get; set; }      
+        [J("heroical", Required = R.AllowNull)]           public object Heroical { get; set; }          
+        [J("hydropical", Required = R.AllowNull)]         public object Hydropical { get; set; }        
+        [J("mechanology", Required = R.AllowNull)]        public object Mechanology { get; set; }       
+        [J("musicopoetic", Required = R.AllowNull)]       public object Musicopoetic { get; set; }      
+        [J("officiality", Required = R.AllowNull)]        public object Officiality { get; set; }       
+        [J("oftentimes", Required = R.AllowNull)]         public object Oftentimes { get; set; }        
+        [J("ophthalmotonometer", Required = R.AllowNull)] public object Ophthalmotonometer { get; set; }
+        [J("reflectively", Required = R.AllowNull)]       public object Reflectively { get; set; }      
+        [J("springer", Required = R.AllowNull)]           public object Springer { get; set; }          
+        [J("Tabasco", Required = R.AllowNull)]            public object Tabasco { get; set; }           
+        [J("teleianthous", Required = R.AllowNull)]       public object Teleianthous { get; set; }      
+        [J("uncombated", Required = R.AllowNull)]         public object Uncombated { get; set; }        
+    }
+
+    public partial record SisteringClass
+    {
+        [J("amphicarpic", Required = R.AllowNull)]      public object Amphicarpic { get; set; }     
+        [J("Chianti", Required = R.AllowNull)]          public object Chianti { get; set; }         
+        [J("frigorific", Required = R.AllowNull)]       public object Frigorific { get; set; }      
+        [J("Haplomi", Required = R.AllowNull)]          public object Haplomi { get; set; }         
+        [J("hyperkinesis", Required = R.AllowNull)]     public object Hyperkinesis { get; set; }    
+        [J("laudable", Required = R.AllowNull)]         public object Laudable { get; set; }        
+        [J("madwoman", Required = R.AllowNull)]         public object Madwoman { get; set; }        
+        [J("maimedly", Required = R.AllowNull)]         public object Maimedly { get; set; }        
+        [J("Micropterygidae", Required = R.AllowNull)]  public object Micropterygidae { get; set; } 
+        [J("microrhabdus", Required = R.AllowNull)]     public object Microrhabdus { get; set; }    
+        [J("nondense", Required = R.AllowNull)]         public object Nondense { get; set; }        
+        [J("phlebemphraxis", Required = R.AllowNull)]   public object Phlebemphraxis { get; set; }  
+        [J("redsear", Required = R.AllowNull)]          public object Redsear { get; set; }         
+        [J("schismatical", Required = R.AllowNull)]     public object Schismatical { get; set; }    
+        [J("tartryl", Required = R.AllowNull)]          public object Tartryl { get; set; }         
+        [J("unabhorred", Required = R.AllowNull)]       public object Unabhorred { get; set; }      
+        [J("undeliberateness", Required = R.AllowNull)] public object Undeliberateness { get; set; }
+        [J("unmixable", Required = R.AllowNull)]        public object Unmixable { get; set; }       
+        [J("untruckling", Required = R.AllowNull)]      public object Untruckling { get; set; }     
+        [J("vineal", Required = R.AllowNull)]           public object Vineal { get; set; }          
+    }
+
+    public partial record Staghunting
+    {
+        [J("calorimetric", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Calorimetric { get; set; }      
+        [J("canid", Required = R.DisallowNull, NullValueHandling = N.Ignore)]              public long? Canid { get; set; }             
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public double? Catharticalness { get; set; } 
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Chirotherium { get; set; }      
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public string? Disdiapason { get; set; }     
+        [J("ditriglyphic", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Ditriglyphic { get; set; }      
+        [J("floriferousness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Floriferousness { get; set; }   
+        [J("gamelike", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Gamelike { get; set; }          
+        [J("grig", Required = R.DisallowNull, NullValueHandling = N.Ignore)]               public long? Grig { get; set; }              
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public bool? Homocerc { get; set; }          
+        [J("interloan", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Interloan { get; set; }         
+        [J("lithotomy", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Lithotomy { get; set; }         
+        [J("loric", Required = R.DisallowNull, NullValueHandling = N.Ignore)]              public long? Loric { get; set; }             
+        [J("membranocoriaceous", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public long? Membranocoriaceous { get; set; }
+        [J("membranogenic", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Membranogenic { get; set; }     
+        [J("nonbookish")]                                                                  public object? Nonbookish { get; set; }      
+        [J("overtrump", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Overtrump { get; set; }         
+        [J("scotino", Required = R.DisallowNull, NullValueHandling = N.Ignore)]            public long? Scotino { get; set; }           
+        [J("seasonable", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Seasonable { get; set; }        
+        [J("sephen", Required = R.DisallowNull, NullValueHandling = N.Ignore)]             public long? Sephen { get; set; }            
+        [J("stigmarioid", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Stigmarioid { get; set; }       
+        [J("tired", Required = R.DisallowNull, NullValueHandling = N.Ignore)]              public long? Tired { get; set; }             
+        [J("trifid", Required = R.DisallowNull, NullValueHandling = N.Ignore)]             public long? Trifid { get; set; }            
+        [J("undefeatedly", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Undefeatedly { get; set; }      
+        [J("ungirlish", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Ungirlish { get; set; }         
+    }
+
+    public partial record StrenuosityClass
+    {
+        [J("bliss", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Bliss { get; set; }            
+        [J("buccate", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Buccate { get; set; }          
+        [J("bulletproof", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Bulletproof { get; set; }      
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }     
+        [J("crumblingness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Crumblingness { get; set; }    
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }    
+        [J("engagedly", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Engagedly { get; set; }        
+        [J("fightable", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Fightable { get; set; }        
+        [J("hoariness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Hoariness { get; set; }        
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }         
+        [J("hypopodium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Hypopodium { get; set; }       
+        [J("luxurist", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Luxurist { get; set; }         
+        [J("mechanician", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Mechanician { get; set; }      
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }     
+        [J("Onopordon", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Onopordon { get; set; }        
+        [J("podgily", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Podgily { get; set; }          
+        [J("reformableness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]  public long? Reformableness { get; set; }   
+        [J("scatterbrains", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Scatterbrains { get; set; }    
+        [J("seminuria", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Seminuria { get; set; }        
+        [J("Sodomite", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Sodomite { get; set; }         
+        [J("tramp", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Tramp { get; set; }            
+        [J("undueness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Undueness { get; set; }        
+        [J("worthily", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public long? Worthily { get; set; }         
+        [J("Yankeeist", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Yankeeist { get; set; }        
+    }
+
+    public partial record TruantcyClass
+    {
+        [J("alfiona")]                                                                  public object? Alfiona { get; set; }        
+        [J("ascaridiasis")]                                                             public object? Ascaridiasis { get; set; }   
+        [J("bungey")]                                                                   public object? Bungey { get; set; }         
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public double? Catharticalness { get; set; }
+        [J("ceroxyle")]                                                                 public object? Ceroxyle { get; set; }       
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Chirotherium { get; set; }     
+        [J("chorology")]                                                                public object? Chorology { get; set; }      
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public string? Disdiapason { get; set; }    
+        [J("enmarble")]                                                                 public object? Enmarble { get; set; }       
+        [J("Epeira")]                                                                   public object? Epeira { get; set; }         
+        [J("Eurylaimi")]                                                                public object? Eurylaimi { get; set; }      
+        [J("germination")]                                                              public object? Germination { get; set; }    
+        [J("hallelujah")]                                                               public object? Hallelujah { get; set; }     
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public bool? Homocerc { get; set; }         
+        [J("lev")]                                                                      public object? Lev { get; set; }            
+        [J("mouthing")]                                                                 public object? Mouthing { get; set; }       
+        [J("nonbookish")]                                                               public object? Nonbookish { get; set; }     
+        [J("philliloo")]                                                                public object? Philliloo { get; set; }      
+        [J("planetal")]                                                                 public object? Planetal { get; set; }       
+        [J("poney")]                                                                    public object? Poney { get; set; }          
+        [J("punctualist")]                                                              public object? Punctualist { get; set; }    
+        [J("returnlessly")]                                                             public object? Returnlessly { get; set; }   
+        [J("skelder")]                                                                  public object? Skelder { get; set; }        
+        [J("windwaywardly")]                                                            public object? Windwaywardly { get; set; }  
+        [J("Yuman")]                                                                    public object? Yuman { get; set; }          
+    }
+
+    public partial record UnimpeachablyClass
+    {
+        [J("acerin", Required = R.DisallowNull, NullValueHandling = N.Ignore)]             public long? Acerin { get; set; }            
+        [J("Bobadil", Required = R.DisallowNull, NullValueHandling = N.Ignore)]            public long? Bobadil { get; set; }           
+        [J("catharticalness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public double? Catharticalness { get; set; } 
+        [J("Chirotherium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]       public long? Chirotherium { get; set; }      
+        [J("chlorophylligenous", Required = R.DisallowNull, NullValueHandling = N.Ignore)] public long? Chlorophylligenous { get; set; }
+        [J("conversational", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Conversational { get; set; }    
+        [J("demiowl", Required = R.DisallowNull, NullValueHandling = N.Ignore)]            public long? Demiowl { get; set; }           
+        [J("disdiapason", Required = R.DisallowNull, NullValueHandling = N.Ignore)]        public string? Disdiapason { get; set; }     
+        [J("ectorhinal", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Ectorhinal { get; set; }        
+        [J("gamblesomeness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]     public long? Gamblesomeness { get; set; }    
+        [J("homocerc", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public bool? Homocerc { get; set; }          
+        [J("irrorate", Required = R.DisallowNull, NullValueHandling = N.Ignore)]           public long? Irrorate { get; set; }          
+        [J("kindergartening", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Kindergartening { get; set; }   
+        [J("lateritic", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Lateritic { get; set; }         
+        [J("mespil", Required = R.DisallowNull, NullValueHandling = N.Ignore)]             public long? Mespil { get; set; }            
+        [J("misconfiguration", Required = R.DisallowNull, NullValueHandling = N.Ignore)]   public long? Misconfiguration { get; set; }  
+        [J("nonbookish")]                                                                  public object? Nonbookish { get; set; }      
+        [J("planometry", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Planometry { get; set; }        
+        [J("Quiina", Required = R.DisallowNull, NullValueHandling = N.Ignore)]             public long? Quiina { get; set; }            
+        [J("Robert", Required = R.DisallowNull, NullValueHandling = N.Ignore)]             public long? Robert { get; set; }            
+        [J("rot", Required = R.DisallowNull, NullValueHandling = N.Ignore)]                public long? Rot { get; set; }               
+        [J("subcinctorium", Required = R.DisallowNull, NullValueHandling = N.Ignore)]      public long? Subcinctorium { get; set; }     
+        [J("tussocker", Required = R.DisallowNull, NullValueHandling = N.Ignore)]          public long? Tussocker { get; set; }         
+        [J("ultraproud", Required = R.DisallowNull, NullValueHandling = N.Ignore)]         public long? Ultraproud { get; set; }        
+        [J("unsuggestedness", Required = R.DisallowNull, NullValueHandling = N.Ignore)]    public long? Unsuggestedness { get; set; }   
+    }
+
+    public partial record UnstressedClass
+    {
+        [J("Alain", Required = R.AllowNull)]           public object Alain { get; set; }          
+        [J("Amphirhina", Required = R.AllowNull)]      public object Amphirhina { get; set; }     
+        [J("antimachinery", Required = R.AllowNull)]   public object Antimachinery { get; set; }  
+        [J("coldish", Required = R.AllowNull)]         public object Coldish { get; set; }        
+        [J("crantara", Required = R.AllowNull)]        public object Crantara { get; set; }       
+        [J("distinguishing", Required = R.AllowNull)]  public object Distinguishing { get; set; } 
+        [J("elytroposis", Required = R.AllowNull)]     public object Elytroposis { get; set; }    
+        [J("gentianwort", Required = R.AllowNull)]     public object Gentianwort { get; set; }    
+        [J("heliosis", Required = R.AllowNull)]        public object Heliosis { get; set; }       
+        [J("instrumental", Required = R.AllowNull)]    public object Instrumental { get; set; }   
+        [J("introinflection", Required = R.AllowNull)] public object Introinflection { get; set; }
+        [J("kala", Required = R.AllowNull)]            public object Kala { get; set; }           
+        [J("Lincolnian", Required = R.AllowNull)]      public object Lincolnian { get; set; }     
+        [J("metad", Required = R.AllowNull)]           public object Metad { get; set; }          
+        [J("Sarcophilus", Required = R.AllowNull)]     public object Sarcophilus { get; set; }    
+        [J("swingingly", Required = R.AllowNull)]      public object Swingingly { get; set; }     
+        [J("unconformity", Required = R.AllowNull)]    public object Unconformity { get; set; }   
+        [J("undecreed", Required = R.AllowNull)]       public object Undecreed { get; set; }      
+        [J("venerable", Required = R.AllowNull)]       public object Venerable { get; set; }      
+        [J("vowellessness", Required = R.AllowNull)]   public object Vowellessness { get; set; }  
+    }
+
+    public partial record WrothyClass
+    {
+        [J("Aeschynanthus", Required = R.AllowNull)]    public object Aeschynanthus { get; set; }   
+        [J("aquiferous", Required = R.AllowNull)]       public object Aquiferous { get; set; }      
+        [J("cheapener", Required = R.AllowNull)]        public object Cheapener { get; set; }       
+        [J("enumeration", Required = R.AllowNull)]      public object Enumeration { get; set; }     
+        [J("Ephesine", Required = R.AllowNull)]         public object Ephesine { get; set; }        
+        [J("escadrille", Required = R.AllowNull)]       public object Escadrille { get; set; }      
+        [J("estrous", Required = R.AllowNull)]          public object Estrous { get; set; }         
+        [J("interestedly", Required = R.AllowNull)]     public object Interestedly { get; set; }    
+        [J("katakinetomer", Required = R.AllowNull)]    public object Katakinetomer { get; set; }   
+        [J("mortification", Required = R.AllowNull)]    public object Mortification { get; set; }   
+        [J("morula", Required = R.AllowNull)]           public object Morula { get; set; }          
+        [J("orthosymmetrical", Required = R.AllowNull)] public object Orthosymmetrical { get; set; }
+        [J("overbark", Required = R.AllowNull)]         public object Overbark { get; set; }        
+        [J("politist", Required = R.AllowNull)]         public object Politist { get; set; }        
+        [J("qualified", Required = R.AllowNull)]        public object Qualified { get; set; }       
+        [J("sphenomalar", Required = R.AllowNull)]      public object Sphenomalar { get; set; }     
+        [J("throatful", Required = R.AllowNull)]        public object Throatful { get; set; }       
+        [J("transhumance", Required = R.AllowNull)]     public object Transhumance { get; set; }    
+        [J("triandrian", Required = R.AllowNull)]       public object Triandrian { get; set; }      
+        [J("unbooked", Required = R.AllowNull)]         public object Unbooked { get; set; }        
+    }
+
+    public partial struct Protrusive
+    {
+        public double? Double;
+        public long?[]? UnionArray;
+
+        public static implicit operator Protrusive(double Double) => new Protrusive { Double = Double };
+        public static implicit operator Protrusive(long?[] UnionArray) => new Protrusive { UnionArray = UnionArray };
+    }
+
+    public partial struct PulpitismElement
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+        public PulpitismClass? PulpitismClass;
+
+        public static implicit operator PulpitismElement(double Double) => new PulpitismElement { Double = Double };
+        public static implicit operator PulpitismElement(long[] IntegerArray) => new PulpitismElement { IntegerArray = IntegerArray };
+        public static implicit operator PulpitismElement(PulpitismClass PulpitismClass) => new PulpitismElement { PulpitismClass = PulpitismClass };
+    }
+
+    public partial struct PyodermiaElement
+    {
+        public long? Integer;
+        public PyodermiaClass? PyodermiaClass;
+
+        public static implicit operator PyodermiaElement(long Integer) => new PyodermiaElement { Integer = Integer };
+        public static implicit operator PyodermiaElement(PyodermiaClass PyodermiaClass) => new PyodermiaElement { PyodermiaClass = PyodermiaClass };
+    }
+
+    public partial struct QuebrachineElement
+    {
+        public bool? Bool;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator QuebrachineElement(bool Bool) => new QuebrachineElement { Bool = Bool };
+        public static implicit operator QuebrachineElement(QuebrachineClass QuebrachineClass) => new QuebrachineElement { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => Bool == null && QuebrachineClass == null;
+    }
+
+    public partial struct Querier
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Querier(bool Bool) => new Querier { Bool = Bool };
+        public static implicit operator Querier(Dictionary<string, long> IntegerMap) => new Querier { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Rebarbative
+    {
+        public bool? Bool;
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Rebarbative(bool Bool) => new Rebarbative { Bool = Bool };
+        public static implicit operator Rebarbative(double Double) => new Rebarbative { Double = Double };
+        public static implicit operator Rebarbative(long[] IntegerArray) => new Rebarbative { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Retrocervical
+    {
+        public long? Integer;
+        public long?[]? UnionArray;
+
+        public static implicit operator Retrocervical(long Integer) => new Retrocervical { Integer = Integer };
+        public static implicit operator Retrocervical(long?[] UnionArray) => new Retrocervical { UnionArray = UnionArray };
+    }
+
+    public partial struct Revert
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Revert(bool Bool) => new Revert { Bool = Bool };
+        public static implicit operator Revert(string String) => new Revert { String = String };
+    }
+
+    public partial struct RewriteElement
+    {
+        public double? Double;
+        public object[]? NullArray;
+        public RewriteClass? RewriteClass;
+
+        public static implicit operator RewriteElement(double Double) => new RewriteElement { Double = Double };
+        public static implicit operator RewriteElement(object[] NullArray) => new RewriteElement { NullArray = NullArray };
+        public static implicit operator RewriteElement(RewriteClass RewriteClass) => new RewriteElement { RewriteClass = RewriteClass };
+    }
+
+    public partial struct Saccoderm
+    {
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Saccoderm(long[] IntegerArray) => new Saccoderm { IntegerArray = IntegerArray };
+        public static implicit operator Saccoderm(string String) => new Saccoderm { String = String };
+        public bool IsNull => IntegerArray == null && String == null;
+    }
+
+    public partial struct SantirElement
+    {
+        public double? Double;
+        public SantirClass? SantirClass;
+
+        public static implicit operator SantirElement(double Double) => new SantirElement { Double = Double };
+        public static implicit operator SantirElement(SantirClass SantirClass) => new SantirElement { SantirClass = SantirClass };
+    }
+
+    public partial struct Saprophilous
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Saprophilous(Dictionary<string, long> IntegerMap) => new Saprophilous { IntegerMap = IntegerMap };
+        public static implicit operator Saprophilous(string String) => new Saprophilous { String = String };
+        public bool IsNull => IntegerMap == null && String == null;
+    }
+
+    public partial struct SaxtenElement
+    {
+        public SaxtenClass? SaxtenClass;
+        public string? String;
+
+        public static implicit operator SaxtenElement(SaxtenClass SaxtenClass) => new SaxtenElement { SaxtenClass = SaxtenClass };
+        public static implicit operator SaxtenElement(string String) => new SaxtenElement { String = String };
+    }
+
+    public partial struct Scoffer
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Scoffer(Dictionary<string, long> IntegerMap) => new Scoffer { IntegerMap = IntegerMap };
+        public static implicit operator Scoffer(object[] NullArray) => new Scoffer { NullArray = NullArray };
+        public bool IsNull => NullArray == null && IntegerMap == null;
+    }
+
+    public partial struct Scrampum
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+
+        public static implicit operator Scrampum(bool Bool) => new Scrampum { Bool = Bool };
+        public static implicit operator Scrampum(long[] IntegerArray) => new Scrampum { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Bool == null;
+    }
+
+    public partial struct Serpentinic
+    {
+        public double? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Serpentinic(double Double) => new Serpentinic { Double = Double };
+        public static implicit operator Serpentinic(long[] IntegerArray) => new Serpentinic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Shadowable
+    {
+        public bool? Bool;
+        public long?[]? UnionArray;
+
+        public static implicit operator Shadowable(bool Bool) => new Shadowable { Bool = Bool };
+        public static implicit operator Shadowable(long?[] UnionArray) => new Shadowable { UnionArray = UnionArray };
+    }
+
+    public partial struct SisteringElement
+    {
+        public long? Integer;
+        public object[]? NullArray;
+        public SisteringClass? SisteringClass;
+
+        public static implicit operator SisteringElement(long Integer) => new SisteringElement { Integer = Integer };
+        public static implicit operator SisteringElement(object[] NullArray) => new SisteringElement { NullArray = NullArray };
+        public static implicit operator SisteringElement(SisteringClass SisteringClass) => new SisteringElement { SisteringClass = SisteringClass };
+    }
+
+    public partial struct Stagmometer
+    {
+        public string? String;
+        public long?[]? UnionArray;
+
+        public static implicit operator Stagmometer(string String) => new Stagmometer { String = String };
+        public static implicit operator Stagmometer(long?[] UnionArray) => new Stagmometer { UnionArray = UnionArray };
+    }
+
+    public partial struct Stimulability
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Stimulability(bool Bool) => new Stimulability { Bool = Bool };
+        public static implicit operator Stimulability(long Integer) => new Stimulability { Integer = Integer };
+        public static implicit operator Stimulability(Dictionary<string, long> IntegerMap) => new Stimulability { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Strangleable
+    {
+        public double? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Strangleable(double Double) => new Strangleable { Double = Double };
+        public static implicit operator Strangleable(object[] NullArray) => new Strangleable { NullArray = NullArray };
+    }
+
+    public partial struct StrenuosityElement
+    {
+        public object[]? NullArray;
+        public StrenuosityClass? StrenuosityClass;
+
+        public static implicit operator StrenuosityElement(object[] NullArray) => new StrenuosityElement { NullArray = NullArray };
+        public static implicit operator StrenuosityElement(StrenuosityClass StrenuosityClass) => new StrenuosityElement { StrenuosityClass = StrenuosityClass };
+    }
+
+    public partial struct Tabaxir
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Tabaxir(bool Bool) => new Tabaxir { Bool = Bool };
+        public static implicit operator Tabaxir(double Double) => new Tabaxir { Double = Double };
+    }
+
+    public partial struct Talpiform
+    {
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Talpiform(double Double) => new Talpiform { Double = Double };
+        public static implicit operator Talpiform(QuebrachineClass QuebrachineClass) => new Talpiform { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Double == null;
+    }
+
+    public partial struct Thwack
+    {
+        public bool? Bool;
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Thwack(bool Bool) => new Thwack { Bool = Bool };
+        public static implicit operator Thwack(double Double) => new Thwack { Double = Double };
+        public static implicit operator Thwack(QuebrachineClass QuebrachineClass) => new Thwack { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct Tortricine
+    {
+        public QuebrachineClass? QuebrachineClass;
+        public long?[]? UnionArray;
+
+        public static implicit operator Tortricine(QuebrachineClass QuebrachineClass) => new Tortricine { QuebrachineClass = QuebrachineClass };
+        public static implicit operator Tortricine(long?[] UnionArray) => new Tortricine { UnionArray = UnionArray };
+    }
+
+    public partial struct TruantcyElement
+    {
+        public bool? Bool;
+        public TruantcyClass? TruantcyClass;
+
+        public static implicit operator TruantcyElement(bool Bool) => new TruantcyElement { Bool = Bool };
+        public static implicit operator TruantcyElement(TruantcyClass TruantcyClass) => new TruantcyElement { TruantcyClass = TruantcyClass };
+    }
+
+    public partial struct Unbeginning
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Unbeginning(Dictionary<string, long> IntegerMap) => new Unbeginning { IntegerMap = IntegerMap };
+        public static implicit operator Unbeginning(object[] NullArray) => new Unbeginning { NullArray = NullArray };
+        public static implicit operator Unbeginning(string String) => new Unbeginning { String = String };
+    }
+
+    public partial struct Undesirability
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Undesirability(long[] IntegerArray) => new Undesirability { IntegerArray = IntegerArray };
+        public static implicit operator Undesirability(Dictionary<string, long> IntegerMap) => new Undesirability { IntegerMap = IntegerMap };
+        public static implicit operator Undesirability(string String) => new Undesirability { String = String };
+    }
+
+    public partial struct Unerasing
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Unerasing(long Integer) => new Unerasing { Integer = Integer };
+        public static implicit operator Unerasing(Dictionary<string, long> IntegerMap) => new Unerasing { IntegerMap = IntegerMap };
+        public static implicit operator Unerasing(object[] NullArray) => new Unerasing { NullArray = NullArray };
+    }
+
+    public partial struct Unguentarium
+    {
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Unguentarium(long Integer) => new Unguentarium { Integer = Integer };
+        public static implicit operator Unguentarium(object[] NullArray) => new Unguentarium { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Integer == null;
+    }
+
+    public partial struct UnimpeachablyElement
+    {
+        public bool? Bool;
+        public UnimpeachablyClass? UnimpeachablyClass;
+
+        public static implicit operator UnimpeachablyElement(bool Bool) => new UnimpeachablyElement { Bool = Bool };
+        public static implicit operator UnimpeachablyElement(UnimpeachablyClass UnimpeachablyClass) => new UnimpeachablyElement { UnimpeachablyClass = UnimpeachablyClass };
+    }
+
+    public partial struct Unmortgaged
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unmortgaged(double Double) => new Unmortgaged { Double = Double };
+        public static implicit operator Unmortgaged(Dictionary<string, long> IntegerMap) => new Unmortgaged { IntegerMap = IntegerMap };
+        public bool IsNull => Double == null && IntegerMap == null;
+    }
+
+    public partial struct Unobstructed
+    {
+        public long? Integer;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Unobstructed(long Integer) => new Unobstructed { Integer = Integer };
+        public static implicit operator Unobstructed(QuebrachineClass QuebrachineClass) => new Unobstructed { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Integer == null;
+    }
+
+    public partial struct Unreceptivity
+    {
+        public long? Integer;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Unreceptivity(long Integer) => new Unreceptivity { Integer = Integer };
+        public static implicit operator Unreceptivity(object[] NullArray) => new Unreceptivity { NullArray = NullArray };
+        public static implicit operator Unreceptivity(string String) => new Unreceptivity { String = String };
+    }
+
+    public partial struct Unsatisfactoriness
+    {
+        public bool? Bool;
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Unsatisfactoriness(bool Bool) => new Unsatisfactoriness { Bool = Bool };
+        public static implicit operator Unsatisfactoriness(long Integer) => new Unsatisfactoriness { Integer = Integer };
+        public static implicit operator Unsatisfactoriness(long[] IntegerArray) => new Unsatisfactoriness { IntegerArray = IntegerArray };
+    }
+
+    public partial struct UnstressedElement
+    {
+        public bool? Bool;
+        public string? String;
+        public UnstressedClass? UnstressedClass;
+
+        public static implicit operator UnstressedElement(bool Bool) => new UnstressedElement { Bool = Bool };
+        public static implicit operator UnstressedElement(string String) => new UnstressedElement { String = String };
+        public static implicit operator UnstressedElement(UnstressedClass UnstressedClass) => new UnstressedElement { UnstressedClass = UnstressedClass };
+    }
+
+    public partial struct Untasked
+    {
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Untasked(double Double) => new Untasked { Double = Double };
+        public static implicit operator Untasked(Dictionary<string, long> IntegerMap) => new Untasked { IntegerMap = IntegerMap };
+        public static implicit operator Untasked(object[] NullArray) => new Untasked { NullArray = NullArray };
+    }
+
+    public partial struct Unvarying
+    {
+        public bool? Bool;
+        public double? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unvarying(bool Bool) => new Unvarying { Bool = Bool };
+        public static implicit operator Unvarying(double Double) => new Unvarying { Double = Double };
+        public static implicit operator Unvarying(Dictionary<string, long> IntegerMap) => new Unvarying { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Vehemently
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+
+        public static implicit operator Vehemently(bool Bool) => new Vehemently { Bool = Bool };
+        public static implicit operator Vehemently(object[] NullArray) => new Vehemently { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Bool == null;
+    }
+
+    public partial struct Whitepot
+    {
+        public double? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Whitepot(double Double) => new Whitepot { Double = Double };
+        public static implicit operator Whitepot(QuebrachineClass QuebrachineClass) => new Whitepot { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct WrothyElement
+    {
+        public object[]? NullArray;
+        public WrothyClass? WrothyClass;
+
+        public static implicit operator WrothyElement(object[] NullArray) => new WrothyElement { NullArray = NullArray };
+        public static implicit operator WrothyElement(WrothyClass WrothyClass) => new WrothyElement { WrothyClass = WrothyClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ProtrusiveConverter.Singleton,
+                PulpitismElementConverter.Singleton,
+                PyodermiaElementConverter.Singleton,
+                QuebrachineElementConverter.Singleton,
+                QuerierConverter.Singleton,
+                RebarbativeConverter.Singleton,
+                RetrocervicalConverter.Singleton,
+                RevertConverter.Singleton,
+                RewriteElementConverter.Singleton,
+                SaccodermConverter.Singleton,
+                SantirElementConverter.Singleton,
+                SaprophilousConverter.Singleton,
+                SaxtenElementConverter.Singleton,
+                ScofferConverter.Singleton,
+                ScrampumConverter.Singleton,
+                SerpentinicConverter.Singleton,
+                ShadowableConverter.Singleton,
+                SisteringElementConverter.Singleton,
+                StagmometerConverter.Singleton,
+                StimulabilityConverter.Singleton,
+                StrangleableConverter.Singleton,
+                StrenuosityElementConverter.Singleton,
+                TabaxirConverter.Singleton,
+                TalpiformConverter.Singleton,
+                ThwackConverter.Singleton,
+                TortricineConverter.Singleton,
+                TruantcyElementConverter.Singleton,
+                UnbeginningConverter.Singleton,
+                UndesirabilityConverter.Singleton,
+                UnerasingConverter.Singleton,
+                UnguentariumConverter.Singleton,
+                UnimpeachablyElementConverter.Singleton,
+                UnmortgagedConverter.Singleton,
+                UnobstructedConverter.Singleton,
+                UnreceptivityConverter.Singleton,
+                UnsatisfactorinessConverter.Singleton,
+                UnstressedElementConverter.Singleton,
+                UntaskedConverter.Singleton,
+                UnvaryingConverter.Singleton,
+                VehementlyConverter.Singleton,
+                WhitepotConverter.Singleton,
+                WrothyElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ProtrusiveConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protrusive) || t == typeof(Protrusive?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Protrusive { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Protrusive { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protrusive");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protrusive)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protrusive");
+        }
+
+        public static readonly ProtrusiveConverter Singleton = new ProtrusiveConverter();
+    }
+
+    internal class PulpitismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PulpitismElement) || t == typeof(PulpitismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new PulpitismElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PulpitismClass>(reader);
+                    return new PulpitismElement { PulpitismClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new PulpitismElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PulpitismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PulpitismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.PulpitismClass != null)
+            {
+                serializer.Serialize(writer, value.PulpitismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PulpitismElement");
+        }
+
+        public static readonly PulpitismElementConverter Singleton = new PulpitismElementConverter();
+    }
+
+    internal class PyodermiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PyodermiaElement) || t == typeof(PyodermiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PyodermiaElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PyodermiaClass>(reader);
+                    return new PyodermiaElement { PyodermiaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PyodermiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PyodermiaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PyodermiaClass != null)
+            {
+                serializer.Serialize(writer, value.PyodermiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PyodermiaElement");
+        }
+
+        public static readonly PyodermiaElementConverter Singleton = new PyodermiaElementConverter();
+    }
+
+    internal class QuebrachineElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(QuebrachineElement) || t == typeof(QuebrachineElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new QuebrachineElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new QuebrachineElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new QuebrachineElement { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type QuebrachineElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (QuebrachineElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type QuebrachineElement");
+        }
+
+        public static readonly QuebrachineElementConverter Singleton = new QuebrachineElementConverter();
+    }
+
+    internal class QuerierConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Querier) || t == typeof(Querier?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Querier { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Querier { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Querier");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Querier)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Querier");
+        }
+
+        public static readonly QuerierConverter Singleton = new QuerierConverter();
+    }
+
+    internal class RebarbativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rebarbative) || t == typeof(Rebarbative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Rebarbative { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Rebarbative { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rebarbative { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rebarbative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rebarbative)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rebarbative");
+        }
+
+        public static readonly RebarbativeConverter Singleton = new RebarbativeConverter();
+    }
+
+    internal class RetrocervicalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Retrocervical) || t == typeof(Retrocervical?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Retrocervical { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Retrocervical { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Retrocervical");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Retrocervical)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Retrocervical");
+        }
+
+        public static readonly RetrocervicalConverter Singleton = new RetrocervicalConverter();
+    }
+
+    internal class RevertConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Revert) || t == typeof(Revert?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Revert { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Revert { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Revert");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Revert)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Revert");
+        }
+
+        public static readonly RevertConverter Singleton = new RevertConverter();
+    }
+
+    internal class RewriteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RewriteElement) || t == typeof(RewriteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new RewriteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<RewriteClass>(reader);
+                    return new RewriteElement { RewriteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new RewriteElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type RewriteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RewriteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.RewriteClass != null)
+            {
+                serializer.Serialize(writer, value.RewriteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type RewriteElement");
+        }
+
+        public static readonly RewriteElementConverter Singleton = new RewriteElementConverter();
+    }
+
+    internal class SaccodermConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saccoderm) || t == typeof(Saccoderm?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saccoderm { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saccoderm { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Saccoderm { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Saccoderm");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saccoderm)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saccoderm");
+        }
+
+        public static readonly SaccodermConverter Singleton = new SaccodermConverter();
+    }
+
+    internal class SantirElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SantirElement) || t == typeof(SantirElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new SantirElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SantirClass>(reader);
+                    return new SantirElement { SantirClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SantirElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SantirElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.SantirClass != null)
+            {
+                serializer.Serialize(writer, value.SantirClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SantirElement");
+        }
+
+        public static readonly SantirElementConverter Singleton = new SantirElementConverter();
+    }
+
+    internal class SaprophilousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saprophilous) || t == typeof(Saprophilous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saprophilous { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saprophilous { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Saprophilous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Saprophilous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saprophilous)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saprophilous");
+        }
+
+        public static readonly SaprophilousConverter Singleton = new SaprophilousConverter();
+    }
+
+    internal class SaxtenElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SaxtenElement) || t == typeof(SaxtenElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new SaxtenElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SaxtenClass>(reader);
+                    return new SaxtenElement { SaxtenClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SaxtenElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SaxtenElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.SaxtenClass != null)
+            {
+                serializer.Serialize(writer, value.SaxtenClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SaxtenElement");
+        }
+
+        public static readonly SaxtenElementConverter Singleton = new SaxtenElementConverter();
+    }
+
+    internal class ScofferConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scoffer) || t == typeof(Scoffer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scoffer { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Scoffer { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Scoffer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scoffer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scoffer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scoffer");
+        }
+
+        public static readonly ScofferConverter Singleton = new ScofferConverter();
+    }
+
+    internal class ScrampumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scrampum) || t == typeof(Scrampum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scrampum { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Scrampum { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Scrampum { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scrampum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scrampum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scrampum");
+        }
+
+        public static readonly ScrampumConverter Singleton = new ScrampumConverter();
+    }
+
+    internal class SerpentinicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Serpentinic) || t == typeof(Serpentinic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Serpentinic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Serpentinic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Serpentinic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Serpentinic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Serpentinic");
+        }
+
+        public static readonly SerpentinicConverter Singleton = new SerpentinicConverter();
+    }
+
+    internal class ShadowableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shadowable) || t == typeof(Shadowable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Shadowable { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Shadowable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shadowable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shadowable)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shadowable");
+        }
+
+        public static readonly ShadowableConverter Singleton = new ShadowableConverter();
+    }
+
+    internal class SisteringElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SisteringElement) || t == typeof(SisteringElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new SisteringElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SisteringClass>(reader);
+                    return new SisteringElement { SisteringClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new SisteringElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type SisteringElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SisteringElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.SisteringClass != null)
+            {
+                serializer.Serialize(writer, value.SisteringClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SisteringElement");
+        }
+
+        public static readonly SisteringElementConverter Singleton = new SisteringElementConverter();
+    }
+
+    internal class StagmometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stagmometer) || t == typeof(Stagmometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Stagmometer { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Stagmometer { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Stagmometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stagmometer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stagmometer");
+        }
+
+        public static readonly StagmometerConverter Singleton = new StagmometerConverter();
+    }
+
+    internal class StimulabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stimulability) || t == typeof(Stimulability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Stimulability { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Stimulability { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Stimulability { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Stimulability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stimulability)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stimulability");
+        }
+
+        public static readonly StimulabilityConverter Singleton = new StimulabilityConverter();
+    }
+
+    internal class StrangleableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Strangleable) || t == typeof(Strangleable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Strangleable { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Strangleable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Strangleable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Strangleable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Strangleable");
+        }
+
+        public static readonly StrangleableConverter Singleton = new StrangleableConverter();
+    }
+
+    internal class StrenuosityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(StrenuosityElement) || t == typeof(StrenuosityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<StrenuosityClass>(reader);
+                    return new StrenuosityElement { StrenuosityClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new StrenuosityElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type StrenuosityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (StrenuosityElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.StrenuosityClass != null)
+            {
+                serializer.Serialize(writer, value.StrenuosityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type StrenuosityElement");
+        }
+
+        public static readonly StrenuosityElementConverter Singleton = new StrenuosityElementConverter();
+    }
+
+    internal class TabaxirConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tabaxir) || t == typeof(Tabaxir?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Tabaxir { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Tabaxir { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Tabaxir");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tabaxir)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tabaxir");
+        }
+
+        public static readonly TabaxirConverter Singleton = new TabaxirConverter();
+    }
+
+    internal class TalpiformConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Talpiform) || t == typeof(Talpiform?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Talpiform { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Talpiform { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Talpiform { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Talpiform");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Talpiform)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Talpiform");
+        }
+
+        public static readonly TalpiformConverter Singleton = new TalpiformConverter();
+    }
+
+    internal class ThwackConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Thwack) || t == typeof(Thwack?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Thwack { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Thwack { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Thwack { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Thwack");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Thwack)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Thwack");
+        }
+
+        public static readonly ThwackConverter Singleton = new ThwackConverter();
+    }
+
+    internal class TortricineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tortricine) || t == typeof(Tortricine?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Tortricine { QuebrachineClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Tortricine { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Tortricine");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tortricine)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tortricine");
+        }
+
+        public static readonly TortricineConverter Singleton = new TortricineConverter();
+    }
+
+    internal class TruantcyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TruantcyElement) || t == typeof(TruantcyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new TruantcyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TruantcyClass>(reader);
+                    return new TruantcyElement { TruantcyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type TruantcyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TruantcyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.TruantcyClass != null)
+            {
+                serializer.Serialize(writer, value.TruantcyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type TruantcyElement");
+        }
+
+        public static readonly TruantcyElementConverter Singleton = new TruantcyElementConverter();
+    }
+
+    internal class UnbeginningConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unbeginning) || t == typeof(Unbeginning?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unbeginning { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unbeginning { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unbeginning { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unbeginning");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unbeginning)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unbeginning");
+        }
+
+        public static readonly UnbeginningConverter Singleton = new UnbeginningConverter();
+    }
+
+    internal class UndesirabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Undesirability) || t == typeof(Undesirability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Undesirability { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Undesirability { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Undesirability { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Undesirability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Undesirability)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Undesirability");
+        }
+
+        public static readonly UndesirabilityConverter Singleton = new UndesirabilityConverter();
+    }
+
+    internal class UnerasingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unerasing) || t == typeof(Unerasing?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unerasing { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unerasing { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unerasing { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unerasing");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unerasing)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unerasing");
+        }
+
+        public static readonly UnerasingConverter Singleton = new UnerasingConverter();
+    }
+
+    internal class UnguentariumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unguentarium) || t == typeof(Unguentarium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unguentarium { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unguentarium { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unguentarium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unguentarium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unguentarium)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unguentarium");
+        }
+
+        public static readonly UnguentariumConverter Singleton = new UnguentariumConverter();
+    }
+
+    internal class UnimpeachablyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnimpeachablyElement) || t == typeof(UnimpeachablyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnimpeachablyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnimpeachablyClass>(reader);
+                    return new UnimpeachablyElement { UnimpeachablyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnimpeachablyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnimpeachablyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnimpeachablyClass != null)
+            {
+                serializer.Serialize(writer, value.UnimpeachablyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnimpeachablyElement");
+        }
+
+        public static readonly UnimpeachablyElementConverter Singleton = new UnimpeachablyElementConverter();
+    }
+
+    internal class UnmortgagedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unmortgaged) || t == typeof(Unmortgaged?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unmortgaged { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unmortgaged { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unmortgaged { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unmortgaged");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unmortgaged)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unmortgaged");
+        }
+
+        public static readonly UnmortgagedConverter Singleton = new UnmortgagedConverter();
+    }
+
+    internal class UnobstructedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unobstructed) || t == typeof(Unobstructed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unobstructed { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unobstructed { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Unobstructed { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unobstructed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unobstructed)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unobstructed");
+        }
+
+        public static readonly UnobstructedConverter Singleton = new UnobstructedConverter();
+    }
+
+    internal class UnreceptivityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unreceptivity) || t == typeof(Unreceptivity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unreceptivity { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unreceptivity { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unreceptivity { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unreceptivity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unreceptivity)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unreceptivity");
+        }
+
+        public static readonly UnreceptivityConverter Singleton = new UnreceptivityConverter();
+    }
+
+    internal class UnsatisfactorinessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unsatisfactoriness) || t == typeof(Unsatisfactoriness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unsatisfactoriness { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unsatisfactoriness { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Unsatisfactoriness { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unsatisfactoriness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unsatisfactoriness)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unsatisfactoriness");
+        }
+
+        public static readonly UnsatisfactorinessConverter Singleton = new UnsatisfactorinessConverter();
+    }
+
+    internal class UnstressedElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnstressedElement) || t == typeof(UnstressedElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnstressedElement { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new UnstressedElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnstressedClass>(reader);
+                    return new UnstressedElement { UnstressedClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnstressedElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnstressedElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnstressedClass != null)
+            {
+                serializer.Serialize(writer, value.UnstressedClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnstressedElement");
+        }
+
+        public static readonly UnstressedElementConverter Singleton = new UnstressedElementConverter();
+    }
+
+    internal class UntaskedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Untasked) || t == typeof(Untasked?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Untasked { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Untasked { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Untasked { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Untasked");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Untasked)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Untasked");
+        }
+
+        public static readonly UntaskedConverter Singleton = new UntaskedConverter();
+    }
+
+    internal class UnvaryingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unvarying) || t == typeof(Unvarying?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Unvarying { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unvarying { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unvarying { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unvarying");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unvarying)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unvarying");
+        }
+
+        public static readonly UnvaryingConverter Singleton = new UnvaryingConverter();
+    }
+
+    internal class VehementlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Vehemently) || t == typeof(Vehemently?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Vehemently { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Vehemently { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Vehemently { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Vehemently");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Vehemently)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Vehemently");
+        }
+
+        public static readonly VehementlyConverter Singleton = new VehementlyConverter();
+    }
+
+    internal class WhitepotConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Whitepot) || t == typeof(Whitepot?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Whitepot { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Whitepot { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Whitepot");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Whitepot)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Whitepot");
+        }
+
+        public static readonly WhitepotConverter Singleton = new WhitepotConverter();
+    }
+
+    internal class WrothyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(WrothyElement) || t == typeof(WrothyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<WrothyClass>(reader);
+                    return new WrothyElement { WrothyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new WrothyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type WrothyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (WrothyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.WrothyClass != null)
+            {
+                serializer.Serialize(writer, value.WrothyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type WrothyElement");
+        }
+
+        public static readonly WrothyElementConverter Singleton = new WrothyElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combinations4.json/number-type-decimal--20a123601b5a/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combinations4.json/number-type-decimal--20a123601b5a/QuickType.cs
new file mode 100644
index 0000000..12919f3
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combinations4.json/number-type-decimal--20a123601b5a/QuickType.cs
@@ -0,0 +1,3484 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("protrusive", Required = Required.Always)]
+        public Protrusive[] Protrusive { get; set; }
+
+        [JsonProperty("pulpitism", Required = Required.Always)]
+        public PulpitismElement[] Pulpitism { get; set; }
+
+        [JsonProperty("pyodermia", Required = Required.Always)]
+        public PyodermiaElement[] Pyodermia { get; set; }
+
+        [JsonProperty("quebrachine", Required = Required.Always)]
+        public QuebrachineElement[] Quebrachine { get; set; }
+
+        [JsonProperty("querier", Required = Required.Always)]
+        public Querier[] Querier { get; set; }
+
+        [JsonProperty("rebarbative", Required = Required.Always)]
+        public Rebarbative[] Rebarbative { get; set; }
+
+        [JsonProperty("reimagine", Required = Required.Always)]
+        public Reimagine[] Reimagine { get; set; }
+
+        [JsonProperty("ressaut", Required = Required.Always)]
+        public Ressaut Ressaut { get; set; }
+
+        [JsonProperty("retrocervical", Required = Required.Always)]
+        public Retrocervical[] Retrocervical { get; set; }
+
+        [JsonProperty("revert", Required = Required.Always)]
+        public Revert[] Revert { get; set; }
+
+        [JsonProperty("rewrite", Required = Required.Always)]
+        public RewriteElement[] Rewrite { get; set; }
+
+        [JsonProperty("saccoderm", Required = Required.Always)]
+        public Saccoderm[] Saccoderm { get; set; }
+
+        [JsonProperty("santir", Required = Required.Always)]
+        public SantirElement[] Santir { get; set; }
+
+        [JsonProperty("saprophilous", Required = Required.Always)]
+        public Saprophilous[] Saprophilous { get; set; }
+
+        [JsonProperty("saxten", Required = Required.Always)]
+        public SaxtenElement[] Saxten { get; set; }
+
+        [JsonProperty("scatty", Required = Required.Always)]
+        public Scatty?[] Scatty { get; set; }
+
+        [JsonProperty("scoffer", Required = Required.Always)]
+        public Scoffer[] Scoffer { get; set; }
+
+        [JsonProperty("scrampum", Required = Required.Always)]
+        public Scrampum[] Scrampum { get; set; }
+
+        [JsonProperty("semantic", Required = Required.Always)]
+        public decimal Semantic { get; set; }
+
+        [JsonProperty("serpentinic", Required = Required.Always)]
+        public Serpentinic[] Serpentinic { get; set; }
+
+        [JsonProperty("shadowable", Required = Required.Always)]
+        public Shadowable[] Shadowable { get; set; }
+
+        [JsonProperty("sistering", Required = Required.Always)]
+        public SisteringElement[] Sistering { get; set; }
+
+        [JsonProperty("staghunting", Required = Required.Always)]
+        public Staghunting[] Staghunting { get; set; }
+
+        [JsonProperty("stagmometer", Required = Required.Always)]
+        public Stagmometer[] Stagmometer { get; set; }
+
+        [JsonProperty("stimulability", Required = Required.Always)]
+        public Stimulability[] Stimulability { get; set; }
+
+        [JsonProperty("strangleable", Required = Required.Always)]
+        public Strangleable[] Strangleable { get; set; }
+
+        [JsonProperty("strenuosity", Required = Required.Always)]
+        public StrenuosityElement[] Strenuosity { get; set; }
+
+        [JsonProperty("tabaxir", Required = Required.Always)]
+        public Tabaxir[] Tabaxir { get; set; }
+
+        [JsonProperty("talpiform", Required = Required.Always)]
+        public Talpiform[] Talpiform { get; set; }
+
+        [JsonProperty("thwack", Required = Required.Always)]
+        public Thwack[] Thwack { get; set; }
+
+        [JsonProperty("to", Required = Required.Always)]
+        public decimal?[] To { get; set; }
+
+        [JsonProperty("tortricine", Required = Required.Always)]
+        public Tortricine[] Tortricine { get; set; }
+
+        [JsonProperty("truantcy", Required = Required.Always)]
+        public TruantcyElement[] Truantcy { get; set; }
+
+        [JsonProperty("turgesce", Required = Required.Always)]
+        public string[] Turgesce { get; set; }
+
+        [JsonProperty("unbeginning", Required = Required.Always)]
+        public Unbeginning[] Unbeginning { get; set; }
+
+        [JsonProperty("underdunged", Required = Required.Always)]
+        public decimal[] Underdunged { get; set; }
+
+        [JsonProperty("undesirability", Required = Required.Always)]
+        public Undesirability[] Undesirability { get; set; }
+
+        [JsonProperty("unerasing", Required = Required.Always)]
+        public Unerasing[] Unerasing { get; set; }
+
+        [JsonProperty("unguentarium", Required = Required.Always)]
+        public Unguentarium[] Unguentarium { get; set; }
+
+        [JsonProperty("unimpeachably", Required = Required.Always)]
+        public UnimpeachablyElement[] Unimpeachably { get; set; }
+
+        [JsonProperty("unmortgaged", Required = Required.Always)]
+        public Unmortgaged[] Unmortgaged { get; set; }
+
+        [JsonProperty("unobstructed", Required = Required.Always)]
+        public Unobstructed[] Unobstructed { get; set; }
+
+        [JsonProperty("unreceptivity", Required = Required.Always)]
+        public Unreceptivity[] Unreceptivity { get; set; }
+
+        [JsonProperty("unsatisfactoriness", Required = Required.Always)]
+        public Unsatisfactoriness[] Unsatisfactoriness { get; set; }
+
+        [JsonProperty("unsecurity", Required = Required.Always)]
+        public long[] Unsecurity { get; set; }
+
+        [JsonProperty("unstressed", Required = Required.Always)]
+        public UnstressedElement[] Unstressed { get; set; }
+
+        [JsonProperty("untasked", Required = Required.Always)]
+        public Untasked[] Untasked { get; set; }
+
+        [JsonProperty("unvarying", Required = Required.Always)]
+        public Unvarying[] Unvarying { get; set; }
+
+        [JsonProperty("vehemently", Required = Required.Always)]
+        public Vehemently[] Vehemently { get; set; }
+
+        [JsonProperty("warriorship", Required = Required.Always)]
+        public Dictionary<string, bool> Warriorship { get; set; }
+
+        [JsonProperty("whitepot", Required = Required.Always)]
+        public Whitepot[] Whitepot { get; set; }
+
+        [JsonProperty("wrothy", Required = Required.Always)]
+        public WrothyElement[] Wrothy { get; set; }
+    }
+
+    public partial record PulpitismClass
+    {
+        [JsonProperty("abnet", Required = Required.AllowNull)]
+        public object Abnet { get; set; }
+
+        [JsonProperty("buckhorn", Required = Required.AllowNull)]
+        public object Buckhorn { get; set; }
+
+        [JsonProperty("calciform", Required = Required.AllowNull)]
+        public object Calciform { get; set; }
+
+        [JsonProperty("chelophore", Required = Required.AllowNull)]
+        public object Chelophore { get; set; }
+
+        [JsonProperty("cogitation", Required = Required.AllowNull)]
+        public object Cogitation { get; set; }
+
+        [JsonProperty("decreeable", Required = Required.AllowNull)]
+        public object Decreeable { get; set; }
+
+        [JsonProperty("despicable", Required = Required.AllowNull)]
+        public object Despicable { get; set; }
+
+        [JsonProperty("isodiazo", Required = Required.AllowNull)]
+        public object Isodiazo { get; set; }
+
+        [JsonProperty("jadedly", Required = Required.AllowNull)]
+        public object Jadedly { get; set; }
+
+        [JsonProperty("leptochlorite", Required = Required.AllowNull)]
+        public object Leptochlorite { get; set; }
+
+        [JsonProperty("nursling", Required = Required.AllowNull)]
+        public object Nursling { get; set; }
+
+        [JsonProperty("palamedean", Required = Required.AllowNull)]
+        public object Palamedean { get; set; }
+
+        [JsonProperty("photoheliograph", Required = Required.AllowNull)]
+        public object Photoheliograph { get; set; }
+
+        [JsonProperty("pipewood", Required = Required.AllowNull)]
+        public object Pipewood { get; set; }
+
+        [JsonProperty("roberd", Required = Required.AllowNull)]
+        public object Roberd { get; set; }
+
+        [JsonProperty("statable", Required = Required.AllowNull)]
+        public object Statable { get; set; }
+
+        [JsonProperty("superassume", Required = Required.AllowNull)]
+        public object Superassume { get; set; }
+
+        [JsonProperty("syllabe", Required = Required.AllowNull)]
+        public object Syllabe { get; set; }
+
+        [JsonProperty("toughhead", Required = Required.AllowNull)]
+        public object Toughhead { get; set; }
+
+        [JsonProperty("underburn", Required = Required.AllowNull)]
+        public object Underburn { get; set; }
+    }
+
+    public partial record PyodermiaClass
+    {
+        [JsonProperty("aphoristically", Required = Required.AllowNull)]
+        public object Aphoristically { get; set; }
+
+        [JsonProperty("apophyllous", Required = Required.AllowNull)]
+        public object Apophyllous { get; set; }
+
+        [JsonProperty("cognize", Required = Required.AllowNull)]
+        public object Cognize { get; set; }
+
+        [JsonProperty("dermonosology", Required = Required.AllowNull)]
+        public object Dermonosology { get; set; }
+
+        [JsonProperty("Gyppo", Required = Required.AllowNull)]
+        public object Gyppo { get; set; }
+
+        [JsonProperty("ither", Required = Required.AllowNull)]
+        public object Ither { get; set; }
+
+        [JsonProperty("juglandaceous", Required = Required.AllowNull)]
+        public object Juglandaceous { get; set; }
+
+        [JsonProperty("litho", Required = Required.AllowNull)]
+        public object Litho { get; set; }
+
+        [JsonProperty("macropterous", Required = Required.AllowNull)]
+        public object Macropterous { get; set; }
+
+        [JsonProperty("photographer", Required = Required.AllowNull)]
+        public object Photographer { get; set; }
+
+        [JsonProperty("romancing", Required = Required.AllowNull)]
+        public object Romancing { get; set; }
+
+        [JsonProperty("rumness", Required = Required.AllowNull)]
+        public object Rumness { get; set; }
+
+        [JsonProperty("somniloquist", Required = Required.AllowNull)]
+        public object Somniloquist { get; set; }
+
+        [JsonProperty("stressfully", Required = Required.AllowNull)]
+        public object Stressfully { get; set; }
+
+        [JsonProperty("tactically", Required = Required.AllowNull)]
+        public object Tactically { get; set; }
+
+        [JsonProperty("tracheophony", Required = Required.AllowNull)]
+        public object Tracheophony { get; set; }
+
+        [JsonProperty("unappositely", Required = Required.AllowNull)]
+        public object Unappositely { get; set; }
+
+        [JsonProperty("unclothedly", Required = Required.AllowNull)]
+        public object Unclothedly { get; set; }
+
+        [JsonProperty("unimplied", Required = Required.AllowNull)]
+        public object Unimplied { get; set; }
+
+        [JsonProperty("unsyncopated", Required = Required.AllowNull)]
+        public object Unsyncopated { get; set; }
+    }
+
+    public partial record QuebrachineClass
+    {
+        [JsonProperty("catharticalness", Required = Required.Always)]
+        public decimal Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.Always)]
+        public long Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.Always)]
+        public string Disdiapason { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.Always)]
+        public bool Homocerc { get; set; }
+
+        [JsonProperty("nonbookish", Required = Required.AllowNull)]
+        public object Nonbookish { get; set; }
+    }
+
+    public partial record Reimagine
+    {
+        [JsonProperty("adducible")]
+        public object? Adducible { get; set; }
+
+        [JsonProperty("anabolin")]
+        public object? Anabolin { get; set; }
+
+        [JsonProperty("brainy")]
+        public object? Brainy { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chrysamine")]
+        public object? Chrysamine { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("fluxweed")]
+        public object? Fluxweed { get; set; }
+
+        [JsonProperty("glaucine")]
+        public object? Glaucine { get; set; }
+
+        [JsonProperty("grobianism")]
+        public object? Grobianism { get; set; }
+
+        [JsonProperty("Hermo")]
+        public object? Hermo { get; set; }
+
+        [JsonProperty("hieroglyphist")]
+        public object? Hieroglyphist { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("icteroid")]
+        public object? Icteroid { get; set; }
+
+        [JsonProperty("immortal")]
+        public object? Immortal { get; set; }
+
+        [JsonProperty("impetulant")]
+        public object? Impetulant { get; set; }
+
+        [JsonProperty("irrigate")]
+        public object? Irrigate { get; set; }
+
+        [JsonProperty("myxedema")]
+        public object? Myxedema { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("onyx")]
+        public object? Onyx { get; set; }
+
+        [JsonProperty("repasser")]
+        public object? Repasser { get; set; }
+
+        [JsonProperty("septomarginal")]
+        public object? Septomarginal { get; set; }
+
+        [JsonProperty("subdie")]
+        public object? Subdie { get; set; }
+
+        [JsonProperty("tibiometatarsal")]
+        public object? Tibiometatarsal { get; set; }
+
+        [JsonProperty("waltzlike")]
+        public object? Waltzlike { get; set; }
+    }
+
+    public partial record Ressaut
+    {
+        [JsonProperty("apperceptive", Required = Required.Always)]
+        public string Apperceptive { get; set; }
+
+        [JsonProperty("cuttoo", Required = Required.Always)]
+        public string Cuttoo { get; set; }
+
+        [JsonProperty("douser", Required = Required.Always)]
+        public string Douser { get; set; }
+
+        [JsonProperty("drinkproof", Required = Required.Always)]
+        public string Drinkproof { get; set; }
+
+        [JsonProperty("forementioned", Required = Required.Always)]
+        public string Forementioned { get; set; }
+
+        [JsonProperty("Freesia", Required = Required.Always)]
+        public string Freesia { get; set; }
+
+        [JsonProperty("Genevieve", Required = Required.Always)]
+        public string Genevieve { get; set; }
+
+        [JsonProperty("hyperdiabolical", Required = Required.Always)]
+        public string Hyperdiabolical { get; set; }
+
+        [JsonProperty("hypocone", Required = Required.Always)]
+        public string Hypocone { get; set; }
+
+        [JsonProperty("irreverentially", Required = Required.Always)]
+        public string Irreverentially { get; set; }
+
+        [JsonProperty("jumart", Required = Required.Always)]
+        public string Jumart { get; set; }
+
+        [JsonProperty("Mimosaceae", Required = Required.Always)]
+        public string Mimosaceae { get; set; }
+
+        [JsonProperty("mollicrush", Required = Required.Always)]
+        public string Mollicrush { get; set; }
+
+        [JsonProperty("nedder", Required = Required.Always)]
+        public string Nedder { get; set; }
+
+        [JsonProperty("retinasphalt", Required = Required.Always)]
+        public string Retinasphalt { get; set; }
+
+        [JsonProperty("sough", Required = Required.Always)]
+        public string Sough { get; set; }
+
+        [JsonProperty("steading", Required = Required.Always)]
+        public string Steading { get; set; }
+
+        [JsonProperty("Theopaschitism", Required = Required.Always)]
+        public string Theopaschitism { get; set; }
+
+        [JsonProperty("undurableness", Required = Required.Always)]
+        public string Undurableness { get; set; }
+
+        [JsonProperty("unmingleable", Required = Required.Always)]
+        public string Unmingleable { get; set; }
+    }
+
+    public partial record RewriteClass
+    {
+        [JsonProperty("accountancy", Required = Required.AllowNull)]
+        public object Accountancy { get; set; }
+
+        [JsonProperty("cacotrophic", Required = Required.AllowNull)]
+        public object Cacotrophic { get; set; }
+
+        [JsonProperty("contest", Required = Required.AllowNull)]
+        public object Contest { get; set; }
+
+        [JsonProperty("couthily", Required = Required.AllowNull)]
+        public object Couthily { get; set; }
+
+        [JsonProperty("falculate", Required = Required.AllowNull)]
+        public object Falculate { get; set; }
+
+        [JsonProperty("foreseize", Required = Required.AllowNull)]
+        public object Foreseize { get; set; }
+
+        [JsonProperty("Hyades", Required = Required.AllowNull)]
+        public object Hyades { get; set; }
+
+        [JsonProperty("lemnad", Required = Required.AllowNull)]
+        public object Lemnad { get; set; }
+
+        [JsonProperty("monotheistically", Required = Required.AllowNull)]
+        public object Monotheistically { get; set; }
+
+        [JsonProperty("nonflying", Required = Required.AllowNull)]
+        public object Nonflying { get; set; }
+
+        [JsonProperty("Ptenoglossa", Required = Required.AllowNull)]
+        public object Ptenoglossa { get; set; }
+
+        [JsonProperty("repatch", Required = Required.AllowNull)]
+        public object Repatch { get; set; }
+
+        [JsonProperty("rodman", Required = Required.AllowNull)]
+        public object Rodman { get; set; }
+
+        [JsonProperty("strung", Required = Required.AllowNull)]
+        public object Strung { get; set; }
+
+        [JsonProperty("titmal", Required = Required.AllowNull)]
+        public object Titmal { get; set; }
+
+        [JsonProperty("twalpennyworth", Required = Required.AllowNull)]
+        public object Twalpennyworth { get; set; }
+
+        [JsonProperty("unblamable", Required = Required.AllowNull)]
+        public object Unblamable { get; set; }
+
+        [JsonProperty("vertical", Required = Required.AllowNull)]
+        public object Vertical { get; set; }
+
+        [JsonProperty("Whiggification", Required = Required.AllowNull)]
+        public object Whiggification { get; set; }
+
+        [JsonProperty("yardman", Required = Required.AllowNull)]
+        public object Yardman { get; set; }
+    }
+
+    public partial record SantirClass
+    {
+        [JsonProperty("admiredly", Required = Required.AllowNull)]
+        public object Admiredly { get; set; }
+
+        [JsonProperty("demicaponier", Required = Required.AllowNull)]
+        public object Demicaponier { get; set; }
+
+        [JsonProperty("epitympanic", Required = Required.AllowNull)]
+        public object Epitympanic { get; set; }
+
+        [JsonProperty("investitor", Required = Required.AllowNull)]
+        public object Investitor { get; set; }
+
+        [JsonProperty("lupiform", Required = Required.AllowNull)]
+        public object Lupiform { get; set; }
+
+        [JsonProperty("monoflagellate", Required = Required.AllowNull)]
+        public object Monoflagellate { get; set; }
+
+        [JsonProperty("paleoethnic", Required = Required.AllowNull)]
+        public object Paleoethnic { get; set; }
+
+        [JsonProperty("prediscountable", Required = Required.AllowNull)]
+        public object Prediscountable { get; set; }
+
+        [JsonProperty("rhetoricals", Required = Required.AllowNull)]
+        public object Rhetoricals { get; set; }
+
+        [JsonProperty("roomth", Required = Required.AllowNull)]
+        public object Roomth { get; set; }
+
+        [JsonProperty("saccharose", Required = Required.AllowNull)]
+        public object Saccharose { get; set; }
+
+        [JsonProperty("septonasal", Required = Required.AllowNull)]
+        public object Septonasal { get; set; }
+
+        [JsonProperty("serpenticide", Required = Required.AllowNull)]
+        public object Serpenticide { get; set; }
+
+        [JsonProperty("setarious", Required = Required.AllowNull)]
+        public object Setarious { get; set; }
+
+        [JsonProperty("spaework", Required = Required.AllowNull)]
+        public object Spaework { get; set; }
+
+        [JsonProperty("stylite", Required = Required.AllowNull)]
+        public object Stylite { get; set; }
+
+        [JsonProperty("Suessiones", Required = Required.AllowNull)]
+        public object Suessiones { get; set; }
+
+        [JsonProperty("timelily", Required = Required.AllowNull)]
+        public object Timelily { get; set; }
+
+        [JsonProperty("unprofaned", Required = Required.AllowNull)]
+        public object Unprofaned { get; set; }
+
+        [JsonProperty("vorticular", Required = Required.AllowNull)]
+        public object Vorticular { get; set; }
+    }
+
+    public partial record SaxtenClass
+    {
+        [JsonProperty("algarrobilla")]
+        public object? Algarrobilla { get; set; }
+
+        [JsonProperty("bowgrace")]
+        public object? Bowgrace { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Centaurid")]
+        public object? Centaurid { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("flix")]
+        public object? Flix { get; set; }
+
+        [JsonProperty("germanely")]
+        public object? Germanely { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("inhume")]
+        public object? Inhume { get; set; }
+
+        [JsonProperty("lepidote")]
+        public object? Lepidote { get; set; }
+
+        [JsonProperty("megalochirous")]
+        public object? Megalochirous { get; set; }
+
+        [JsonProperty("ninepenny")]
+        public object? Ninepenny { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("nondeist")]
+        public object? Nondeist { get; set; }
+
+        [JsonProperty("nymphaeaceous")]
+        public object? Nymphaeaceous { get; set; }
+
+        [JsonProperty("parietofrontal")]
+        public object? Parietofrontal { get; set; }
+
+        [JsonProperty("sancyite")]
+        public object? Sancyite { get; set; }
+
+        [JsonProperty("subjectivist")]
+        public object? Subjectivist { get; set; }
+
+        [JsonProperty("tibiad")]
+        public object? Tibiad { get; set; }
+
+        [JsonProperty("transonic")]
+        public object? Transonic { get; set; }
+
+        [JsonProperty("tripetalous")]
+        public object? Tripetalous { get; set; }
+
+        [JsonProperty("trunchman")]
+        public object? Trunchman { get; set; }
+
+        [JsonProperty("urger")]
+        public object? Urger { get; set; }
+
+        [JsonProperty("withdrawnness")]
+        public object? Withdrawnness { get; set; }
+    }
+
+    public partial record Scatty
+    {
+        [JsonProperty("aeriferous", Required = Required.AllowNull)]
+        public object Aeriferous { get; set; }
+
+        [JsonProperty("antical", Required = Required.AllowNull)]
+        public object Antical { get; set; }
+
+        [JsonProperty("antighostism", Required = Required.AllowNull)]
+        public object Antighostism { get; set; }
+
+        [JsonProperty("arcanum", Required = Required.AllowNull)]
+        public object Arcanum { get; set; }
+
+        [JsonProperty("autotrophy", Required = Required.AllowNull)]
+        public object Autotrophy { get; set; }
+
+        [JsonProperty("baronial", Required = Required.AllowNull)]
+        public object Baronial { get; set; }
+
+        [JsonProperty("caffeine", Required = Required.AllowNull)]
+        public object Caffeine { get; set; }
+
+        [JsonProperty("gorgoniacean", Required = Required.AllowNull)]
+        public object Gorgoniacean { get; set; }
+
+        [JsonProperty("heroical", Required = Required.AllowNull)]
+        public object Heroical { get; set; }
+
+        [JsonProperty("hydropical", Required = Required.AllowNull)]
+        public object Hydropical { get; set; }
+
+        [JsonProperty("mechanology", Required = Required.AllowNull)]
+        public object Mechanology { get; set; }
+
+        [JsonProperty("musicopoetic", Required = Required.AllowNull)]
+        public object Musicopoetic { get; set; }
+
+        [JsonProperty("officiality", Required = Required.AllowNull)]
+        public object Officiality { get; set; }
+
+        [JsonProperty("oftentimes", Required = Required.AllowNull)]
+        public object Oftentimes { get; set; }
+
+        [JsonProperty("ophthalmotonometer", Required = Required.AllowNull)]
+        public object Ophthalmotonometer { get; set; }
+
+        [JsonProperty("reflectively", Required = Required.AllowNull)]
+        public object Reflectively { get; set; }
+
+        [JsonProperty("springer", Required = Required.AllowNull)]
+        public object Springer { get; set; }
+
+        [JsonProperty("Tabasco", Required = Required.AllowNull)]
+        public object Tabasco { get; set; }
+
+        [JsonProperty("teleianthous", Required = Required.AllowNull)]
+        public object Teleianthous { get; set; }
+
+        [JsonProperty("uncombated", Required = Required.AllowNull)]
+        public object Uncombated { get; set; }
+    }
+
+    public partial record SisteringClass
+    {
+        [JsonProperty("amphicarpic", Required = Required.AllowNull)]
+        public object Amphicarpic { get; set; }
+
+        [JsonProperty("Chianti", Required = Required.AllowNull)]
+        public object Chianti { get; set; }
+
+        [JsonProperty("frigorific", Required = Required.AllowNull)]
+        public object Frigorific { get; set; }
+
+        [JsonProperty("Haplomi", Required = Required.AllowNull)]
+        public object Haplomi { get; set; }
+
+        [JsonProperty("hyperkinesis", Required = Required.AllowNull)]
+        public object Hyperkinesis { get; set; }
+
+        [JsonProperty("laudable", Required = Required.AllowNull)]
+        public object Laudable { get; set; }
+
+        [JsonProperty("madwoman", Required = Required.AllowNull)]
+        public object Madwoman { get; set; }
+
+        [JsonProperty("maimedly", Required = Required.AllowNull)]
+        public object Maimedly { get; set; }
+
+        [JsonProperty("Micropterygidae", Required = Required.AllowNull)]
+        public object Micropterygidae { get; set; }
+
+        [JsonProperty("microrhabdus", Required = Required.AllowNull)]
+        public object Microrhabdus { get; set; }
+
+        [JsonProperty("nondense", Required = Required.AllowNull)]
+        public object Nondense { get; set; }
+
+        [JsonProperty("phlebemphraxis", Required = Required.AllowNull)]
+        public object Phlebemphraxis { get; set; }
+
+        [JsonProperty("redsear", Required = Required.AllowNull)]
+        public object Redsear { get; set; }
+
+        [JsonProperty("schismatical", Required = Required.AllowNull)]
+        public object Schismatical { get; set; }
+
+        [JsonProperty("tartryl", Required = Required.AllowNull)]
+        public object Tartryl { get; set; }
+
+        [JsonProperty("unabhorred", Required = Required.AllowNull)]
+        public object Unabhorred { get; set; }
+
+        [JsonProperty("undeliberateness", Required = Required.AllowNull)]
+        public object Undeliberateness { get; set; }
+
+        [JsonProperty("unmixable", Required = Required.AllowNull)]
+        public object Unmixable { get; set; }
+
+        [JsonProperty("untruckling", Required = Required.AllowNull)]
+        public object Untruckling { get; set; }
+
+        [JsonProperty("vineal", Required = Required.AllowNull)]
+        public object Vineal { get; set; }
+    }
+
+    public partial record Staghunting
+    {
+        [JsonProperty("calorimetric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Calorimetric { get; set; }
+
+        [JsonProperty("canid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Canid { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ditriglyphic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ditriglyphic { get; set; }
+
+        [JsonProperty("floriferousness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Floriferousness { get; set; }
+
+        [JsonProperty("gamelike", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamelike { get; set; }
+
+        [JsonProperty("grig", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Grig { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("interloan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Interloan { get; set; }
+
+        [JsonProperty("lithotomy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lithotomy { get; set; }
+
+        [JsonProperty("loric", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Loric { get; set; }
+
+        [JsonProperty("membranocoriaceous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranocoriaceous { get; set; }
+
+        [JsonProperty("membranogenic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Membranogenic { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("overtrump", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Overtrump { get; set; }
+
+        [JsonProperty("scotino", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scotino { get; set; }
+
+        [JsonProperty("seasonable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seasonable { get; set; }
+
+        [JsonProperty("sephen", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sephen { get; set; }
+
+        [JsonProperty("stigmarioid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Stigmarioid { get; set; }
+
+        [JsonProperty("tired", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tired { get; set; }
+
+        [JsonProperty("trifid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Trifid { get; set; }
+
+        [JsonProperty("undefeatedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undefeatedly { get; set; }
+
+        [JsonProperty("ungirlish", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ungirlish { get; set; }
+    }
+
+    public partial record StrenuosityClass
+    {
+        [JsonProperty("bliss", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bliss { get; set; }
+
+        [JsonProperty("buccate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Buccate { get; set; }
+
+        [JsonProperty("bulletproof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bulletproof { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("crumblingness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Crumblingness { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("engagedly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Engagedly { get; set; }
+
+        [JsonProperty("fightable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Fightable { get; set; }
+
+        [JsonProperty("hoariness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hoariness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("hypopodium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Hypopodium { get; set; }
+
+        [JsonProperty("luxurist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Luxurist { get; set; }
+
+        [JsonProperty("mechanician", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mechanician { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("Onopordon", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Onopordon { get; set; }
+
+        [JsonProperty("podgily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Podgily { get; set; }
+
+        [JsonProperty("reformableness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Reformableness { get; set; }
+
+        [JsonProperty("scatterbrains", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Scatterbrains { get; set; }
+
+        [JsonProperty("seminuria", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Seminuria { get; set; }
+
+        [JsonProperty("Sodomite", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Sodomite { get; set; }
+
+        [JsonProperty("tramp", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tramp { get; set; }
+
+        [JsonProperty("undueness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Undueness { get; set; }
+
+        [JsonProperty("worthily", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Worthily { get; set; }
+
+        [JsonProperty("Yankeeist", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Yankeeist { get; set; }
+    }
+
+    public partial record TruantcyClass
+    {
+        [JsonProperty("alfiona")]
+        public object? Alfiona { get; set; }
+
+        [JsonProperty("ascaridiasis")]
+        public object? Ascaridiasis { get; set; }
+
+        [JsonProperty("bungey")]
+        public object? Bungey { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("ceroxyle")]
+        public object? Ceroxyle { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chorology")]
+        public object? Chorology { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("enmarble")]
+        public object? Enmarble { get; set; }
+
+        [JsonProperty("Epeira")]
+        public object? Epeira { get; set; }
+
+        [JsonProperty("Eurylaimi")]
+        public object? Eurylaimi { get; set; }
+
+        [JsonProperty("germination")]
+        public object? Germination { get; set; }
+
+        [JsonProperty("hallelujah")]
+        public object? Hallelujah { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("lev")]
+        public object? Lev { get; set; }
+
+        [JsonProperty("mouthing")]
+        public object? Mouthing { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("philliloo")]
+        public object? Philliloo { get; set; }
+
+        [JsonProperty("planetal")]
+        public object? Planetal { get; set; }
+
+        [JsonProperty("poney")]
+        public object? Poney { get; set; }
+
+        [JsonProperty("punctualist")]
+        public object? Punctualist { get; set; }
+
+        [JsonProperty("returnlessly")]
+        public object? Returnlessly { get; set; }
+
+        [JsonProperty("skelder")]
+        public object? Skelder { get; set; }
+
+        [JsonProperty("windwaywardly")]
+        public object? Windwaywardly { get; set; }
+
+        [JsonProperty("Yuman")]
+        public object? Yuman { get; set; }
+    }
+
+    public partial record UnimpeachablyClass
+    {
+        [JsonProperty("acerin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Acerin { get; set; }
+
+        [JsonProperty("Bobadil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Bobadil { get; set; }
+
+        [JsonProperty("catharticalness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public decimal? Catharticalness { get; set; }
+
+        [JsonProperty("Chirotherium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chirotherium { get; set; }
+
+        [JsonProperty("chlorophylligenous", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Chlorophylligenous { get; set; }
+
+        [JsonProperty("conversational", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Conversational { get; set; }
+
+        [JsonProperty("demiowl", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Demiowl { get; set; }
+
+        [JsonProperty("disdiapason", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Disdiapason { get; set; }
+
+        [JsonProperty("ectorhinal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ectorhinal { get; set; }
+
+        [JsonProperty("gamblesomeness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Gamblesomeness { get; set; }
+
+        [JsonProperty("homocerc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Homocerc { get; set; }
+
+        [JsonProperty("irrorate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Irrorate { get; set; }
+
+        [JsonProperty("kindergartening", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Kindergartening { get; set; }
+
+        [JsonProperty("lateritic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Lateritic { get; set; }
+
+        [JsonProperty("mespil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Mespil { get; set; }
+
+        [JsonProperty("misconfiguration", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Misconfiguration { get; set; }
+
+        [JsonProperty("nonbookish")]
+        public object? Nonbookish { get; set; }
+
+        [JsonProperty("planometry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Planometry { get; set; }
+
+        [JsonProperty("Quiina", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quiina { get; set; }
+
+        [JsonProperty("Robert", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Robert { get; set; }
+
+        [JsonProperty("rot", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Rot { get; set; }
+
+        [JsonProperty("subcinctorium", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Subcinctorium { get; set; }
+
+        [JsonProperty("tussocker", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Tussocker { get; set; }
+
+        [JsonProperty("ultraproud", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Ultraproud { get; set; }
+
+        [JsonProperty("unsuggestedness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Unsuggestedness { get; set; }
+    }
+
+    public partial record UnstressedClass
+    {
+        [JsonProperty("Alain", Required = Required.AllowNull)]
+        public object Alain { get; set; }
+
+        [JsonProperty("Amphirhina", Required = Required.AllowNull)]
+        public object Amphirhina { get; set; }
+
+        [JsonProperty("antimachinery", Required = Required.AllowNull)]
+        public object Antimachinery { get; set; }
+
+        [JsonProperty("coldish", Required = Required.AllowNull)]
+        public object Coldish { get; set; }
+
+        [JsonProperty("crantara", Required = Required.AllowNull)]
+        public object Crantara { get; set; }
+
+        [JsonProperty("distinguishing", Required = Required.AllowNull)]
+        public object Distinguishing { get; set; }
+
+        [JsonProperty("elytroposis", Required = Required.AllowNull)]
+        public object Elytroposis { get; set; }
+
+        [JsonProperty("gentianwort", Required = Required.AllowNull)]
+        public object Gentianwort { get; set; }
+
+        [JsonProperty("heliosis", Required = Required.AllowNull)]
+        public object Heliosis { get; set; }
+
+        [JsonProperty("instrumental", Required = Required.AllowNull)]
+        public object Instrumental { get; set; }
+
+        [JsonProperty("introinflection", Required = Required.AllowNull)]
+        public object Introinflection { get; set; }
+
+        [JsonProperty("kala", Required = Required.AllowNull)]
+        public object Kala { get; set; }
+
+        [JsonProperty("Lincolnian", Required = Required.AllowNull)]
+        public object Lincolnian { get; set; }
+
+        [JsonProperty("metad", Required = Required.AllowNull)]
+        public object Metad { get; set; }
+
+        [JsonProperty("Sarcophilus", Required = Required.AllowNull)]
+        public object Sarcophilus { get; set; }
+
+        [JsonProperty("swingingly", Required = Required.AllowNull)]
+        public object Swingingly { get; set; }
+
+        [JsonProperty("unconformity", Required = Required.AllowNull)]
+        public object Unconformity { get; set; }
+
+        [JsonProperty("undecreed", Required = Required.AllowNull)]
+        public object Undecreed { get; set; }
+
+        [JsonProperty("venerable", Required = Required.AllowNull)]
+        public object Venerable { get; set; }
+
+        [JsonProperty("vowellessness", Required = Required.AllowNull)]
+        public object Vowellessness { get; set; }
+    }
+
+    public partial record WrothyClass
+    {
+        [JsonProperty("Aeschynanthus", Required = Required.AllowNull)]
+        public object Aeschynanthus { get; set; }
+
+        [JsonProperty("aquiferous", Required = Required.AllowNull)]
+        public object Aquiferous { get; set; }
+
+        [JsonProperty("cheapener", Required = Required.AllowNull)]
+        public object Cheapener { get; set; }
+
+        [JsonProperty("enumeration", Required = Required.AllowNull)]
+        public object Enumeration { get; set; }
+
+        [JsonProperty("Ephesine", Required = Required.AllowNull)]
+        public object Ephesine { get; set; }
+
+        [JsonProperty("escadrille", Required = Required.AllowNull)]
+        public object Escadrille { get; set; }
+
+        [JsonProperty("estrous", Required = Required.AllowNull)]
+        public object Estrous { get; set; }
+
+        [JsonProperty("interestedly", Required = Required.AllowNull)]
+        public object Interestedly { get; set; }
+
+        [JsonProperty("katakinetomer", Required = Required.AllowNull)]
+        public object Katakinetomer { get; set; }
+
+        [JsonProperty("mortification", Required = Required.AllowNull)]
+        public object Mortification { get; set; }
+
+        [JsonProperty("morula", Required = Required.AllowNull)]
+        public object Morula { get; set; }
+
+        [JsonProperty("orthosymmetrical", Required = Required.AllowNull)]
+        public object Orthosymmetrical { get; set; }
+
+        [JsonProperty("overbark", Required = Required.AllowNull)]
+        public object Overbark { get; set; }
+
+        [JsonProperty("politist", Required = Required.AllowNull)]
+        public object Politist { get; set; }
+
+        [JsonProperty("qualified", Required = Required.AllowNull)]
+        public object Qualified { get; set; }
+
+        [JsonProperty("sphenomalar", Required = Required.AllowNull)]
+        public object Sphenomalar { get; set; }
+
+        [JsonProperty("throatful", Required = Required.AllowNull)]
+        public object Throatful { get; set; }
+
+        [JsonProperty("transhumance", Required = Required.AllowNull)]
+        public object Transhumance { get; set; }
+
+        [JsonProperty("triandrian", Required = Required.AllowNull)]
+        public object Triandrian { get; set; }
+
+        [JsonProperty("unbooked", Required = Required.AllowNull)]
+        public object Unbooked { get; set; }
+    }
+
+    public partial struct Protrusive
+    {
+        public decimal? Double;
+        public long?[]? UnionArray;
+
+        public static implicit operator Protrusive(decimal Double) => new Protrusive { Double = Double };
+        public static implicit operator Protrusive(long?[] UnionArray) => new Protrusive { UnionArray = UnionArray };
+    }
+
+    public partial struct PulpitismElement
+    {
+        public decimal? Double;
+        public long[]? IntegerArray;
+        public PulpitismClass? PulpitismClass;
+
+        public static implicit operator PulpitismElement(decimal Double) => new PulpitismElement { Double = Double };
+        public static implicit operator PulpitismElement(long[] IntegerArray) => new PulpitismElement { IntegerArray = IntegerArray };
+        public static implicit operator PulpitismElement(PulpitismClass PulpitismClass) => new PulpitismElement { PulpitismClass = PulpitismClass };
+    }
+
+    public partial struct PyodermiaElement
+    {
+        public long? Integer;
+        public PyodermiaClass? PyodermiaClass;
+
+        public static implicit operator PyodermiaElement(long Integer) => new PyodermiaElement { Integer = Integer };
+        public static implicit operator PyodermiaElement(PyodermiaClass PyodermiaClass) => new PyodermiaElement { PyodermiaClass = PyodermiaClass };
+    }
+
+    public partial struct QuebrachineElement
+    {
+        public bool? Bool;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator QuebrachineElement(bool Bool) => new QuebrachineElement { Bool = Bool };
+        public static implicit operator QuebrachineElement(QuebrachineClass QuebrachineClass) => new QuebrachineElement { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => Bool == null && QuebrachineClass == null;
+    }
+
+    public partial struct Querier
+    {
+        public bool? Bool;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Querier(bool Bool) => new Querier { Bool = Bool };
+        public static implicit operator Querier(Dictionary<string, long> IntegerMap) => new Querier { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Rebarbative
+    {
+        public bool? Bool;
+        public decimal? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Rebarbative(bool Bool) => new Rebarbative { Bool = Bool };
+        public static implicit operator Rebarbative(decimal Double) => new Rebarbative { Double = Double };
+        public static implicit operator Rebarbative(long[] IntegerArray) => new Rebarbative { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Retrocervical
+    {
+        public long? Integer;
+        public long?[]? UnionArray;
+
+        public static implicit operator Retrocervical(long Integer) => new Retrocervical { Integer = Integer };
+        public static implicit operator Retrocervical(long?[] UnionArray) => new Retrocervical { UnionArray = UnionArray };
+    }
+
+    public partial struct Revert
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Revert(bool Bool) => new Revert { Bool = Bool };
+        public static implicit operator Revert(string String) => new Revert { String = String };
+    }
+
+    public partial struct RewriteElement
+    {
+        public decimal? Double;
+        public object[]? NullArray;
+        public RewriteClass? RewriteClass;
+
+        public static implicit operator RewriteElement(decimal Double) => new RewriteElement { Double = Double };
+        public static implicit operator RewriteElement(object[] NullArray) => new RewriteElement { NullArray = NullArray };
+        public static implicit operator RewriteElement(RewriteClass RewriteClass) => new RewriteElement { RewriteClass = RewriteClass };
+    }
+
+    public partial struct Saccoderm
+    {
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator Saccoderm(long[] IntegerArray) => new Saccoderm { IntegerArray = IntegerArray };
+        public static implicit operator Saccoderm(string String) => new Saccoderm { String = String };
+        public bool IsNull => IntegerArray == null && String == null;
+    }
+
+    public partial struct SantirElement
+    {
+        public decimal? Double;
+        public SantirClass? SantirClass;
+
+        public static implicit operator SantirElement(decimal Double) => new SantirElement { Double = Double };
+        public static implicit operator SantirElement(SantirClass SantirClass) => new SantirElement { SantirClass = SantirClass };
+    }
+
+    public partial struct Saprophilous
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Saprophilous(Dictionary<string, long> IntegerMap) => new Saprophilous { IntegerMap = IntegerMap };
+        public static implicit operator Saprophilous(string String) => new Saprophilous { String = String };
+        public bool IsNull => IntegerMap == null && String == null;
+    }
+
+    public partial struct SaxtenElement
+    {
+        public SaxtenClass? SaxtenClass;
+        public string? String;
+
+        public static implicit operator SaxtenElement(SaxtenClass SaxtenClass) => new SaxtenElement { SaxtenClass = SaxtenClass };
+        public static implicit operator SaxtenElement(string String) => new SaxtenElement { String = String };
+    }
+
+    public partial struct Scoffer
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Scoffer(Dictionary<string, long> IntegerMap) => new Scoffer { IntegerMap = IntegerMap };
+        public static implicit operator Scoffer(object[] NullArray) => new Scoffer { NullArray = NullArray };
+        public bool IsNull => NullArray == null && IntegerMap == null;
+    }
+
+    public partial struct Scrampum
+    {
+        public bool? Bool;
+        public long[]? IntegerArray;
+
+        public static implicit operator Scrampum(bool Bool) => new Scrampum { Bool = Bool };
+        public static implicit operator Scrampum(long[] IntegerArray) => new Scrampum { IntegerArray = IntegerArray };
+        public bool IsNull => IntegerArray == null && Bool == null;
+    }
+
+    public partial struct Serpentinic
+    {
+        public decimal? Double;
+        public long[]? IntegerArray;
+
+        public static implicit operator Serpentinic(decimal Double) => new Serpentinic { Double = Double };
+        public static implicit operator Serpentinic(long[] IntegerArray) => new Serpentinic { IntegerArray = IntegerArray };
+    }
+
+    public partial struct Shadowable
+    {
+        public bool? Bool;
+        public long?[]? UnionArray;
+
+        public static implicit operator Shadowable(bool Bool) => new Shadowable { Bool = Bool };
+        public static implicit operator Shadowable(long?[] UnionArray) => new Shadowable { UnionArray = UnionArray };
+    }
+
+    public partial struct SisteringElement
+    {
+        public long? Integer;
+        public object[]? NullArray;
+        public SisteringClass? SisteringClass;
+
+        public static implicit operator SisteringElement(long Integer) => new SisteringElement { Integer = Integer };
+        public static implicit operator SisteringElement(object[] NullArray) => new SisteringElement { NullArray = NullArray };
+        public static implicit operator SisteringElement(SisteringClass SisteringClass) => new SisteringElement { SisteringClass = SisteringClass };
+    }
+
+    public partial struct Stagmometer
+    {
+        public string? String;
+        public long?[]? UnionArray;
+
+        public static implicit operator Stagmometer(string String) => new Stagmometer { String = String };
+        public static implicit operator Stagmometer(long?[] UnionArray) => new Stagmometer { UnionArray = UnionArray };
+    }
+
+    public partial struct Stimulability
+    {
+        public bool? Bool;
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Stimulability(bool Bool) => new Stimulability { Bool = Bool };
+        public static implicit operator Stimulability(long Integer) => new Stimulability { Integer = Integer };
+        public static implicit operator Stimulability(Dictionary<string, long> IntegerMap) => new Stimulability { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Strangleable
+    {
+        public decimal? Double;
+        public object[]? NullArray;
+
+        public static implicit operator Strangleable(decimal Double) => new Strangleable { Double = Double };
+        public static implicit operator Strangleable(object[] NullArray) => new Strangleable { NullArray = NullArray };
+    }
+
+    public partial struct StrenuosityElement
+    {
+        public object[]? NullArray;
+        public StrenuosityClass? StrenuosityClass;
+
+        public static implicit operator StrenuosityElement(object[] NullArray) => new StrenuosityElement { NullArray = NullArray };
+        public static implicit operator StrenuosityElement(StrenuosityClass StrenuosityClass) => new StrenuosityElement { StrenuosityClass = StrenuosityClass };
+    }
+
+    public partial struct Tabaxir
+    {
+        public bool? Bool;
+        public decimal? Double;
+
+        public static implicit operator Tabaxir(bool Bool) => new Tabaxir { Bool = Bool };
+        public static implicit operator Tabaxir(decimal Double) => new Tabaxir { Double = Double };
+    }
+
+    public partial struct Talpiform
+    {
+        public decimal? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Talpiform(decimal Double) => new Talpiform { Double = Double };
+        public static implicit operator Talpiform(QuebrachineClass QuebrachineClass) => new Talpiform { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Double == null;
+    }
+
+    public partial struct Thwack
+    {
+        public bool? Bool;
+        public decimal? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Thwack(bool Bool) => new Thwack { Bool = Bool };
+        public static implicit operator Thwack(decimal Double) => new Thwack { Double = Double };
+        public static implicit operator Thwack(QuebrachineClass QuebrachineClass) => new Thwack { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct Tortricine
+    {
+        public QuebrachineClass? QuebrachineClass;
+        public long?[]? UnionArray;
+
+        public static implicit operator Tortricine(QuebrachineClass QuebrachineClass) => new Tortricine { QuebrachineClass = QuebrachineClass };
+        public static implicit operator Tortricine(long?[] UnionArray) => new Tortricine { UnionArray = UnionArray };
+    }
+
+    public partial struct TruantcyElement
+    {
+        public bool? Bool;
+        public TruantcyClass? TruantcyClass;
+
+        public static implicit operator TruantcyElement(bool Bool) => new TruantcyElement { Bool = Bool };
+        public static implicit operator TruantcyElement(TruantcyClass TruantcyClass) => new TruantcyElement { TruantcyClass = TruantcyClass };
+    }
+
+    public partial struct Unbeginning
+    {
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Unbeginning(Dictionary<string, long> IntegerMap) => new Unbeginning { IntegerMap = IntegerMap };
+        public static implicit operator Unbeginning(object[] NullArray) => new Unbeginning { NullArray = NullArray };
+        public static implicit operator Unbeginning(string String) => new Unbeginning { String = String };
+    }
+
+    public partial struct Undesirability
+    {
+        public long[]? IntegerArray;
+        public Dictionary<string, long>? IntegerMap;
+        public string? String;
+
+        public static implicit operator Undesirability(long[] IntegerArray) => new Undesirability { IntegerArray = IntegerArray };
+        public static implicit operator Undesirability(Dictionary<string, long> IntegerMap) => new Undesirability { IntegerMap = IntegerMap };
+        public static implicit operator Undesirability(string String) => new Undesirability { String = String };
+    }
+
+    public partial struct Unerasing
+    {
+        public long? Integer;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Unerasing(long Integer) => new Unerasing { Integer = Integer };
+        public static implicit operator Unerasing(Dictionary<string, long> IntegerMap) => new Unerasing { IntegerMap = IntegerMap };
+        public static implicit operator Unerasing(object[] NullArray) => new Unerasing { NullArray = NullArray };
+    }
+
+    public partial struct Unguentarium
+    {
+        public long? Integer;
+        public object[]? NullArray;
+
+        public static implicit operator Unguentarium(long Integer) => new Unguentarium { Integer = Integer };
+        public static implicit operator Unguentarium(object[] NullArray) => new Unguentarium { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Integer == null;
+    }
+
+    public partial struct UnimpeachablyElement
+    {
+        public bool? Bool;
+        public UnimpeachablyClass? UnimpeachablyClass;
+
+        public static implicit operator UnimpeachablyElement(bool Bool) => new UnimpeachablyElement { Bool = Bool };
+        public static implicit operator UnimpeachablyElement(UnimpeachablyClass UnimpeachablyClass) => new UnimpeachablyElement { UnimpeachablyClass = UnimpeachablyClass };
+    }
+
+    public partial struct Unmortgaged
+    {
+        public decimal? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unmortgaged(decimal Double) => new Unmortgaged { Double = Double };
+        public static implicit operator Unmortgaged(Dictionary<string, long> IntegerMap) => new Unmortgaged { IntegerMap = IntegerMap };
+        public bool IsNull => Double == null && IntegerMap == null;
+    }
+
+    public partial struct Unobstructed
+    {
+        public long? Integer;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Unobstructed(long Integer) => new Unobstructed { Integer = Integer };
+        public static implicit operator Unobstructed(QuebrachineClass QuebrachineClass) => new Unobstructed { QuebrachineClass = QuebrachineClass };
+        public bool IsNull => QuebrachineClass == null && Integer == null;
+    }
+
+    public partial struct Unreceptivity
+    {
+        public long? Integer;
+        public object[]? NullArray;
+        public string? String;
+
+        public static implicit operator Unreceptivity(long Integer) => new Unreceptivity { Integer = Integer };
+        public static implicit operator Unreceptivity(object[] NullArray) => new Unreceptivity { NullArray = NullArray };
+        public static implicit operator Unreceptivity(string String) => new Unreceptivity { String = String };
+    }
+
+    public partial struct Unsatisfactoriness
+    {
+        public bool? Bool;
+        public long? Integer;
+        public long[]? IntegerArray;
+
+        public static implicit operator Unsatisfactoriness(bool Bool) => new Unsatisfactoriness { Bool = Bool };
+        public static implicit operator Unsatisfactoriness(long Integer) => new Unsatisfactoriness { Integer = Integer };
+        public static implicit operator Unsatisfactoriness(long[] IntegerArray) => new Unsatisfactoriness { IntegerArray = IntegerArray };
+    }
+
+    public partial struct UnstressedElement
+    {
+        public bool? Bool;
+        public string? String;
+        public UnstressedClass? UnstressedClass;
+
+        public static implicit operator UnstressedElement(bool Bool) => new UnstressedElement { Bool = Bool };
+        public static implicit operator UnstressedElement(string String) => new UnstressedElement { String = String };
+        public static implicit operator UnstressedElement(UnstressedClass UnstressedClass) => new UnstressedElement { UnstressedClass = UnstressedClass };
+    }
+
+    public partial struct Untasked
+    {
+        public decimal? Double;
+        public Dictionary<string, long>? IntegerMap;
+        public object[]? NullArray;
+
+        public static implicit operator Untasked(decimal Double) => new Untasked { Double = Double };
+        public static implicit operator Untasked(Dictionary<string, long> IntegerMap) => new Untasked { IntegerMap = IntegerMap };
+        public static implicit operator Untasked(object[] NullArray) => new Untasked { NullArray = NullArray };
+    }
+
+    public partial struct Unvarying
+    {
+        public bool? Bool;
+        public decimal? Double;
+        public Dictionary<string, long>? IntegerMap;
+
+        public static implicit operator Unvarying(bool Bool) => new Unvarying { Bool = Bool };
+        public static implicit operator Unvarying(decimal Double) => new Unvarying { Double = Double };
+        public static implicit operator Unvarying(Dictionary<string, long> IntegerMap) => new Unvarying { IntegerMap = IntegerMap };
+    }
+
+    public partial struct Vehemently
+    {
+        public bool? Bool;
+        public object[]? NullArray;
+
+        public static implicit operator Vehemently(bool Bool) => new Vehemently { Bool = Bool };
+        public static implicit operator Vehemently(object[] NullArray) => new Vehemently { NullArray = NullArray };
+        public bool IsNull => NullArray == null && Bool == null;
+    }
+
+    public partial struct Whitepot
+    {
+        public decimal? Double;
+        public QuebrachineClass? QuebrachineClass;
+
+        public static implicit operator Whitepot(decimal Double) => new Whitepot { Double = Double };
+        public static implicit operator Whitepot(QuebrachineClass QuebrachineClass) => new Whitepot { QuebrachineClass = QuebrachineClass };
+    }
+
+    public partial struct WrothyElement
+    {
+        public object[]? NullArray;
+        public WrothyClass? WrothyClass;
+
+        public static implicit operator WrothyElement(object[] NullArray) => new WrothyElement { NullArray = NullArray };
+        public static implicit operator WrothyElement(WrothyClass WrothyClass) => new WrothyElement { WrothyClass = WrothyClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ProtrusiveConverter.Singleton,
+                PulpitismElementConverter.Singleton,
+                PyodermiaElementConverter.Singleton,
+                QuebrachineElementConverter.Singleton,
+                QuerierConverter.Singleton,
+                RebarbativeConverter.Singleton,
+                RetrocervicalConverter.Singleton,
+                RevertConverter.Singleton,
+                RewriteElementConverter.Singleton,
+                SaccodermConverter.Singleton,
+                SantirElementConverter.Singleton,
+                SaprophilousConverter.Singleton,
+                SaxtenElementConverter.Singleton,
+                ScofferConverter.Singleton,
+                ScrampumConverter.Singleton,
+                SerpentinicConverter.Singleton,
+                ShadowableConverter.Singleton,
+                SisteringElementConverter.Singleton,
+                StagmometerConverter.Singleton,
+                StimulabilityConverter.Singleton,
+                StrangleableConverter.Singleton,
+                StrenuosityElementConverter.Singleton,
+                TabaxirConverter.Singleton,
+                TalpiformConverter.Singleton,
+                ThwackConverter.Singleton,
+                TortricineConverter.Singleton,
+                TruantcyElementConverter.Singleton,
+                UnbeginningConverter.Singleton,
+                UndesirabilityConverter.Singleton,
+                UnerasingConverter.Singleton,
+                UnguentariumConverter.Singleton,
+                UnimpeachablyElementConverter.Singleton,
+                UnmortgagedConverter.Singleton,
+                UnobstructedConverter.Singleton,
+                UnreceptivityConverter.Singleton,
+                UnsatisfactorinessConverter.Singleton,
+                UnstressedElementConverter.Singleton,
+                UntaskedConverter.Singleton,
+                UnvaryingConverter.Singleton,
+                VehementlyConverter.Singleton,
+                WhitepotConverter.Singleton,
+                WrothyElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ProtrusiveConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Protrusive) || t == typeof(Protrusive?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Protrusive { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Protrusive { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Protrusive");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Protrusive)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Protrusive");
+        }
+
+        public static readonly ProtrusiveConverter Singleton = new ProtrusiveConverter();
+    }
+
+    internal class PulpitismElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PulpitismElement) || t == typeof(PulpitismElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new PulpitismElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PulpitismClass>(reader);
+                    return new PulpitismElement { PulpitismClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new PulpitismElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type PulpitismElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PulpitismElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.PulpitismClass != null)
+            {
+                serializer.Serialize(writer, value.PulpitismClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PulpitismElement");
+        }
+
+        public static readonly PulpitismElementConverter Singleton = new PulpitismElementConverter();
+    }
+
+    internal class PyodermiaElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PyodermiaElement) || t == typeof(PyodermiaElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new PyodermiaElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PyodermiaClass>(reader);
+                    return new PyodermiaElement { PyodermiaClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type PyodermiaElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (PyodermiaElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.PyodermiaClass != null)
+            {
+                serializer.Serialize(writer, value.PyodermiaClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type PyodermiaElement");
+        }
+
+        public static readonly PyodermiaElementConverter Singleton = new PyodermiaElementConverter();
+    }
+
+    internal class QuebrachineElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(QuebrachineElement) || t == typeof(QuebrachineElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new QuebrachineElement { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new QuebrachineElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new QuebrachineElement { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type QuebrachineElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (QuebrachineElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type QuebrachineElement");
+        }
+
+        public static readonly QuebrachineElementConverter Singleton = new QuebrachineElementConverter();
+    }
+
+    internal class QuerierConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Querier) || t == typeof(Querier?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Querier { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Querier { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Querier");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Querier)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Querier");
+        }
+
+        public static readonly QuerierConverter Singleton = new QuerierConverter();
+    }
+
+    internal class RebarbativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Rebarbative) || t == typeof(Rebarbative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Rebarbative { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Rebarbative { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Rebarbative { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Rebarbative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Rebarbative)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Rebarbative");
+        }
+
+        public static readonly RebarbativeConverter Singleton = new RebarbativeConverter();
+    }
+
+    internal class RetrocervicalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Retrocervical) || t == typeof(Retrocervical?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Retrocervical { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Retrocervical { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Retrocervical");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Retrocervical)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Retrocervical");
+        }
+
+        public static readonly RetrocervicalConverter Singleton = new RetrocervicalConverter();
+    }
+
+    internal class RevertConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Revert) || t == typeof(Revert?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Revert { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Revert { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Revert");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Revert)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Revert");
+        }
+
+        public static readonly RevertConverter Singleton = new RevertConverter();
+    }
+
+    internal class RewriteElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RewriteElement) || t == typeof(RewriteElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new RewriteElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<RewriteClass>(reader);
+                    return new RewriteElement { RewriteClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new RewriteElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type RewriteElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RewriteElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.RewriteClass != null)
+            {
+                serializer.Serialize(writer, value.RewriteClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type RewriteElement");
+        }
+
+        public static readonly RewriteElementConverter Singleton = new RewriteElementConverter();
+    }
+
+    internal class SaccodermConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saccoderm) || t == typeof(Saccoderm?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saccoderm { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saccoderm { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Saccoderm { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Saccoderm");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saccoderm)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saccoderm");
+        }
+
+        public static readonly SaccodermConverter Singleton = new SaccodermConverter();
+    }
+
+    internal class SantirElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SantirElement) || t == typeof(SantirElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new SantirElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SantirClass>(reader);
+                    return new SantirElement { SantirClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SantirElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SantirElement)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.SantirClass != null)
+            {
+                serializer.Serialize(writer, value.SantirClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SantirElement");
+        }
+
+        public static readonly SantirElementConverter Singleton = new SantirElementConverter();
+    }
+
+    internal class SaprophilousConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Saprophilous) || t == typeof(Saprophilous?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Saprophilous { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Saprophilous { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Saprophilous { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Saprophilous");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Saprophilous)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Saprophilous");
+        }
+
+        public static readonly SaprophilousConverter Singleton = new SaprophilousConverter();
+    }
+
+    internal class SaxtenElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SaxtenElement) || t == typeof(SaxtenElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new SaxtenElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SaxtenClass>(reader);
+                    return new SaxtenElement { SaxtenClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SaxtenElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SaxtenElement)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.SaxtenClass != null)
+            {
+                serializer.Serialize(writer, value.SaxtenClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SaxtenElement");
+        }
+
+        public static readonly SaxtenElementConverter Singleton = new SaxtenElementConverter();
+    }
+
+    internal class ScofferConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scoffer) || t == typeof(Scoffer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scoffer { };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Scoffer { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Scoffer { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scoffer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scoffer)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scoffer");
+        }
+
+        public static readonly ScofferConverter Singleton = new ScofferConverter();
+    }
+
+    internal class ScrampumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scrampum) || t == typeof(Scrampum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Scrampum { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Scrampum { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Scrampum { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Scrampum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scrampum)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scrampum");
+        }
+
+        public static readonly ScrampumConverter Singleton = new ScrampumConverter();
+    }
+
+    internal class SerpentinicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Serpentinic) || t == typeof(Serpentinic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Serpentinic { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Serpentinic { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Serpentinic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Serpentinic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Serpentinic");
+        }
+
+        public static readonly SerpentinicConverter Singleton = new SerpentinicConverter();
+    }
+
+    internal class ShadowableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shadowable) || t == typeof(Shadowable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Shadowable { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Shadowable { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Shadowable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Shadowable)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Shadowable");
+        }
+
+        public static readonly ShadowableConverter Singleton = new ShadowableConverter();
+    }
+
+    internal class SisteringElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SisteringElement) || t == typeof(SisteringElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new SisteringElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SisteringClass>(reader);
+                    return new SisteringElement { SisteringClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new SisteringElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type SisteringElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SisteringElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.SisteringClass != null)
+            {
+                serializer.Serialize(writer, value.SisteringClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type SisteringElement");
+        }
+
+        public static readonly SisteringElementConverter Singleton = new SisteringElementConverter();
+    }
+
+    internal class StagmometerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stagmometer) || t == typeof(Stagmometer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Stagmometer { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Stagmometer { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Stagmometer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stagmometer)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stagmometer");
+        }
+
+        public static readonly StagmometerConverter Singleton = new StagmometerConverter();
+    }
+
+    internal class StimulabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Stimulability) || t == typeof(Stimulability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Stimulability { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Stimulability { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Stimulability { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Stimulability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Stimulability)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Stimulability");
+        }
+
+        public static readonly StimulabilityConverter Singleton = new StimulabilityConverter();
+    }
+
+    internal class StrangleableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Strangleable) || t == typeof(Strangleable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Strangleable { Double = doubleValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Strangleable { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Strangleable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Strangleable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Strangleable");
+        }
+
+        public static readonly StrangleableConverter Singleton = new StrangleableConverter();
+    }
+
+    internal class StrenuosityElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(StrenuosityElement) || t == typeof(StrenuosityElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<StrenuosityClass>(reader);
+                    return new StrenuosityElement { StrenuosityClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new StrenuosityElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type StrenuosityElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (StrenuosityElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.StrenuosityClass != null)
+            {
+                serializer.Serialize(writer, value.StrenuosityClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type StrenuosityElement");
+        }
+
+        public static readonly StrenuosityElementConverter Singleton = new StrenuosityElementConverter();
+    }
+
+    internal class TabaxirConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tabaxir) || t == typeof(Tabaxir?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Tabaxir { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Tabaxir { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Tabaxir");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tabaxir)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tabaxir");
+        }
+
+        public static readonly TabaxirConverter Singleton = new TabaxirConverter();
+    }
+
+    internal class TalpiformConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Talpiform) || t == typeof(Talpiform?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Talpiform { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Talpiform { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Talpiform { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Talpiform");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Talpiform)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Talpiform");
+        }
+
+        public static readonly TalpiformConverter Singleton = new TalpiformConverter();
+    }
+
+    internal class ThwackConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Thwack) || t == typeof(Thwack?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Thwack { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Thwack { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Thwack { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Thwack");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Thwack)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Thwack");
+        }
+
+        public static readonly ThwackConverter Singleton = new ThwackConverter();
+    }
+
+    internal class TortricineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tortricine) || t == typeof(Tortricine?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Tortricine { QuebrachineClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long?[]>(reader);
+                    return new Tortricine { UnionArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Tortricine");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tortricine)untypedValue;
+            if (value.UnionArray != null)
+            {
+                serializer.Serialize(writer, value.UnionArray);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tortricine");
+        }
+
+        public static readonly TortricineConverter Singleton = new TortricineConverter();
+    }
+
+    internal class TruantcyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TruantcyElement) || t == typeof(TruantcyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new TruantcyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TruantcyClass>(reader);
+                    return new TruantcyElement { TruantcyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type TruantcyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TruantcyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.TruantcyClass != null)
+            {
+                serializer.Serialize(writer, value.TruantcyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type TruantcyElement");
+        }
+
+        public static readonly TruantcyElementConverter Singleton = new TruantcyElementConverter();
+    }
+
+    internal class UnbeginningConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unbeginning) || t == typeof(Unbeginning?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unbeginning { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unbeginning { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unbeginning { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unbeginning");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unbeginning)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unbeginning");
+        }
+
+        public static readonly UnbeginningConverter Singleton = new UnbeginningConverter();
+    }
+
+    internal class UndesirabilityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Undesirability) || t == typeof(Undesirability?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Undesirability { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Undesirability { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Undesirability { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Undesirability");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Undesirability)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Undesirability");
+        }
+
+        public static readonly UndesirabilityConverter Singleton = new UndesirabilityConverter();
+    }
+
+    internal class UnerasingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unerasing) || t == typeof(Unerasing?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unerasing { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unerasing { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unerasing { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unerasing");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unerasing)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unerasing");
+        }
+
+        public static readonly UnerasingConverter Singleton = new UnerasingConverter();
+    }
+
+    internal class UnguentariumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unguentarium) || t == typeof(Unguentarium?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unguentarium { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unguentarium { Integer = integerValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unguentarium { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unguentarium");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unguentarium)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unguentarium");
+        }
+
+        public static readonly UnguentariumConverter Singleton = new UnguentariumConverter();
+    }
+
+    internal class UnimpeachablyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnimpeachablyElement) || t == typeof(UnimpeachablyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnimpeachablyElement { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnimpeachablyClass>(reader);
+                    return new UnimpeachablyElement { UnimpeachablyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnimpeachablyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnimpeachablyElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.UnimpeachablyClass != null)
+            {
+                serializer.Serialize(writer, value.UnimpeachablyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnimpeachablyElement");
+        }
+
+        public static readonly UnimpeachablyElementConverter Singleton = new UnimpeachablyElementConverter();
+    }
+
+    internal class UnmortgagedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unmortgaged) || t == typeof(Unmortgaged?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unmortgaged { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Unmortgaged { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unmortgaged { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unmortgaged");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unmortgaged)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unmortgaged");
+        }
+
+        public static readonly UnmortgagedConverter Singleton = new UnmortgagedConverter();
+    }
+
+    internal class UnobstructedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unobstructed) || t == typeof(Unobstructed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Unobstructed { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unobstructed { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Unobstructed { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unobstructed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unobstructed)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unobstructed");
+        }
+
+        public static readonly UnobstructedConverter Singleton = new UnobstructedConverter();
+    }
+
+    internal class UnreceptivityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unreceptivity) || t == typeof(Unreceptivity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unreceptivity { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Unreceptivity { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Unreceptivity { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unreceptivity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unreceptivity)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unreceptivity");
+        }
+
+        public static readonly UnreceptivityConverter Singleton = new UnreceptivityConverter();
+    }
+
+    internal class UnsatisfactorinessConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unsatisfactoriness) || t == typeof(Unsatisfactoriness?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Unsatisfactoriness { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unsatisfactoriness { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new Unsatisfactoriness { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Unsatisfactoriness");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unsatisfactoriness)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unsatisfactoriness");
+        }
+
+        public static readonly UnsatisfactorinessConverter Singleton = new UnsatisfactorinessConverter();
+    }
+
+    internal class UnstressedElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnstressedElement) || t == typeof(UnstressedElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnstressedElement { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new UnstressedElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnstressedClass>(reader);
+                    return new UnstressedElement { UnstressedClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnstressedElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnstressedElement)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnstressedClass != null)
+            {
+                serializer.Serialize(writer, value.UnstressedClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnstressedElement");
+        }
+
+        public static readonly UnstressedElementConverter Singleton = new UnstressedElementConverter();
+    }
+
+    internal class UntaskedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Untasked) || t == typeof(Untasked?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Untasked { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Untasked { IntegerMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Untasked { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Untasked");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Untasked)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Untasked");
+        }
+
+        public static readonly UntaskedConverter Singleton = new UntaskedConverter();
+    }
+
+    internal class UnvaryingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Unvarying) || t == typeof(Unvarying?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Unvarying { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Unvarying { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, long>>(reader);
+                    return new Unvarying { IntegerMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Unvarying");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Unvarying)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.IntegerMap != null)
+            {
+                serializer.Serialize(writer, value.IntegerMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Unvarying");
+        }
+
+        public static readonly UnvaryingConverter Singleton = new UnvaryingConverter();
+    }
+
+    internal class VehementlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Vehemently) || t == typeof(Vehemently?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Vehemently { };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Vehemently { Bool = boolValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Vehemently { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Vehemently");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Vehemently)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Vehemently");
+        }
+
+        public static readonly VehementlyConverter Singleton = new VehementlyConverter();
+    }
+
+    internal class WhitepotConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Whitepot) || t == typeof(Whitepot?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<decimal>(reader);
+                    return new Whitepot { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<QuebrachineClass>(reader);
+                    return new Whitepot { QuebrachineClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Whitepot");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Whitepot)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.QuebrachineClass != null)
+            {
+                serializer.Serialize(writer, value.QuebrachineClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Whitepot");
+        }
+
+        public static readonly WhitepotConverter Singleton = new WhitepotConverter();
+    }
+
+    internal class WrothyElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(WrothyElement) || t == typeof(WrothyElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<WrothyClass>(reader);
+                    return new WrothyElement { WrothyClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new WrothyElement { NullArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type WrothyElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (WrothyElement)untypedValue;
+            if (value.NullArray != null)
+            {
+                serializer.Serialize(writer, value.NullArray);
+                return;
+            }
+            if (value.WrothyClass != null)
+            {
+                serializer.Serialize(writer, value.WrothyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type WrothyElement");
+        }
+
+        public static readonly WrothyElementConverter Singleton = new WrothyElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/combined-enum.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/combined-enum.json/default/QuickType.cs
new file mode 100644
index 0000000..6551710
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/combined-enum.json/default/QuickType.cs
@@ -0,0 +1,119 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("bar", Required = Required.Always)]
+        public Bar[] Bar { get; set; }
+
+        [JsonProperty("foo", Required = Required.Always)]
+        public Bar[] Foo { get; set; }
+    }
+
+    public partial record Bar
+    {
+        [JsonProperty("x", Required = Required.Always)]
+        public X X { get; set; }
+    }
+
+    public enum X { Three, One, Two };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                XConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class XConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(X) || t == typeof(X?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "three":
+                    return X.Three;
+                case "one":
+                    return X.One;
+                case "two":
+                    return X.Two;
+            }
+            throw new Exception("Cannot unmarshal type X");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (X)untypedValue;
+            switch (value)
+            {
+                case X.Three:
+                    serializer.Serialize(writer, "three");
+                    return;
+                case X.One:
+                    serializer.Serialize(writer, "one");
+                    return;
+                case X.Two:
+                    serializer.Serialize(writer, "two");
+                    return;
+            }
+            throw new Exception("Cannot marshal type X");
+        }
+
+        public static readonly XConverter Singleton = new XConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/direct-recursive.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/direct-recursive.json/default/QuickType.cs
new file mode 100644
index 0000000..5c49f05
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/direct-recursive.json/default/QuickType.cs
@@ -0,0 +1,73 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("also", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TopLevel? Also { get; set; }
+
+        [JsonProperty("bar", Required = Required.Always)]
+        public bool Bar { get; set; }
+
+        [JsonProperty("foo", Required = Required.Always)]
+        public long Foo { get; set; }
+
+        [JsonProperty("moo", Required = Required.Always)]
+        public double Moo { get; set; }
+
+        [JsonProperty("quux", Required = Required.Always)]
+        public string Quux { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/identifiers.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/identifiers.json/default/QuickType.cs
new file mode 100644
index 0000000..6c1e18b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/identifiers.json/default/QuickType.cs
@@ -0,0 +1,119 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("bla", Required = Required.Always)]
+        public TopLevelBla Bla { get; set; }
+
+        [JsonProperty("", Required = Required.Always)]
+        public Empty Empty { get; set; }
+
+        [JsonProperty("foo", Required = Required.Always)]
+        public Foo Foo { get; set; }
+
+        [JsonProperty("!", Required = Required.Always)]
+        public long Purple { get; set; }
+
+        [JsonProperty("ThisIsA\ud83d\ude1cTough\"\n\nOne", Required = Required.Always)]
+        public ThisIsAToughOne ThisIsAToughOne { get; set; }
+
+        [JsonProperty("Empty", Required = Required.Always)]
+        public EmptyClass TopLevelEmpty { get; set; }
+    }
+
+    public partial record TopLevelBla
+    {
+        [JsonProperty("bar", Required = Required.Always)]
+        public long Bar { get; set; }
+    }
+
+    public partial record Empty
+    {
+        [JsonProperty("x", Required = Required.Always)]
+        public long X { get; set; }
+    }
+
+    public partial record Foo
+    {
+        [JsonProperty("bla", Required = Required.Always)]
+        public FooBla Bla { get; set; }
+
+        [JsonProperty("_", Required = Required.Always)]
+        public long Empty { get; set; }
+
+        [JsonProperty("__", Required = Required.Always)]
+        public long Purple { get; set; }
+    }
+
+    public partial record FooBla
+    {
+    }
+
+    public partial record ThisIsAToughOne
+    {
+        [JsonProperty("\n\n\n", Required = Required.Always)]
+        public long Empty { get; set; }
+
+        [JsonProperty("\"", Required = Required.Always)]
+        public long Purple { get; set; }
+    }
+
+    public partial record EmptyClass
+    {
+        [JsonProperty("y", Required = Required.Always)]
+        public long Y { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs
new file mode 100644
index 0000000..0b68a35
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs
@@ -0,0 +1,2590 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("dummy", Required = Required.Always)]
+        public long Dummy { get; set; }
+
+        [JsonProperty("obj1", Required = Required.Always)]
+        public Obj1 Obj1 { get; set; }
+
+        [JsonProperty("obj2", Required = Required.Always)]
+        public Obj2 Obj2 { get; set; }
+
+        [JsonProperty("obj3", Required = Required.Always)]
+        public Obj3 Obj3 { get; set; }
+
+        [JsonProperty("obj4", Required = Required.Always)]
+        public Obj4 Obj4 { get; set; }
+
+        [JsonProperty("obj5", Required = Required.Always)]
+        public Obj5 Obj5 { get; set; }
+    }
+
+    public partial record Obj1
+    {
+        [JsonProperty("abstract", Required = Required.Always)]
+        public Abstract Abstract { get; set; }
+
+        [JsonProperty("alignas", Required = Required.Always)]
+        public Alignas Alignas { get; set; }
+
+        [JsonProperty("alignof", Required = Required.Always)]
+        public Alignof Alignof { get; set; }
+
+        [JsonProperty("and", Required = Required.Always)]
+        public And And { get; set; }
+
+        [JsonProperty("and_eq", Required = Required.Always)]
+        public AndEq AndEq { get; set; }
+
+        [JsonProperty("Any", Required = Required.Always)]
+        public Any Any { get; set; }
+
+        [JsonProperty("array", Required = Required.Always)]
+        public Array Array { get; set; }
+
+        [JsonProperty("as", Required = Required.Always)]
+        public As As { get; set; }
+
+        [JsonProperty("asm", Required = Required.Always)]
+        public Asm Asm { get; set; }
+
+        [JsonProperty("assert", Required = Required.Always)]
+        public Assert Assert { get; set; }
+
+        [JsonProperty("associatedtype", Required = Required.Always)]
+        public Associatedtype Associatedtype { get; set; }
+
+        [JsonProperty("associativity", Required = Required.Always)]
+        public Associativity Associativity { get; set; }
+
+        [JsonProperty("async", Required = Required.Always)]
+        public Async Async { get; set; }
+
+        [JsonProperty("atomic", Required = Required.Always)]
+        public Atomic Atomic { get; set; }
+
+        [JsonProperty("atomic_cancel", Required = Required.Always)]
+        public AtomicCancel AtomicCancel { get; set; }
+
+        [JsonProperty("atomic_commit", Required = Required.Always)]
+        public AtomicCommit AtomicCommit { get; set; }
+
+        [JsonProperty("atomic_noexcept", Required = Required.Always)]
+        public AtomicNoexcept AtomicNoexcept { get; set; }
+
+        [JsonProperty("auto", Required = Required.Always)]
+        public Auto Auto { get; set; }
+
+        [JsonProperty("await", Required = Required.Always)]
+        public Await Await { get; set; }
+
+        [JsonProperty("base", Required = Required.Always)]
+        public Base Base { get; set; }
+
+        [JsonProperty("bitand", Required = Required.Always)]
+        public Bitand Bitand { get; set; }
+
+        [JsonProperty("bitor", Required = Required.Always)]
+        public Bitor Bitor { get; set; }
+
+        [JsonProperty("BOOL", Required = Required.Always)]
+        public Bool Bool { get; set; }
+
+        [JsonProperty("boolean", Required = Required.Always)]
+        public Boolean Boolean { get; set; }
+
+        [JsonProperty("break", Required = Required.Always)]
+        public Break Break { get; set; }
+
+        [JsonProperty("bycopy", Required = Required.Always)]
+        public Bycopy Bycopy { get; set; }
+
+        [JsonProperty("byref", Required = Required.Always)]
+        public Byref Byref { get; set; }
+
+        [JsonProperty("byte", Required = Required.Always)]
+        public Byte Byte { get; set; }
+
+        [JsonProperty("case", Required = Required.Always)]
+        public Case Case { get; set; }
+
+        [JsonProperty("catch", Required = Required.Always)]
+        public Catch Catch { get; set; }
+
+        [JsonProperty("chan", Required = Required.Always)]
+        public Chan Chan { get; set; }
+
+        [JsonProperty("char", Required = Required.Always)]
+        public Char Char { get; set; }
+
+        [JsonProperty("char16_t", Required = Required.Always)]
+        public Char16T Char16T { get; set; }
+
+        [JsonProperty("char32_t", Required = Required.Always)]
+        public Char32T Char32T { get; set; }
+
+        [JsonProperty("checked", Required = Required.Always)]
+        public Checked Checked { get; set; }
+
+        [JsonProperty("Class", Required = Required.Always)]
+        public Class Class { get; set; }
+
+        [JsonProperty("co_await", Required = Required.Always)]
+        public CoAwait CoAwait { get; set; }
+
+        [JsonProperty("co_return", Required = Required.Always)]
+        public CoReturn CoReturn { get; set; }
+
+        [JsonProperty("co_yield", Required = Required.Always)]
+        public CoYield CoYield { get; set; }
+
+        [JsonProperty("compl", Required = Required.Always)]
+        public Compl Compl { get; set; }
+
+        [JsonProperty("_Complex", Required = Required.Always)]
+        public Complex Complex { get; set; }
+
+        [JsonProperty("concept", Required = Required.Always)]
+        public Concept Concept { get; set; }
+
+        [JsonProperty("console", Required = Required.Always)]
+        public ConsoleClass Console { get; set; }
+
+        [JsonProperty("const", Required = Required.Always)]
+        public Const Const { get; set; }
+
+        [JsonProperty("const_cast", Required = Required.Always)]
+        public ConstCast ConstCast { get; set; }
+
+        [JsonProperty("constexpr", Required = Required.Always)]
+        public Constexpr Constexpr { get; set; }
+
+        [JsonProperty("constructor", Required = Required.Always)]
+        public Constructor Constructor { get; set; }
+
+        [JsonProperty("continue", Required = Required.Always)]
+        public Continue Continue { get; set; }
+
+        [JsonProperty("convenience", Required = Required.Always)]
+        public Convenience Convenience { get; set; }
+
+        [JsonProperty("convert", Required = Required.Always)]
+        public Convert Convert { get; set; }
+
+        [JsonProperty("converter", Required = Required.Always)]
+        public ConverterClass Converter { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public Date Date { get; set; }
+
+        [JsonProperty("date_parse_handling", Required = Required.Always)]
+        public DateParseHandlingClass DateParseHandling { get; set; }
+
+        [JsonProperty("debugger", Required = Required.Always)]
+        public Debugger Debugger { get; set; }
+
+        [JsonProperty("decimal", Required = Required.Always)]
+        public Decimal Decimal { get; set; }
+
+        [JsonProperty("declare", Required = Required.Always)]
+        public Declare Declare { get; set; }
+
+        [JsonProperty("decltype", Required = Required.Always)]
+        public Decltype Decltype { get; set; }
+
+        [JsonProperty("decode_string", Required = Required.Always)]
+        public DecodeString DecodeString { get; set; }
+
+        [JsonProperty("dummy", Required = Required.Always)]
+        public long Dummy { get; set; }
+
+        [JsonProperty("_", Required = Required.Always)]
+        public Empty Empty { get; set; }
+
+        [JsonProperty("_Imaginery", Required = Required.Always)]
+        public Imaginery Imaginery { get; set; }
+
+        [JsonProperty("any", Required = Required.Always)]
+        public AnyClass Obj1Any { get; set; }
+
+        [JsonProperty("_Bool", Required = Required.Always)]
+        public BoolClass Obj1Bool { get; set; }
+
+        [JsonProperty("class", Required = Required.Always)]
+        public ClassClass Obj1Class { get; set; }
+
+        [JsonProperty("bool", Required = Required.Always)]
+        public Obj1Bool PurpleBool { get; set; }
+    }
+
+    public partial record Abstract
+    {
+        [JsonProperty("abstract", Required = Required.Always)]
+        public long AbstractAbstract { get; set; }
+    }
+
+    public partial record Alignas
+    {
+        [JsonProperty("alignas", Required = Required.Always)]
+        public long AlignasAlignas { get; set; }
+    }
+
+    public partial record Alignof
+    {
+        [JsonProperty("alignof", Required = Required.Always)]
+        public long AlignofAlignof { get; set; }
+    }
+
+    public partial record And
+    {
+        [JsonProperty("and", Required = Required.Always)]
+        public long AndAnd { get; set; }
+    }
+
+    public partial record AndEq
+    {
+        [JsonProperty("and_eq", Required = Required.Always)]
+        public long AndEqAndEq { get; set; }
+    }
+
+    public partial record Any
+    {
+        [JsonProperty("Any", Required = Required.Always)]
+        public long AnyAny { get; set; }
+    }
+
+    public partial record Array
+    {
+        [JsonProperty("array", Required = Required.Always)]
+        public long ArrayArray { get; set; }
+    }
+
+    public partial record As
+    {
+        [JsonProperty("as", Required = Required.Always)]
+        public long AsAs { get; set; }
+    }
+
+    public partial record Asm
+    {
+        [JsonProperty("asm", Required = Required.Always)]
+        public long AsmAsm { get; set; }
+    }
+
+    public partial record Assert
+    {
+        [JsonProperty("assert", Required = Required.Always)]
+        public long AssertAssert { get; set; }
+    }
+
+    public partial record Associatedtype
+    {
+        [JsonProperty("associatedtype", Required = Required.Always)]
+        public long AssociatedtypeAssociatedtype { get; set; }
+    }
+
+    public partial record Associativity
+    {
+        [JsonProperty("associativity", Required = Required.Always)]
+        public long AssociativityAssociativity { get; set; }
+    }
+
+    public partial record Async
+    {
+        [JsonProperty("async", Required = Required.Always)]
+        public long AsyncAsync { get; set; }
+    }
+
+    public partial record Atomic
+    {
+        [JsonProperty("atomic", Required = Required.Always)]
+        public long AtomicAtomic { get; set; }
+    }
+
+    public partial record AtomicCancel
+    {
+        [JsonProperty("atomic_cancel", Required = Required.Always)]
+        public long AtomicCancelAtomicCancel { get; set; }
+    }
+
+    public partial record AtomicCommit
+    {
+        [JsonProperty("atomic_commit", Required = Required.Always)]
+        public long AtomicCommitAtomicCommit { get; set; }
+    }
+
+    public partial record AtomicNoexcept
+    {
+        [JsonProperty("atomic_noexcept", Required = Required.Always)]
+        public long AtomicNoexceptAtomicNoexcept { get; set; }
+    }
+
+    public partial record Auto
+    {
+        [JsonProperty("auto", Required = Required.Always)]
+        public long AutoAuto { get; set; }
+    }
+
+    public partial record Await
+    {
+        [JsonProperty("await", Required = Required.Always)]
+        public long AwaitAwait { get; set; }
+    }
+
+    public partial record Base
+    {
+        [JsonProperty("base", Required = Required.Always)]
+        public long BaseBase { get; set; }
+    }
+
+    public partial record Bitand
+    {
+        [JsonProperty("bitand", Required = Required.Always)]
+        public long BitandBitand { get; set; }
+    }
+
+    public partial record Bitor
+    {
+        [JsonProperty("bitor", Required = Required.Always)]
+        public long BitorBitor { get; set; }
+    }
+
+    public partial record Bool
+    {
+        [JsonProperty("BOOL", Required = Required.Always)]
+        public long BoolBool { get; set; }
+    }
+
+    public partial record Boolean
+    {
+        [JsonProperty("boolean", Required = Required.Always)]
+        public long BooleanBoolean { get; set; }
+    }
+
+    public partial record Break
+    {
+        [JsonProperty("break", Required = Required.Always)]
+        public long BreakBreak { get; set; }
+    }
+
+    public partial record Bycopy
+    {
+        [JsonProperty("bycopy", Required = Required.Always)]
+        public long BycopyBycopy { get; set; }
+    }
+
+    public partial record Byref
+    {
+        [JsonProperty("byref", Required = Required.Always)]
+        public long ByrefByref { get; set; }
+    }
+
+    public partial record Byte
+    {
+        [JsonProperty("byte", Required = Required.Always)]
+        public long ByteByte { get; set; }
+    }
+
+    public partial record Case
+    {
+        [JsonProperty("case", Required = Required.Always)]
+        public long CaseCase { get; set; }
+    }
+
+    public partial record Catch
+    {
+        [JsonProperty("catch", Required = Required.Always)]
+        public long CatchCatch { get; set; }
+    }
+
+    public partial record Chan
+    {
+        [JsonProperty("chan", Required = Required.Always)]
+        public long ChanChan { get; set; }
+    }
+
+    public partial record Char
+    {
+        [JsonProperty("char", Required = Required.Always)]
+        public long CharChar { get; set; }
+    }
+
+    public partial record Char16T
+    {
+        [JsonProperty("char16_t", Required = Required.Always)]
+        public long Char16TChar16T { get; set; }
+    }
+
+    public partial record Char32T
+    {
+        [JsonProperty("char32_t", Required = Required.Always)]
+        public long Char32TChar32T { get; set; }
+    }
+
+    public partial record Checked
+    {
+        [JsonProperty("checked", Required = Required.Always)]
+        public long CheckedChecked { get; set; }
+    }
+
+    public partial record Class
+    {
+        [JsonProperty("Class", Required = Required.Always)]
+        public long ClassClass { get; set; }
+    }
+
+    public partial record CoAwait
+    {
+        [JsonProperty("co_await", Required = Required.Always)]
+        public long CoAwaitCoAwait { get; set; }
+    }
+
+    public partial record CoReturn
+    {
+        [JsonProperty("co_return", Required = Required.Always)]
+        public long CoReturnCoReturn { get; set; }
+    }
+
+    public partial record CoYield
+    {
+        [JsonProperty("co_yield", Required = Required.Always)]
+        public long CoYieldCoYield { get; set; }
+    }
+
+    public partial record Compl
+    {
+        [JsonProperty("compl", Required = Required.Always)]
+        public long ComplCompl { get; set; }
+    }
+
+    public partial record Complex
+    {
+        [JsonProperty("_Complex", Required = Required.Always)]
+        public long ComplexComplex { get; set; }
+    }
+
+    public partial record Concept
+    {
+        [JsonProperty("concept", Required = Required.Always)]
+        public long ConceptConcept { get; set; }
+    }
+
+    public partial record ConsoleClass
+    {
+        [JsonProperty("console", Required = Required.Always)]
+        public long Console { get; set; }
+    }
+
+    public partial record Const
+    {
+        [JsonProperty("const", Required = Required.Always)]
+        public long ConstConst { get; set; }
+    }
+
+    public partial record ConstCast
+    {
+        [JsonProperty("const_cast", Required = Required.Always)]
+        public long ConstCastConstCast { get; set; }
+    }
+
+    public partial record Constexpr
+    {
+        [JsonProperty("constexpr", Required = Required.Always)]
+        public long ConstexprConstexpr { get; set; }
+    }
+
+    public partial record Constructor
+    {
+        [JsonProperty("constructor", Required = Required.Always)]
+        public long ConstructorConstructor { get; set; }
+    }
+
+    public partial record Continue
+    {
+        [JsonProperty("continue", Required = Required.Always)]
+        public long ContinueContinue { get; set; }
+    }
+
+    public partial record Convenience
+    {
+        [JsonProperty("convenience", Required = Required.Always)]
+        public long ConvenienceConvenience { get; set; }
+    }
+
+    public partial record Convert
+    {
+        [JsonProperty("convert", Required = Required.Always)]
+        public long ConvertConvert { get; set; }
+    }
+
+    public partial record ConverterClass
+    {
+        [JsonProperty("converter", Required = Required.Always)]
+        public long Converter { get; set; }
+    }
+
+    public partial record Date
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public long DateDate { get; set; }
+    }
+
+    public partial record DateParseHandlingClass
+    {
+        [JsonProperty("date_parse_handling", Required = Required.Always)]
+        public long DateParseHandling { get; set; }
+    }
+
+    public partial record Debugger
+    {
+        [JsonProperty("debugger", Required = Required.Always)]
+        public long DebuggerDebugger { get; set; }
+    }
+
+    public partial record Decimal
+    {
+        [JsonProperty("decimal", Required = Required.Always)]
+        public long DecimalDecimal { get; set; }
+    }
+
+    public partial record Declare
+    {
+        [JsonProperty("declare", Required = Required.Always)]
+        public long DeclareDeclare { get; set; }
+    }
+
+    public partial record Decltype
+    {
+        [JsonProperty("decltype", Required = Required.Always)]
+        public long DecltypeDecltype { get; set; }
+    }
+
+    public partial record DecodeString
+    {
+        [JsonProperty("decode_string", Required = Required.Always)]
+        public long DecodeStringDecodeString { get; set; }
+    }
+
+    public partial record Empty
+    {
+        [JsonProperty("_", Required = Required.Always)]
+        public long Purple { get; set; }
+    }
+
+    public partial record Imaginery
+    {
+        [JsonProperty("_Imaginery", Required = Required.Always)]
+        public long ImagineryImaginery { get; set; }
+    }
+
+    public partial record AnyClass
+    {
+        [JsonProperty("any", Required = Required.Always)]
+        public long Any { get; set; }
+    }
+
+    public partial record BoolClass
+    {
+        [JsonProperty("_Bool", Required = Required.Always)]
+        public long Bool { get; set; }
+    }
+
+    public partial record ClassClass
+    {
+        [JsonProperty("class", Required = Required.Always)]
+        public long Class { get; set; }
+    }
+
+    public partial record Obj1Bool
+    {
+        [JsonProperty("bool", Required = Required.Always)]
+        public long Bool { get; set; }
+    }
+
+    public partial record Obj2
+    {
+        [JsonProperty("def", Required = Required.Always)]
+        public Def Def { get; set; }
+
+        [JsonProperty("default", Required = Required.Always)]
+        public Default Default { get; set; }
+
+        [JsonProperty("defer", Required = Required.Always)]
+        public Defer Defer { get; set; }
+
+        [JsonProperty("deinit", Required = Required.Always)]
+        public Deinit Deinit { get; set; }
+
+        [JsonProperty("del", Required = Required.Always)]
+        public Del Del { get; set; }
+
+        [JsonProperty("delegate", Required = Required.Always)]
+        public Delegate Delegate { get; set; }
+
+        [JsonProperty("delete", Required = Required.Always)]
+        public Delete Delete { get; set; }
+
+        [JsonProperty("dict", Required = Required.Always)]
+        public Dict Dict { get; set; }
+
+        [JsonProperty("dictionary", Required = Required.Always)]
+        public Dictionary Dictionary { get; set; }
+
+        [JsonProperty("didSet", Required = Required.Always)]
+        public DidSet DidSet { get; set; }
+
+        [JsonProperty("do", Required = Required.Always)]
+        public Do Do { get; set; }
+
+        [JsonProperty("double", Required = Required.Always)]
+        public Double Double { get; set; }
+
+        [JsonProperty("dummy", Required = Required.Always)]
+        public long Dummy { get; set; }
+
+        [JsonProperty("dynamic", Required = Required.Always)]
+        public Dynamic Dynamic { get; set; }
+
+        [JsonProperty("dynamic_cast", Required = Required.Always)]
+        public DynamicCast DynamicCast { get; set; }
+
+        [JsonProperty("elif", Required = Required.Always)]
+        public Elif Elif { get; set; }
+
+        [JsonProperty("else", Required = Required.Always)]
+        public Else Else { get; set; }
+
+        [JsonProperty("encode_quick_type", Required = Required.Always)]
+        public EncodeQuickType EncodeQuickType { get; set; }
+
+        [JsonProperty("enum", Required = Required.Always)]
+        public Enum Enum { get; set; }
+
+        [JsonProperty("event", Required = Required.Always)]
+        public Event Event { get; set; }
+
+        [JsonProperty("except", Required = Required.Always)]
+        public Except Except { get; set; }
+
+        [JsonProperty("exception", Required = Required.Always)]
+        public ExceptionClass Exception { get; set; }
+
+        [JsonProperty("explicit", Required = Required.Always)]
+        public Explicit Explicit { get; set; }
+
+        [JsonProperty("export", Required = Required.Always)]
+        public Export Export { get; set; }
+
+        [JsonProperty("exposing", Required = Required.Always)]
+        public Exposing Exposing { get; set; }
+
+        [JsonProperty("extends", Required = Required.Always)]
+        public Extends Extends { get; set; }
+
+        [JsonProperty("extension", Required = Required.Always)]
+        public Extension Extension { get; set; }
+
+        [JsonProperty("extern", Required = Required.Always)]
+        public Extern Extern { get; set; }
+
+        [JsonProperty("fallthrough", Required = Required.Always)]
+        public Fallthrough Fallthrough { get; set; }
+
+        [JsonProperty("False", Required = Required.Always)]
+        public False False { get; set; }
+
+        [JsonProperty("fileprivate", Required = Required.Always)]
+        public Fileprivate Fileprivate { get; set; }
+
+        [JsonProperty("final", Required = Required.Always)]
+        public Final Final { get; set; }
+
+        [JsonProperty("finally", Required = Required.Always)]
+        public Finally Finally { get; set; }
+
+        [JsonProperty("fixed", Required = Required.Always)]
+        public Fixed Fixed { get; set; }
+
+        [JsonProperty("float", Required = Required.Always)]
+        public Float Float { get; set; }
+
+        [JsonProperty("for", Required = Required.Always)]
+        public For For { get; set; }
+
+        [JsonProperty("foreach", Required = Required.Always)]
+        public Foreach Foreach { get; set; }
+
+        [JsonProperty("friend", Required = Required.Always)]
+        public Friend Friend { get; set; }
+
+        [JsonProperty("from", Required = Required.Always)]
+        public From From { get; set; }
+
+        [JsonProperty("func", Required = Required.Always)]
+        public Func Func { get; set; }
+
+        [JsonProperty("function", Required = Required.Always)]
+        public Function Function { get; set; }
+
+        [JsonProperty("get", Required = Required.Always)]
+        public Get Get { get; set; }
+
+        [JsonProperty("global", Required = Required.Always)]
+        public Global Global { get; set; }
+
+        [JsonProperty("go", Required = Required.Always)]
+        public Go Go { get; set; }
+
+        [JsonProperty("goto", Required = Required.Always)]
+        public Goto Goto { get; set; }
+
+        [JsonProperty("guard", Required = Required.Always)]
+        public Guard Guard { get; set; }
+
+        [JsonProperty("hasOwnProperty", Required = Required.Always)]
+        public HasOwnProperty HasOwnProperty { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public Id Id { get; set; }
+
+        [JsonProperty("if", Required = Required.Always)]
+        public If If { get; set; }
+
+        [JsonProperty("IMP", Required = Required.Always)]
+        public Imp Imp { get; set; }
+
+        [JsonProperty("implements", Required = Required.Always)]
+        public Implements Implements { get; set; }
+
+        [JsonProperty("implicit", Required = Required.Always)]
+        public Implicit Implicit { get; set; }
+
+        [JsonProperty("import", Required = Required.Always)]
+        public Import Import { get; set; }
+
+        [JsonProperty("in", Required = Required.Always)]
+        public In In { get; set; }
+
+        [JsonProperty("indirect", Required = Required.Always)]
+        public Indirect Indirect { get; set; }
+
+        [JsonProperty("infix", Required = Required.Always)]
+        public Infix Infix { get; set; }
+
+        [JsonProperty("init", Required = Required.Always)]
+        public Init Init { get; set; }
+
+        [JsonProperty("inline", Required = Required.Always)]
+        public Inline Inline { get; set; }
+
+        [JsonProperty("inout", Required = Required.Always)]
+        public Inout Inout { get; set; }
+
+        [JsonProperty("instanceof", Required = Required.Always)]
+        public Instanceof Instanceof { get; set; }
+
+        [JsonProperty("int", Required = Required.Always)]
+        public Int Int { get; set; }
+
+        [JsonProperty("interface", Required = Required.Always)]
+        public Interface Interface { get; set; }
+
+        [JsonProperty("internal", Required = Required.Always)]
+        public Internal Internal { get; set; }
+
+        [JsonProperty("false", Required = Required.Always)]
+        public FalseClass Obj2False { get; set; }
+
+        [JsonProperty("from_json", Required = Required.Always)]
+        public FromJsonClass Obj2FromJson { get; set; }
+    }
+
+    public partial record Def
+    {
+        [JsonProperty("def", Required = Required.Always)]
+        public long DefDef { get; set; }
+    }
+
+    public partial record Default
+    {
+        [JsonProperty("default", Required = Required.Always)]
+        public long DefaultDefault { get; set; }
+    }
+
+    public partial record Defer
+    {
+        [JsonProperty("defer", Required = Required.Always)]
+        public long DeferDefer { get; set; }
+    }
+
+    public partial record Deinit
+    {
+        [JsonProperty("deinit", Required = Required.Always)]
+        public long DeinitDeinit { get; set; }
+    }
+
+    public partial record Del
+    {
+        [JsonProperty("del", Required = Required.Always)]
+        public long DelDel { get; set; }
+    }
+
+    public partial record Delegate
+    {
+        [JsonProperty("delegate", Required = Required.Always)]
+        public long DelegateDelegate { get; set; }
+    }
+
+    public partial record Delete
+    {
+        [JsonProperty("delete", Required = Required.Always)]
+        public long DeleteDelete { get; set; }
+    }
+
+    public partial record Dict
+    {
+        [JsonProperty("dict", Required = Required.Always)]
+        public long DictDict { get; set; }
+    }
+
+    public partial record Dictionary
+    {
+        [JsonProperty("dictionary", Required = Required.Always)]
+        public long DictionaryDictionary { get; set; }
+    }
+
+    public partial record DidSet
+    {
+        [JsonProperty("didSet", Required = Required.Always)]
+        public long DidSetDidSet { get; set; }
+    }
+
+    public partial record Do
+    {
+        [JsonProperty("do", Required = Required.Always)]
+        public long DoDo { get; set; }
+    }
+
+    public partial record Double
+    {
+        [JsonProperty("double", Required = Required.Always)]
+        public long DoubleDouble { get; set; }
+    }
+
+    public partial record Dynamic
+    {
+        [JsonProperty("dynamic", Required = Required.Always)]
+        public long DynamicDynamic { get; set; }
+    }
+
+    public partial record DynamicCast
+    {
+        [JsonProperty("dynamic_cast", Required = Required.Always)]
+        public long DynamicCastDynamicCast { get; set; }
+    }
+
+    public partial record Elif
+    {
+        [JsonProperty("elif", Required = Required.Always)]
+        public long ElifElif { get; set; }
+    }
+
+    public partial record Else
+    {
+        [JsonProperty("else", Required = Required.Always)]
+        public long ElseElse { get; set; }
+    }
+
+    public partial record EncodeQuickType
+    {
+        [JsonProperty("encode_quick_type", Required = Required.Always)]
+        public long EncodeQuickTypeEncodeQuickType { get; set; }
+    }
+
+    public partial record Enum
+    {
+        [JsonProperty("enum", Required = Required.Always)]
+        public long EnumEnum { get; set; }
+    }
+
+    public partial record Event
+    {
+        [JsonProperty("event", Required = Required.Always)]
+        public long EventEvent { get; set; }
+    }
+
+    public partial record Except
+    {
+        [JsonProperty("except", Required = Required.Always)]
+        public long ExceptExcept { get; set; }
+    }
+
+    public partial record ExceptionClass
+    {
+        [JsonProperty("exception", Required = Required.Always)]
+        public long Exception { get; set; }
+    }
+
+    public partial record Explicit
+    {
+        [JsonProperty("explicit", Required = Required.Always)]
+        public long ExplicitExplicit { get; set; }
+    }
+
+    public partial record Export
+    {
+        [JsonProperty("export", Required = Required.Always)]
+        public long ExportExport { get; set; }
+    }
+
+    public partial record Exposing
+    {
+        [JsonProperty("exposing", Required = Required.Always)]
+        public long ExposingExposing { get; set; }
+    }
+
+    public partial record Extends
+    {
+        [JsonProperty("extends", Required = Required.Always)]
+        public long ExtendsExtends { get; set; }
+    }
+
+    public partial record Extension
+    {
+        [JsonProperty("extension", Required = Required.Always)]
+        public long ExtensionExtension { get; set; }
+    }
+
+    public partial record Extern
+    {
+        [JsonProperty("extern", Required = Required.Always)]
+        public long ExternExtern { get; set; }
+    }
+
+    public partial record Fallthrough
+    {
+        [JsonProperty("fallthrough", Required = Required.Always)]
+        public long FallthroughFallthrough { get; set; }
+    }
+
+    public partial record False
+    {
+        [JsonProperty("False", Required = Required.Always)]
+        public long FalseFalse { get; set; }
+    }
+
+    public partial record Fileprivate
+    {
+        [JsonProperty("fileprivate", Required = Required.Always)]
+        public long FileprivateFileprivate { get; set; }
+    }
+
+    public partial record Final
+    {
+        [JsonProperty("final", Required = Required.Always)]
+        public long FinalFinal { get; set; }
+    }
+
+    public partial record Finally
+    {
+        [JsonProperty("finally", Required = Required.Always)]
+        public long FinallyFinally { get; set; }
+    }
+
+    public partial record Fixed
+    {
+        [JsonProperty("fixed", Required = Required.Always)]
+        public long FixedFixed { get; set; }
+    }
+
+    public partial record Float
+    {
+        [JsonProperty("float", Required = Required.Always)]
+        public long FloatFloat { get; set; }
+    }
+
+    public partial record For
+    {
+        [JsonProperty("for", Required = Required.Always)]
+        public long ForFor { get; set; }
+    }
+
+    public partial record Foreach
+    {
+        [JsonProperty("foreach", Required = Required.Always)]
+        public long ForeachForeach { get; set; }
+    }
+
+    public partial record Friend
+    {
+        [JsonProperty("friend", Required = Required.Always)]
+        public long FriendFriend { get; set; }
+    }
+
+    public partial record From
+    {
+        [JsonProperty("from", Required = Required.Always)]
+        public long FromFrom { get; set; }
+    }
+
+    public partial record Func
+    {
+        [JsonProperty("func", Required = Required.Always)]
+        public long FuncFunc { get; set; }
+    }
+
+    public partial record Function
+    {
+        [JsonProperty("function", Required = Required.Always)]
+        public long FunctionFunction { get; set; }
+    }
+
+    public partial record Get
+    {
+        [JsonProperty("get", Required = Required.Always)]
+        public long GetGet { get; set; }
+    }
+
+    public partial record Global
+    {
+        [JsonProperty("global", Required = Required.Always)]
+        public long GlobalGlobal { get; set; }
+    }
+
+    public partial record Go
+    {
+        [JsonProperty("go", Required = Required.Always)]
+        public long GoGo { get; set; }
+    }
+
+    public partial record Goto
+    {
+        [JsonProperty("goto", Required = Required.Always)]
+        public long GotoGoto { get; set; }
+    }
+
+    public partial record Guard
+    {
+        [JsonProperty("guard", Required = Required.Always)]
+        public long GuardGuard { get; set; }
+    }
+
+    public partial record HasOwnProperty
+    {
+        [JsonProperty("hasOwnProperty", Required = Required.Always)]
+        public long HasOwnPropertyHasOwnProperty { get; set; }
+    }
+
+    public partial record Id
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public long IdId { get; set; }
+    }
+
+    public partial record If
+    {
+        [JsonProperty("if", Required = Required.Always)]
+        public long IfIf { get; set; }
+    }
+
+    public partial record Imp
+    {
+        [JsonProperty("IMP", Required = Required.Always)]
+        public long ImpImp { get; set; }
+    }
+
+    public partial record Implements
+    {
+        [JsonProperty("implements", Required = Required.Always)]
+        public long ImplementsImplements { get; set; }
+    }
+
+    public partial record Implicit
+    {
+        [JsonProperty("implicit", Required = Required.Always)]
+        public long ImplicitImplicit { get; set; }
+    }
+
+    public partial record Import
+    {
+        [JsonProperty("import", Required = Required.Always)]
+        public long ImportImport { get; set; }
+    }
+
+    public partial record In
+    {
+        [JsonProperty("in", Required = Required.Always)]
+        public long InIn { get; set; }
+    }
+
+    public partial record Indirect
+    {
+        [JsonProperty("indirect", Required = Required.Always)]
+        public long IndirectIndirect { get; set; }
+    }
+
+    public partial record Infix
+    {
+        [JsonProperty("infix", Required = Required.Always)]
+        public long InfixInfix { get; set; }
+    }
+
+    public partial record Init
+    {
+        [JsonProperty("init", Required = Required.Always)]
+        public long InitInit { get; set; }
+    }
+
+    public partial record Inline
+    {
+        [JsonProperty("inline", Required = Required.Always)]
+        public long InlineInline { get; set; }
+    }
+
+    public partial record Inout
+    {
+        [JsonProperty("inout", Required = Required.Always)]
+        public long InoutInout { get; set; }
+    }
+
+    public partial record Instanceof
+    {
+        [JsonProperty("instanceof", Required = Required.Always)]
+        public long InstanceofInstanceof { get; set; }
+    }
+
+    public partial record Int
+    {
+        [JsonProperty("int", Required = Required.Always)]
+        public long IntInt { get; set; }
+    }
+
+    public partial record Interface
+    {
+        [JsonProperty("interface", Required = Required.Always)]
+        public long InterfaceInterface { get; set; }
+    }
+
+    public partial record Internal
+    {
+        [JsonProperty("internal", Required = Required.Always)]
+        public long InternalInternal { get; set; }
+    }
+
+    public partial record FalseClass
+    {
+        [JsonProperty("false", Required = Required.Always)]
+        public long False { get; set; }
+    }
+
+    public partial record FromJsonClass
+    {
+        [JsonProperty("from_json", Required = Required.Always)]
+        public long FromJsonFromJson { get; set; }
+    }
+
+    public partial record Obj3
+    {
+        [JsonProperty("dummy", Required = Required.Always)]
+        public long Dummy { get; set; }
+
+        [JsonProperty("is", Required = Required.Always)]
+        public Is Is { get; set; }
+
+        [JsonProperty("iterable", Required = Required.Always)]
+        public Iterable Iterable { get; set; }
+
+        [JsonProperty("jdec", Required = Required.Always)]
+        public Jdec Jdec { get; set; }
+
+        [JsonProperty("jenc", Required = Required.Always)]
+        public Jenc Jenc { get; set; }
+
+        [JsonProperty("jpipe", Required = Required.Always)]
+        public Jpipe Jpipe { get; set; }
+
+        [JsonProperty("json", Required = Required.Always)]
+        public Json Json { get; set; }
+
+        [JsonProperty("json_converter", Required = Required.Always)]
+        public JsonConverterClass JsonConverter { get; set; }
+
+        [JsonProperty("json_serializer", Required = Required.Always)]
+        public JsonSerializerClass JsonSerializer { get; set; }
+
+        [JsonProperty("json_token", Required = Required.Always)]
+        public JsonTokenClass JsonToken { get; set; }
+
+        [JsonProperty("json_writer", Required = Required.Always)]
+        public JsonWriterClass JsonWriter { get; set; }
+
+        [JsonProperty("lambda", Required = Required.Always)]
+        public Lambda Lambda { get; set; }
+
+        [JsonProperty("lazy", Required = Required.Always)]
+        public Lazy Lazy { get; set; }
+
+        [JsonProperty("left", Required = Required.Always)]
+        public Left Left { get; set; }
+
+        [JsonProperty("let", Required = Required.Always)]
+        public Let Let { get; set; }
+
+        [JsonProperty("list", Required = Required.Always)]
+        public List List { get; set; }
+
+        [JsonProperty("lock", Required = Required.Always)]
+        public Lock Lock { get; set; }
+
+        [JsonProperty("long", Required = Required.Always)]
+        public Long Long { get; set; }
+
+        [JsonProperty("map", Required = Required.Always)]
+        public Map Map { get; set; }
+
+        [JsonProperty("metadata_property_handling", Required = Required.Always)]
+        public MetadataPropertyHandlingClass MetadataPropertyHandling { get; set; }
+
+        [JsonProperty("module", Required = Required.Always)]
+        public Module Module { get; set; }
+
+        [JsonProperty("mutable", Required = Required.Always)]
+        public Mutable Mutable { get; set; }
+
+        [JsonProperty("mutating", Required = Required.Always)]
+        public Mutating Mutating { get; set; }
+
+        [JsonProperty("namespace", Required = Required.Always)]
+        public Namespace Namespace { get; set; }
+
+        [JsonProperty("native", Required = Required.Always)]
+        public Native Native { get; set; }
+
+        [JsonProperty("new", Required = Required.Always)]
+        public New New { get; set; }
+
+        [JsonProperty("newtonsoft", Required = Required.Always)]
+        public NewtonsoftClass Newtonsoft { get; set; }
+
+        [JsonProperty("nil", Required = Required.Always)]
+        public Nil Nil { get; set; }
+
+        [JsonProperty("NO", Required = Required.Always)]
+        public No No { get; set; }
+
+        [JsonProperty("noexcept", Required = Required.Always)]
+        public Noexcept Noexcept { get; set; }
+
+        [JsonProperty("nonatomic", Required = Required.Always)]
+        public Nonatomic Nonatomic { get; set; }
+
+        [JsonProperty("None", Required = Required.Always)]
+        public None None { get; set; }
+
+        [JsonProperty("nonlocal", Required = Required.Always)]
+        public Nonlocal Nonlocal { get; set; }
+
+        [JsonProperty("nonmutating", Required = Required.Always)]
+        public Nonmutating Nonmutating { get; set; }
+
+        [JsonProperty("not", Required = Required.Always)]
+        public Not Not { get; set; }
+
+        [JsonProperty("not_eq", Required = Required.Always)]
+        public NotEq NotEq { get; set; }
+
+        [JsonProperty("NSString", Required = Required.Always)]
+        public NsString NsString { get; set; }
+
+        [JsonProperty("NULL", Required = Required.Always)]
+        public Null Null { get; set; }
+
+        [JsonProperty("nullptr", Required = Required.Always)]
+        public Nullptr Nullptr { get; set; }
+
+        [JsonProperty("number", Required = Required.Always)]
+        public Number Number { get; set; }
+
+        [JsonProperty("none", Required = Required.Always)]
+        public NoneClass Obj3None { get; set; }
+
+        [JsonProperty("null", Required = Required.Always)]
+        public NullClass Obj3Null { get; set; }
+
+        [JsonProperty("protocol", Required = Required.Always)]
+        public ProtocolClass Obj3Protocol { get; set; }
+
+        [JsonProperty("object", Required = Required.Always)]
+        public Object Object { get; set; }
+
+        [JsonProperty("of", Required = Required.Always)]
+        public Of Of { get; set; }
+
+        [JsonProperty("oneway", Required = Required.Always)]
+        public Oneway Oneway { get; set; }
+
+        [JsonProperty("open", Required = Required.Always)]
+        public Open Open { get; set; }
+
+        [JsonProperty("operator", Required = Required.Always)]
+        public Operator Operator { get; set; }
+
+        [JsonProperty("optional", Required = Required.Always)]
+        public Optional Optional { get; set; }
+
+        [JsonProperty("or", Required = Required.Always)]
+        public Or Or { get; set; }
+
+        [JsonProperty("or_eq", Required = Required.Always)]
+        public OrEq OrEq { get; set; }
+
+        [JsonProperty("out", Required = Required.Always)]
+        public Out Out { get; set; }
+
+        [JsonProperty("override", Required = Required.Always)]
+        public Override Override { get; set; }
+
+        [JsonProperty("package", Required = Required.Always)]
+        public Package Package { get; set; }
+
+        [JsonProperty("params", Required = Required.Always)]
+        public Params Params { get; set; }
+
+        [JsonProperty("pass", Required = Required.Always)]
+        public Pass Pass { get; set; }
+
+        [JsonProperty("port", Required = Required.Always)]
+        public Port Port { get; set; }
+
+        [JsonProperty("postfix", Required = Required.Always)]
+        public Postfix Postfix { get; set; }
+
+        [JsonProperty("precedence", Required = Required.Always)]
+        public Precedence Precedence { get; set; }
+
+        [JsonProperty("prefix", Required = Required.Always)]
+        public Prefix Prefix { get; set; }
+
+        [JsonProperty("print", Required = Required.Always)]
+        public Print Print { get; set; }
+
+        [JsonProperty("printf", Required = Required.Always)]
+        public Printf Printf { get; set; }
+
+        [JsonProperty("private", Required = Required.Always)]
+        public Private Private { get; set; }
+
+        [JsonProperty("protected", Required = Required.Always)]
+        public Protected Protected { get; set; }
+
+        [JsonProperty("Protocol", Required = Required.Always)]
+        public Protocol Protocol { get; set; }
+    }
+
+    public partial record Is
+    {
+        [JsonProperty("is", Required = Required.Always)]
+        public long IsIs { get; set; }
+    }
+
+    public partial record Iterable
+    {
+        [JsonProperty("iterable", Required = Required.Always)]
+        public long IterableIterable { get; set; }
+    }
+
+    public partial record Jdec
+    {
+        [JsonProperty("jdec", Required = Required.Always)]
+        public long JdecJdec { get; set; }
+    }
+
+    public partial record Jenc
+    {
+        [JsonProperty("jenc", Required = Required.Always)]
+        public long JencJenc { get; set; }
+    }
+
+    public partial record Jpipe
+    {
+        [JsonProperty("jpipe", Required = Required.Always)]
+        public long JpipeJpipe { get; set; }
+    }
+
+    public partial record Json
+    {
+        [JsonProperty("json", Required = Required.Always)]
+        public long JsonJson { get; set; }
+    }
+
+    public partial record JsonConverterClass
+    {
+        [JsonProperty("json_converter", Required = Required.Always)]
+        public long JsonConverter { get; set; }
+    }
+
+    public partial record JsonSerializerClass
+    {
+        [JsonProperty("json_serializer", Required = Required.Always)]
+        public long JsonSerializer { get; set; }
+    }
+
+    public partial record JsonTokenClass
+    {
+        [JsonProperty("json_token", Required = Required.Always)]
+        public long JsonToken { get; set; }
+    }
+
+    public partial record JsonWriterClass
+    {
+        [JsonProperty("json_writer", Required = Required.Always)]
+        public long JsonWriter { get; set; }
+    }
+
+    public partial record Lambda
+    {
+        [JsonProperty("lambda", Required = Required.Always)]
+        public long LambdaLambda { get; set; }
+    }
+
+    public partial record Lazy
+    {
+        [JsonProperty("lazy", Required = Required.Always)]
+        public long LazyLazy { get; set; }
+    }
+
+    public partial record Left
+    {
+        [JsonProperty("left", Required = Required.Always)]
+        public long LeftLeft { get; set; }
+    }
+
+    public partial record Let
+    {
+        [JsonProperty("let", Required = Required.Always)]
+        public long LetLet { get; set; }
+    }
+
+    public partial record List
+    {
+        [JsonProperty("list", Required = Required.Always)]
+        public long ListList { get; set; }
+    }
+
+    public partial record Lock
+    {
+        [JsonProperty("lock", Required = Required.Always)]
+        public long LockLock { get; set; }
+    }
+
+    public partial record Long
+    {
+        [JsonProperty("long", Required = Required.Always)]
+        public long LongLong { get; set; }
+    }
+
+    public partial record Map
+    {
+        [JsonProperty("map", Required = Required.Always)]
+        public long MapMap { get; set; }
+    }
+
+    public partial record MetadataPropertyHandlingClass
+    {
+        [JsonProperty("metadata_property_handling", Required = Required.Always)]
+        public long MetadataPropertyHandling { get; set; }
+    }
+
+    public partial record Module
+    {
+        [JsonProperty("module", Required = Required.Always)]
+        public long ModuleModule { get; set; }
+    }
+
+    public partial record Mutable
+    {
+        [JsonProperty("mutable", Required = Required.Always)]
+        public long MutableMutable { get; set; }
+    }
+
+    public partial record Mutating
+    {
+        [JsonProperty("mutating", Required = Required.Always)]
+        public long MutatingMutating { get; set; }
+    }
+
+    public partial record Namespace
+    {
+        [JsonProperty("namespace", Required = Required.Always)]
+        public long NamespaceNamespace { get; set; }
+    }
+
+    public partial record Native
+    {
+        [JsonProperty("native", Required = Required.Always)]
+        public long NativeNative { get; set; }
+    }
+
+    public partial record New
+    {
+        [JsonProperty("new", Required = Required.Always)]
+        public long NewNew { get; set; }
+    }
+
+    public partial record NewtonsoftClass
+    {
+        [JsonProperty("newtonsoft", Required = Required.Always)]
+        public long Newtonsoft { get; set; }
+    }
+
+    public partial record Nil
+    {
+        [JsonProperty("nil", Required = Required.Always)]
+        public long NilNil { get; set; }
+    }
+
+    public partial record No
+    {
+        [JsonProperty("NO", Required = Required.Always)]
+        public long NoNo { get; set; }
+    }
+
+    public partial record Noexcept
+    {
+        [JsonProperty("noexcept", Required = Required.Always)]
+        public long NoexceptNoexcept { get; set; }
+    }
+
+    public partial record Nonatomic
+    {
+        [JsonProperty("nonatomic", Required = Required.Always)]
+        public long NonatomicNonatomic { get; set; }
+    }
+
+    public partial record None
+    {
+        [JsonProperty("None", Required = Required.Always)]
+        public long NoneNone { get; set; }
+    }
+
+    public partial record Nonlocal
+    {
+        [JsonProperty("nonlocal", Required = Required.Always)]
+        public long NonlocalNonlocal { get; set; }
+    }
+
+    public partial record Nonmutating
+    {
+        [JsonProperty("nonmutating", Required = Required.Always)]
+        public long NonmutatingNonmutating { get; set; }
+    }
+
+    public partial record Not
+    {
+        [JsonProperty("not", Required = Required.Always)]
+        public long NotNot { get; set; }
+    }
+
+    public partial record NotEq
+    {
+        [JsonProperty("not_eq", Required = Required.Always)]
+        public long NotEqNotEq { get; set; }
+    }
+
+    public partial record NsString
+    {
+        [JsonProperty("NSString", Required = Required.Always)]
+        public long NsStringNsString { get; set; }
+    }
+
+    public partial record Null
+    {
+        [JsonProperty("NULL", Required = Required.Always)]
+        public long NullNull { get; set; }
+    }
+
+    public partial record Nullptr
+    {
+        [JsonProperty("nullptr", Required = Required.Always)]
+        public long NullptrNullptr { get; set; }
+    }
+
+    public partial record Number
+    {
+        [JsonProperty("number", Required = Required.Always)]
+        public long NumberNumber { get; set; }
+    }
+
+    public partial record NoneClass
+    {
+        [JsonProperty("none", Required = Required.Always)]
+        public long None { get; set; }
+    }
+
+    public partial record NullClass
+    {
+        [JsonProperty("null", Required = Required.Always)]
+        public long Null { get; set; }
+    }
+
+    public partial record ProtocolClass
+    {
+        [JsonProperty("protocol", Required = Required.Always)]
+        public long Protocol { get; set; }
+    }
+
+    public partial record Object
+    {
+        [JsonProperty("object", Required = Required.Always)]
+        public long ObjectObject { get; set; }
+    }
+
+    public partial record Of
+    {
+        [JsonProperty("of", Required = Required.Always)]
+        public long OfOf { get; set; }
+    }
+
+    public partial record Oneway
+    {
+        [JsonProperty("oneway", Required = Required.Always)]
+        public long OnewayOneway { get; set; }
+    }
+
+    public partial record Open
+    {
+        [JsonProperty("open", Required = Required.Always)]
+        public long OpenOpen { get; set; }
+    }
+
+    public partial record Operator
+    {
+        [JsonProperty("operator", Required = Required.Always)]
+        public long OperatorOperator { get; set; }
+    }
+
+    public partial record Optional
+    {
+        [JsonProperty("optional", Required = Required.Always)]
+        public long OptionalOptional { get; set; }
+    }
+
+    public partial record Or
+    {
+        [JsonProperty("or", Required = Required.Always)]
+        public long OrOr { get; set; }
+    }
+
+    public partial record OrEq
+    {
+        [JsonProperty("or_eq", Required = Required.Always)]
+        public long OrEqOrEq { get; set; }
+    }
+
+    public partial record Out
+    {
+        [JsonProperty("out", Required = Required.Always)]
+        public long OutOut { get; set; }
+    }
+
+    public partial record Override
+    {
+        [JsonProperty("override", Required = Required.Always)]
+        public long OverrideOverride { get; set; }
+    }
+
+    public partial record Package
+    {
+        [JsonProperty("package", Required = Required.Always)]
+        public long PackagePackage { get; set; }
+    }
+
+    public partial record Params
+    {
+        [JsonProperty("params", Required = Required.Always)]
+        public long ParamsParams { get; set; }
+    }
+
+    public partial record Pass
+    {
+        [JsonProperty("pass", Required = Required.Always)]
+        public long PassPass { get; set; }
+    }
+
+    public partial record Port
+    {
+        [JsonProperty("port", Required = Required.Always)]
+        public long PortPort { get; set; }
+    }
+
+    public partial record Postfix
+    {
+        [JsonProperty("postfix", Required = Required.Always)]
+        public long PostfixPostfix { get; set; }
+    }
+
+    public partial record Precedence
+    {
+        [JsonProperty("precedence", Required = Required.Always)]
+        public long PrecedencePrecedence { get; set; }
+    }
+
+    public partial record Prefix
+    {
+        [JsonProperty("prefix", Required = Required.Always)]
+        public long PrefixPrefix { get; set; }
+    }
+
+    public partial record Print
+    {
+        [JsonProperty("print", Required = Required.Always)]
+        public long PrintPrint { get; set; }
+    }
+
+    public partial record Printf
+    {
+        [JsonProperty("printf", Required = Required.Always)]
+        public long PrintfPrintf { get; set; }
+    }
+
+    public partial record Private
+    {
+        [JsonProperty("private", Required = Required.Always)]
+        public long PrivatePrivate { get; set; }
+    }
+
+    public partial record Protected
+    {
+        [JsonProperty("protected", Required = Required.Always)]
+        public long ProtectedProtected { get; set; }
+    }
+
+    public partial record Protocol
+    {
+        [JsonProperty("Protocol", Required = Required.Always)]
+        public long ProtocolProtocol { get; set; }
+    }
+
+    public partial record Obj4
+    {
+        [JsonProperty("dummy", Required = Required.Always)]
+        public long Dummy { get; set; }
+
+        [JsonProperty("required", Required = Required.Always)]
+        public RequiredClass Obj4Required { get; set; }
+
+        [JsonProperty("self", Required = Required.Always)]
+        public SelfClass Obj4Self { get; set; }
+
+        [JsonProperty("to_json", Required = Required.Always)]
+        public ToJson Obj4ToJson { get; set; }
+
+        [JsonProperty("true", Required = Required.Always)]
+        public TrueClass Obj4True { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public Obj4Type Obj4Type { get; set; }
+
+        [JsonProperty("public", Required = Required.Always)]
+        public Public Public { get; set; }
+
+        [JsonProperty("quicktype", Required = Required.Always)]
+        public Quicktype Quicktype { get; set; }
+
+        [JsonProperty("raise", Required = Required.Always)]
+        public Raise Raise { get; set; }
+
+        [JsonProperty("range", Required = Required.Always)]
+        public Range Range { get; set; }
+
+        [JsonProperty("readonly", Required = Required.Always)]
+        public Readonly Readonly { get; set; }
+
+        [JsonProperty("ref", Required = Required.Always)]
+        public Ref Ref { get; set; }
+
+        [JsonProperty("register", Required = Required.Always)]
+        public Register Register { get; set; }
+
+        [JsonProperty("reinterpret_cast", Required = Required.Always)]
+        public ReinterpretCast ReinterpretCast { get; set; }
+
+        [JsonProperty("repeat", Required = Required.Always)]
+        public Repeat Repeat { get; set; }
+
+        [JsonProperty("require", Required = Required.Always)]
+        public Require Require { get; set; }
+
+        [JsonProperty("requires", Required = Required.Always)]
+        public Requires Requires { get; set; }
+
+        [JsonProperty("restrict", Required = Required.Always)]
+        public Restrict Restrict { get; set; }
+
+        [JsonProperty("retain", Required = Required.Always)]
+        public Retain Retain { get; set; }
+
+        [JsonProperty("rethrows", Required = Required.Always)]
+        public Rethrows Rethrows { get; set; }
+
+        [JsonProperty("return", Required = Required.Always)]
+        public Return Return { get; set; }
+
+        [JsonProperty("right", Required = Required.Always)]
+        public Right Right { get; set; }
+
+        [JsonProperty("sbyte", Required = Required.Always)]
+        public Sbyte Sbyte { get; set; }
+
+        [JsonProperty("sealed", Required = Required.Always)]
+        public Sealed Sealed { get; set; }
+
+        [JsonProperty("SEL", Required = Required.Always)]
+        public Sel Sel { get; set; }
+
+        [JsonProperty("select", Required = Required.Always)]
+        public Select Select { get; set; }
+
+        [JsonProperty("Self", Required = Required.Always)]
+        public Self Self { get; set; }
+
+        [JsonProperty("serialize", Required = Required.Always)]
+        public SerializeClass Serialize { get; set; }
+
+        [JsonProperty("set", Required = Required.Always)]
+        public Set Set { get; set; }
+
+        [JsonProperty("short", Required = Required.Always)]
+        public Short Short { get; set; }
+
+        [JsonProperty("signed", Required = Required.Always)]
+        public Signed Signed { get; set; }
+
+        [JsonProperty("sizeof", Required = Required.Always)]
+        public Sizeof Sizeof { get; set; }
+
+        [JsonProperty("stackalloc", Required = Required.Always)]
+        public Stackalloc Stackalloc { get; set; }
+
+        [JsonProperty("static", Required = Required.Always)]
+        public Static Static { get; set; }
+
+        [JsonProperty("static_assert", Required = Required.Always)]
+        public StaticAssert StaticAssert { get; set; }
+
+        [JsonProperty("static_cast", Required = Required.Always)]
+        public StaticCast StaticCast { get; set; }
+
+        [JsonProperty("strictfp", Required = Required.Always)]
+        public Strictfp Strictfp { get; set; }
+
+        [JsonProperty("string", Required = Required.Always)]
+        public String String { get; set; }
+
+        [JsonProperty("struct", Required = Required.Always)]
+        public Struct Struct { get; set; }
+
+        [JsonProperty("subscript", Required = Required.Always)]
+        public Subscript Subscript { get; set; }
+
+        [JsonProperty("super", Required = Required.Always)]
+        public Super Super { get; set; }
+
+        [JsonProperty("switch", Required = Required.Always)]
+        public Switch Switch { get; set; }
+
+        [JsonProperty("symbol", Required = Required.Always)]
+        public Symbol Symbol { get; set; }
+
+        [JsonProperty("synchronized", Required = Required.Always)]
+        public Synchronized Synchronized { get; set; }
+
+        [JsonProperty("system", Required = Required.Always)]
+        public SystemClass System { get; set; }
+
+        [JsonProperty("template", Required = Required.Always)]
+        public Template Template { get; set; }
+
+        [JsonProperty("then", Required = Required.Always)]
+        public Then Then { get; set; }
+
+        [JsonProperty("this", Required = Required.Always)]
+        public This This { get; set; }
+
+        [JsonProperty("thread_local", Required = Required.Always)]
+        public ThreadLocal ThreadLocal { get; set; }
+
+        [JsonProperty("throw", Required = Required.Always)]
+        public Throw Throw { get; set; }
+
+        [JsonProperty("throws", Required = Required.Always)]
+        public Throws Throws { get; set; }
+
+        [JsonProperty("top_level", Required = Required.Always)]
+        public TopLevelClass TopLevel { get; set; }
+
+        [JsonProperty("transient", Required = Required.Always)]
+        public Transient Transient { get; set; }
+
+        [JsonProperty("True", Required = Required.Always)]
+        public True True { get; set; }
+
+        [JsonProperty("try", Required = Required.Always)]
+        public Try Try { get; set; }
+
+        [JsonProperty("Type", Required = Required.Always)]
+        public TypeClass Type { get; set; }
+
+        [JsonProperty("typealias", Required = Required.Always)]
+        public Typealias Typealias { get; set; }
+
+        [JsonProperty("typedef", Required = Required.Always)]
+        public Typedef Typedef { get; set; }
+
+        [JsonProperty("typeid", Required = Required.Always)]
+        public Typeid Typeid { get; set; }
+
+        [JsonProperty("typename", Required = Required.Always)]
+        public Typename Typename { get; set; }
+
+        [JsonProperty("typeof", Required = Required.Always)]
+        public Typeof Typeof { get; set; }
+
+        [JsonProperty("uint", Required = Required.Always)]
+        public Uint Uint { get; set; }
+
+        [JsonProperty("ulong", Required = Required.Always)]
+        public Ulong Ulong { get; set; }
+
+        [JsonProperty("unchecked", Required = Required.Always)]
+        public Unchecked Unchecked { get; set; }
+
+        [JsonProperty("undefined", Required = Required.Always)]
+        public Undefined Undefined { get; set; }
+    }
+
+    public partial record RequiredClass
+    {
+        [JsonProperty("required", Required = Required.Always)]
+        public long RequiredRequired { get; set; }
+    }
+
+    public partial record SelfClass
+    {
+        [JsonProperty("self", Required = Required.Always)]
+        public long Self { get; set; }
+    }
+
+    public partial record ToJson
+    {
+        [JsonProperty("to_json", Required = Required.Always)]
+        public long ToJsonToJson { get; set; }
+    }
+
+    public partial record TrueClass
+    {
+        [JsonProperty("true", Required = Required.Always)]
+        public long True { get; set; }
+    }
+
+    public partial record Obj4Type
+    {
+        [JsonProperty("type", Required = Required.Always)]
+        public long Type { get; set; }
+    }
+
+    public partial record Public
+    {
+        [JsonProperty("public", Required = Required.Always)]
+        public long PublicPublic { get; set; }
+    }
+
+    public partial record Quicktype
+    {
+        [JsonProperty("quicktype", Required = Required.Always)]
+        public long QuicktypeQuicktype { get; set; }
+    }
+
+    public partial record Raise
+    {
+        [JsonProperty("raise", Required = Required.Always)]
+        public long RaiseRaise { get; set; }
+    }
+
+    public partial record Range
+    {
+        [JsonProperty("range", Required = Required.Always)]
+        public long RangeRange { get; set; }
+    }
+
+    public partial record Readonly
+    {
+        [JsonProperty("readonly", Required = Required.Always)]
+        public long ReadonlyReadonly { get; set; }
+    }
+
+    public partial record Ref
+    {
+        [JsonProperty("ref", Required = Required.Always)]
+        public long RefRef { get; set; }
+    }
+
+    public partial record Register
+    {
+        [JsonProperty("register", Required = Required.Always)]
+        public long RegisterRegister { get; set; }
+    }
+
+    public partial record ReinterpretCast
+    {
+        [JsonProperty("reinterpret_cast", Required = Required.Always)]
+        public long ReinterpretCastReinterpretCast { get; set; }
+    }
+
+    public partial record Repeat
+    {
+        [JsonProperty("repeat", Required = Required.Always)]
+        public long RepeatRepeat { get; set; }
+    }
+
+    public partial record Require
+    {
+        [JsonProperty("require", Required = Required.Always)]
+        public long RequireRequire { get; set; }
+    }
+
+    public partial record Requires
+    {
+        [JsonProperty("requires", Required = Required.Always)]
+        public long RequiresRequires { get; set; }
+    }
+
+    public partial record Restrict
+    {
+        [JsonProperty("restrict", Required = Required.Always)]
+        public long RestrictRestrict { get; set; }
+    }
+
+    public partial record Retain
+    {
+        [JsonProperty("retain", Required = Required.Always)]
+        public long RetainRetain { get; set; }
+    }
+
+    public partial record Rethrows
+    {
+        [JsonProperty("rethrows", Required = Required.Always)]
+        public long RethrowsRethrows { get; set; }
+    }
+
+    public partial record Return
+    {
+        [JsonProperty("return", Required = Required.Always)]
+        public long ReturnReturn { get; set; }
+    }
+
+    public partial record Right
+    {
+        [JsonProperty("right", Required = Required.Always)]
+        public long RightRight { get; set; }
+    }
+
+    public partial record Sbyte
+    {
+        [JsonProperty("sbyte", Required = Required.Always)]
+        public long SbyteSbyte { get; set; }
+    }
+
+    public partial record Sealed
+    {
+        [JsonProperty("sealed", Required = Required.Always)]
+        public long SealedSealed { get; set; }
+    }
+
+    public partial record Sel
+    {
+        [JsonProperty("SEL", Required = Required.Always)]
+        public long SelSel { get; set; }
+    }
+
+    public partial record Select
+    {
+        [JsonProperty("select", Required = Required.Always)]
+        public long SelectSelect { get; set; }
+    }
+
+    public partial record Self
+    {
+        [JsonProperty("Self", Required = Required.Always)]
+        public long SelfSelf { get; set; }
+    }
+
+    public partial record SerializeClass
+    {
+        [JsonProperty("serialize", Required = Required.Always)]
+        public long Serialize { get; set; }
+    }
+
+    public partial record Set
+    {
+        [JsonProperty("set", Required = Required.Always)]
+        public long SetSet { get; set; }
+    }
+
+    public partial record Short
+    {
+        [JsonProperty("short", Required = Required.Always)]
+        public long ShortShort { get; set; }
+    }
+
+    public partial record Signed
+    {
+        [JsonProperty("signed", Required = Required.Always)]
+        public long SignedSigned { get; set; }
+    }
+
+    public partial record Sizeof
+    {
+        [JsonProperty("sizeof", Required = Required.Always)]
+        public long SizeofSizeof { get; set; }
+    }
+
+    public partial record Stackalloc
+    {
+        [JsonProperty("stackalloc", Required = Required.Always)]
+        public long StackallocStackalloc { get; set; }
+    }
+
+    public partial record Static
+    {
+        [JsonProperty("static", Required = Required.Always)]
+        public long StaticStatic { get; set; }
+    }
+
+    public partial record StaticAssert
+    {
+        [JsonProperty("static_assert", Required = Required.Always)]
+        public long StaticAssertStaticAssert { get; set; }
+    }
+
+    public partial record StaticCast
+    {
+        [JsonProperty("static_cast", Required = Required.Always)]
+        public long StaticCastStaticCast { get; set; }
+    }
+
+    public partial record Strictfp
+    {
+        [JsonProperty("strictfp", Required = Required.Always)]
+        public long StrictfpStrictfp { get; set; }
+    }
+
+    public partial record String
+    {
+        [JsonProperty("string", Required = Required.Always)]
+        public long StringString { get; set; }
+    }
+
+    public partial record Struct
+    {
+        [JsonProperty("struct", Required = Required.Always)]
+        public long StructStruct { get; set; }
+    }
+
+    public partial record Subscript
+    {
+        [JsonProperty("subscript", Required = Required.Always)]
+        public long SubscriptSubscript { get; set; }
+    }
+
+    public partial record Super
+    {
+        [JsonProperty("super", Required = Required.Always)]
+        public long SuperSuper { get; set; }
+    }
+
+    public partial record Switch
+    {
+        [JsonProperty("switch", Required = Required.Always)]
+        public long SwitchSwitch { get; set; }
+    }
+
+    public partial record Symbol
+    {
+        [JsonProperty("symbol", Required = Required.Always)]
+        public long SymbolSymbol { get; set; }
+    }
+
+    public partial record Synchronized
+    {
+        [JsonProperty("synchronized", Required = Required.Always)]
+        public long SynchronizedSynchronized { get; set; }
+    }
+
+    public partial record SystemClass
+    {
+        [JsonProperty("system", Required = Required.Always)]
+        public long System { get; set; }
+    }
+
+    public partial record Template
+    {
+        [JsonProperty("template", Required = Required.Always)]
+        public long TemplateTemplate { get; set; }
+    }
+
+    public partial record Then
+    {
+        [JsonProperty("then", Required = Required.Always)]
+        public long ThenThen { get; set; }
+    }
+
+    public partial record This
+    {
+        [JsonProperty("this", Required = Required.Always)]
+        public long ThisThis { get; set; }
+    }
+
+    public partial record ThreadLocal
+    {
+        [JsonProperty("thread_local", Required = Required.Always)]
+        public long ThreadLocalThreadLocal { get; set; }
+    }
+
+    public partial record Throw
+    {
+        [JsonProperty("throw", Required = Required.Always)]
+        public long ThrowThrow { get; set; }
+    }
+
+    public partial record Throws
+    {
+        [JsonProperty("throws", Required = Required.Always)]
+        public long ThrowsThrows { get; set; }
+    }
+
+    public partial record TopLevelClass
+    {
+        [JsonProperty("top_level", Required = Required.Always)]
+        public long TopLevel { get; set; }
+    }
+
+    public partial record Transient
+    {
+        [JsonProperty("transient", Required = Required.Always)]
+        public long TransientTransient { get; set; }
+    }
+
+    public partial record True
+    {
+        [JsonProperty("True", Required = Required.Always)]
+        public long TrueTrue { get; set; }
+    }
+
+    public partial record Try
+    {
+        [JsonProperty("try", Required = Required.Always)]
+        public long TryTry { get; set; }
+    }
+
+    public partial record TypeClass
+    {
+        [JsonProperty("Type", Required = Required.Always)]
+        public long Type { get; set; }
+    }
+
+    public partial record Typealias
+    {
+        [JsonProperty("typealias", Required = Required.Always)]
+        public long TypealiasTypealias { get; set; }
+    }
+
+    public partial record Typedef
+    {
+        [JsonProperty("typedef", Required = Required.Always)]
+        public long TypedefTypedef { get; set; }
+    }
+
+    public partial record Typeid
+    {
+        [JsonProperty("typeid", Required = Required.Always)]
+        public long TypeidTypeid { get; set; }
+    }
+
+    public partial record Typename
+    {
+        [JsonProperty("typename", Required = Required.Always)]
+        public long TypenameTypename { get; set; }
+    }
+
+    public partial record Typeof
+    {
+        [JsonProperty("typeof", Required = Required.Always)]
+        public long TypeofTypeof { get; set; }
+    }
+
+    public partial record Uint
+    {
+        [JsonProperty("uint", Required = Required.Always)]
+        public long UintUint { get; set; }
+    }
+
+    public partial record Ulong
+    {
+        [JsonProperty("ulong", Required = Required.Always)]
+        public long UlongUlong { get; set; }
+    }
+
+    public partial record Unchecked
+    {
+        [JsonProperty("unchecked", Required = Required.Always)]
+        public long UncheckedUnchecked { get; set; }
+    }
+
+    public partial record Undefined
+    {
+        [JsonProperty("undefined", Required = Required.Always)]
+        public long UndefinedUndefined { get; set; }
+    }
+
+    public partial record Obj5
+    {
+        [JsonProperty("dummy", Required = Required.Always)]
+        public long Dummy { get; set; }
+
+        [JsonProperty("union", Required = Required.Always)]
+        public Union Union { get; set; }
+
+        [JsonProperty("unowned", Required = Required.Always)]
+        public Unowned Unowned { get; set; }
+
+        [JsonProperty("unsafe", Required = Required.Always)]
+        public Unsafe Unsafe { get; set; }
+
+        [JsonProperty("unsigned", Required = Required.Always)]
+        public Unsigned Unsigned { get; set; }
+
+        [JsonProperty("ushort", Required = Required.Always)]
+        public Ushort Ushort { get; set; }
+
+        [JsonProperty("using", Required = Required.Always)]
+        public Using Using { get; set; }
+
+        [JsonProperty("var", Required = Required.Always)]
+        public Var Var { get; set; }
+
+        [JsonProperty("virtual", Required = Required.Always)]
+        public Virtual Virtual { get; set; }
+
+        [JsonProperty("void", Required = Required.Always)]
+        public Void Void { get; set; }
+
+        [JsonProperty("volatile", Required = Required.Always)]
+        public Volatile Volatile { get; set; }
+
+        [JsonProperty("wchar_t", Required = Required.Always)]
+        public WcharT WcharT { get; set; }
+
+        [JsonProperty("weak", Required = Required.Always)]
+        public Weak Weak { get; set; }
+
+        [JsonProperty("where", Required = Required.Always)]
+        public Where Where { get; set; }
+
+        [JsonProperty("while", Required = Required.Always)]
+        public While While { get; set; }
+
+        [JsonProperty("willSet", Required = Required.Always)]
+        public WillSet WillSet { get; set; }
+
+        [JsonProperty("with", Required = Required.Always)]
+        public With With { get; set; }
+
+        [JsonProperty("xor", Required = Required.Always)]
+        public Xor Xor { get; set; }
+
+        [JsonProperty("xor_eq", Required = Required.Always)]
+        public XorEq XorEq { get; set; }
+
+        [JsonProperty("YES", Required = Required.Always)]
+        public Yes Yes { get; set; }
+
+        [JsonProperty("yield", Required = Required.Always)]
+        public Yield Yield { get; set; }
+    }
+
+    public partial record Union
+    {
+        [JsonProperty("union", Required = Required.Always)]
+        public long UnionUnion { get; set; }
+    }
+
+    public partial record Unowned
+    {
+        [JsonProperty("unowned", Required = Required.Always)]
+        public long UnownedUnowned { get; set; }
+    }
+
+    public partial record Unsafe
+    {
+        [JsonProperty("unsafe", Required = Required.Always)]
+        public long UnsafeUnsafe { get; set; }
+    }
+
+    public partial record Unsigned
+    {
+        [JsonProperty("unsigned", Required = Required.Always)]
+        public long UnsignedUnsigned { get; set; }
+    }
+
+    public partial record Ushort
+    {
+        [JsonProperty("ushort", Required = Required.Always)]
+        public long UshortUshort { get; set; }
+    }
+
+    public partial record Using
+    {
+        [JsonProperty("using", Required = Required.Always)]
+        public long UsingUsing { get; set; }
+    }
+
+    public partial record Var
+    {
+        [JsonProperty("var", Required = Required.Always)]
+        public long VarVar { get; set; }
+    }
+
+    public partial record Virtual
+    {
+        [JsonProperty("virtual", Required = Required.Always)]
+        public long VirtualVirtual { get; set; }
+    }
+
+    public partial record Void
+    {
+        [JsonProperty("void", Required = Required.Always)]
+        public long VoidVoid { get; set; }
+    }
+
+    public partial record Volatile
+    {
+        [JsonProperty("volatile", Required = Required.Always)]
+        public long VolatileVolatile { get; set; }
+    }
+
+    public partial record WcharT
+    {
+        [JsonProperty("wchar_t", Required = Required.Always)]
+        public long WcharTWcharT { get; set; }
+    }
+
+    public partial record Weak
+    {
+        [JsonProperty("weak", Required = Required.Always)]
+        public long WeakWeak { get; set; }
+    }
+
+    public partial record Where
+    {
+        [JsonProperty("where", Required = Required.Always)]
+        public long WhereWhere { get; set; }
+    }
+
+    public partial record While
+    {
+        [JsonProperty("while", Required = Required.Always)]
+        public long WhileWhile { get; set; }
+    }
+
+    public partial record WillSet
+    {
+        [JsonProperty("willSet", Required = Required.Always)]
+        public long WillSetWillSet { get; set; }
+    }
+
+    public partial record With
+    {
+        [JsonProperty("with", Required = Required.Always)]
+        public long WithWith { get; set; }
+    }
+
+    public partial record Xor
+    {
+        [JsonProperty("xor", Required = Required.Always)]
+        public long XorXor { get; set; }
+    }
+
+    public partial record XorEq
+    {
+        [JsonProperty("xor_eq", Required = Required.Always)]
+        public long XorEqXorEq { get; set; }
+    }
+
+    public partial record Yes
+    {
+        [JsonProperty("YES", Required = Required.Always)]
+        public long YesYes { get; set; }
+    }
+
+    public partial record Yield
+    {
+        [JsonProperty("yield", Required = Required.Always)]
+        public long YieldYield { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/QuickType.cs
new file mode 100644
index 0000000..25c2750
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/QuickType.cs
@@ -0,0 +1,105 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("category", Required = Required.Always)]
+        public Category Category { get; set; }
+    }
+
+    public enum Category { Empty, Category };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CategoryConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CategoryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Category) || t == typeof(Category?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case " ":
+                    return Category.Empty;
+                case "":
+                    return Category.Category;
+            }
+            throw new Exception("Cannot unmarshal type Category");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Category)untypedValue;
+            switch (value)
+            {
+                case Category.Empty:
+                    serializer.Serialize(writer, " ");
+                    return;
+                case Category.Category:
+                    serializer.Serialize(writer, "");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Category");
+        }
+
+        public static readonly CategoryConverter Singleton = new CategoryConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/list.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/list.json/default/QuickType.cs
new file mode 100644
index 0000000..a24a8bc
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/list.json/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public long Data { get; set; }
+
+        [JsonProperty("next", Required = Required.AllowNull)]
+        public TopLevel? Next { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/name-style.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/name-style.json/default/QuickType.cs
new file mode 100644
index 0000000..7dcd97b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/name-style.json/default/QuickType.cs
@@ -0,0 +1,79 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("anEasyOne", Required = Required.Always)]
+        public long AnEasyOne { get; set; }
+
+        [JsonProperty("isMNISTLetter", Required = Required.Always)]
+        public bool IsMnistLetter { get; set; }
+
+        [JsonProperty("JSONString", Required = Required.Always)]
+        public string JsonString { get; set; }
+
+        [JsonProperty("PrettyEasyToo", Required = Required.Always)]
+        public bool PrettyEasyToo { get; set; }
+
+        [JsonProperty("should_know_that_id_is_an_initialism", Required = Required.Always)]
+        public string ShouldKnowThatIdIsAnInitialism { get; set; }
+
+        [JsonProperty("   spaces are separators  too  ", Required = Required.Always)]
+        public bool SpacesAreSeparatorsToo { get; set; }
+
+        [JsonProperty("ZSR_HH_DEMO3_DELMATNR", Required = Required.Always)]
+        public bool ZsrHhDemo3Delmatnr { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/nested-objects.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/nested-objects.json/default/QuickType.cs
new file mode 100644
index 0000000..7f0b99d
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/nested-objects.json/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("a", Required = Required.Always)]
+        public Dictionary<string, long> A { get; set; }
+
+        [JsonProperty("b", Required = Required.Always)]
+        public Dictionary<string, long> B { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/no-classes.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/no-classes.json/default/QuickType.cs
new file mode 100644
index 0000000..e20dc09
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/no-classes.json/default/QuickType.cs
@@ -0,0 +1,55 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public class TopLevel
+    {
+        public static long FromJson(string json) => JsonConvert.DeserializeObject<long>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this long self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/nst-test-suite.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/nst-test-suite.json/default/QuickType.cs
new file mode 100644
index 0000000..59d8494
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/nst-test-suite.json/default/QuickType.cs
@@ -0,0 +1,474 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("y_number_0e1.json", Required = Required.Always)]
+        public double[] TopLevelYNumber0E1Json { get; set; }
+
+        [JsonProperty("y_array_arraysWithSpaces.json", Required = Required.Always)]
+        public object[][] YArrayArraysWithSpacesJson { get; set; }
+
+        [JsonProperty("y_array_empty.json", Required = Required.Always)]
+        public object[] YArrayEmptyJson { get; set; }
+
+        [JsonProperty("y_array_empty-string.json", Required = Required.Always)]
+        public string[] YArrayEmptyStringJson { get; set; }
+
+        [JsonProperty("y_array_ending_with_newline.json", Required = Required.Always)]
+        public string[] YArrayEndingWithNewlineJson { get; set; }
+
+        [JsonProperty("y_array_false.json", Required = Required.Always)]
+        public bool[] YArrayFalseJson { get; set; }
+
+        [JsonProperty("y_array_heterogeneous.json", Required = Required.Always)]
+        public YArrayHeterogeneousJson[] YArrayHeterogeneousJson { get; set; }
+
+        [JsonProperty("y_array_null.json", Required = Required.Always)]
+        public object[] YArrayNullJson { get; set; }
+
+        [JsonProperty("y_array_with_1_and_newline.json", Required = Required.Always)]
+        public long[] YArrayWith1_AndNewlineJson { get; set; }
+
+        [JsonProperty("y_array_with_leading_space.json", Required = Required.Always)]
+        public long[] YArrayWithLeadingSpaceJson { get; set; }
+
+        [JsonProperty("y_array_with_several_null.json", Required = Required.Always)]
+        public long?[] YArrayWithSeveralNullJson { get; set; }
+
+        [JsonProperty("y_array_with_trailing_space.json", Required = Required.Always)]
+        public long[] YArrayWithTrailingSpaceJson { get; set; }
+
+        [JsonProperty("y_number_0e+1.json", Required = Required.Always)]
+        public double[] YNumber0E1Json { get; set; }
+
+        [JsonProperty("y_number_after_space.json", Required = Required.Always)]
+        public long[] YNumberAfterSpaceJson { get; set; }
+
+        [JsonProperty("y_number_double_close_to_zero.json", Required = Required.Always)]
+        public double[] YNumberDoubleCloseToZeroJson { get; set; }
+
+        [JsonProperty("y_number_int_with_exp.json", Required = Required.Always)]
+        public double[] YNumberIntWithExpJson { get; set; }
+
+        [JsonProperty("y_number.json", Required = Required.Always)]
+        public double[] YNumberJson { get; set; }
+
+        [JsonProperty("y_number_minus_zero.json", Required = Required.Always)]
+        public long[] YNumberMinusZeroJson { get; set; }
+
+        [JsonProperty("y_number_negative_int.json", Required = Required.Always)]
+        public long[] YNumberNegativeIntJson { get; set; }
+
+        [JsonProperty("y_number_negative_one.json", Required = Required.Always)]
+        public long[] YNumberNegativeOneJson { get; set; }
+
+        [JsonProperty("y_number_negative_zero.json", Required = Required.Always)]
+        public long[] YNumberNegativeZeroJson { get; set; }
+
+        [JsonProperty("y_number_real_capital_e.json", Required = Required.Always)]
+        public double[] YNumberRealCapitalEJson { get; set; }
+
+        [JsonProperty("y_number_real_capital_e_neg_exp.json", Required = Required.Always)]
+        public double[] YNumberRealCapitalENegExpJson { get; set; }
+
+        [JsonProperty("y_number_real_capital_e_pos_exp.json", Required = Required.Always)]
+        public double[] YNumberRealCapitalEPosExpJson { get; set; }
+
+        [JsonProperty("y_number_real_exponent.json", Required = Required.Always)]
+        public double[] YNumberRealExponentJson { get; set; }
+
+        [JsonProperty("y_number_real_fraction_exponent.json", Required = Required.Always)]
+        public double[] YNumberRealFractionExponentJson { get; set; }
+
+        [JsonProperty("y_number_real_neg_exp.json", Required = Required.Always)]
+        public double[] YNumberRealNegExpJson { get; set; }
+
+        [JsonProperty("y_number_real_pos_exponent.json", Required = Required.Always)]
+        public double[] YNumberRealPosExponentJson { get; set; }
+
+        [JsonProperty("y_number_simple_int.json", Required = Required.Always)]
+        public long[] YNumberSimpleIntJson { get; set; }
+
+        [JsonProperty("y_number_simple_real.json", Required = Required.Always)]
+        public double[] YNumberSimpleRealJson { get; set; }
+
+        [JsonProperty("y_object_basic.json", Required = Required.Always)]
+        public YObjectBasicJson YObjectBasicJson { get; set; }
+
+        [JsonProperty("y_object_empty.json", Required = Required.Always)]
+        public Json YObjectEmptyJson { get; set; }
+
+        [JsonProperty("y_object_empty_key.json", Required = Required.Always)]
+        public YObjectEmptyKeyJson YObjectEmptyKeyJson { get; set; }
+
+        [JsonProperty("y_object_escaped_null_in_key.json", Required = Required.Always)]
+        public YObjectEscapedNullInKeyJson YObjectEscapedNullInKeyJson { get; set; }
+
+        [JsonProperty("y_object_extreme_numbers.json", Required = Required.Always)]
+        public YObjectExtremeNumbersJson YObjectExtremeNumbersJson { get; set; }
+
+        [JsonProperty("y_object.json", Required = Required.Always)]
+        public YObjectJson YObjectJson { get; set; }
+
+        [JsonProperty("y_object_long_strings.json", Required = Required.Always)]
+        public YObjectLongStringsJson YObjectLongStringsJson { get; set; }
+
+        [JsonProperty("y_object_simple.json", Required = Required.Always)]
+        public YObjectSimpleJson YObjectSimpleJson { get; set; }
+
+        [JsonProperty("y_object_string_unicode.json", Required = Required.Always)]
+        public YObjectStringUnicodeJson YObjectStringUnicodeJson { get; set; }
+
+        [JsonProperty("y_object_with_newlines.json", Required = Required.Always)]
+        public YObjectWithNewlinesJson YObjectWithNewlinesJson { get; set; }
+
+        [JsonProperty("y_string_1_2_3_bytes_UTF-8_sequences.json", Required = Required.Always)]
+        public string[] YString1_2_3_BytesUtf8_SequencesJson { get; set; }
+
+        [JsonProperty("y_string_accepted_surrogate_pair.json", Required = Required.Always)]
+        public string[] YStringAcceptedSurrogatePairJson { get; set; }
+
+        [JsonProperty("y_string_accepted_surrogate_pairs.json", Required = Required.Always)]
+        public string[] YStringAcceptedSurrogatePairsJson { get; set; }
+
+        [JsonProperty("y_string_allowed_escapes.json", Required = Required.Always)]
+        public string[] YStringAllowedEscapesJson { get; set; }
+
+        [JsonProperty("y_string_backslash_and_u_escaped_zero.json", Required = Required.Always)]
+        public string[] YStringBackslashAndUEscapedZeroJson { get; set; }
+
+        [JsonProperty("y_string_backslash_doublequotes.json", Required = Required.Always)]
+        public string[] YStringBackslashDoublequotesJson { get; set; }
+
+        [JsonProperty("y_string_comments.json", Required = Required.Always)]
+        public string[] YStringCommentsJson { get; set; }
+
+        [JsonProperty("y_string_double_escape_a.json", Required = Required.Always)]
+        public string[] YStringDoubleEscapeAJson { get; set; }
+
+        [JsonProperty("y_string_double_escape_n.json", Required = Required.Always)]
+        public string[] YStringDoubleEscapeNJson { get; set; }
+
+        [JsonProperty("y_string_escaped_control_character.json", Required = Required.Always)]
+        public string[] YStringEscapedControlCharacterJson { get; set; }
+
+        [JsonProperty("y_string_escaped_noncharacter.json", Required = Required.Always)]
+        public string[] YStringEscapedNoncharacterJson { get; set; }
+
+        [JsonProperty("y_string_in_array.json", Required = Required.Always)]
+        public string[] YStringInArrayJson { get; set; }
+
+        [JsonProperty("y_string_in_array_with_leading_space.json", Required = Required.Always)]
+        public string[] YStringInArrayWithLeadingSpaceJson { get; set; }
+
+        [JsonProperty("y_string_last_surrogates_1_and_2.json", Required = Required.Always)]
+        public string[] YStringLastSurrogates1_And2Json { get; set; }
+
+        [JsonProperty("y_string_nbsp_uescaped.json", Required = Required.Always)]
+        public string[] YStringNbspUescapedJson { get; set; }
+
+        [JsonProperty("y_string_nonCharacterInUTF-8_U+10FFFF.json", Required = Required.Always)]
+        public string[] YStringNonCharacterInUtf8_U10FfffJson { get; set; }
+
+        [JsonProperty("y_string_nonCharacterInUTF-8_U+1FFFF.json", Required = Required.Always)]
+        public string[] YStringNonCharacterInUtf8_U1FfffJson { get; set; }
+
+        [JsonProperty("y_string_nonCharacterInUTF-8_U+FFFF.json", Required = Required.Always)]
+        public string[] YStringNonCharacterInUtf8_UFfffJson { get; set; }
+
+        [JsonProperty("y_string_null_escape.json", Required = Required.Always)]
+        public string[] YStringNullEscapeJson { get; set; }
+
+        [JsonProperty("y_string_one-byte-utf-8.json", Required = Required.Always)]
+        public string[] YStringOneByteUtf8Json { get; set; }
+
+        [JsonProperty("y_string_pi.json", Required = Required.Always)]
+        public string[] YStringPiJson { get; set; }
+
+        [JsonProperty("y_string_simple_ascii.json", Required = Required.Always)]
+        public string[] YStringSimpleAsciiJson { get; set; }
+
+        [JsonProperty("y_string_space.json", Required = Required.Always)]
+        public string YStringSpaceJson { get; set; }
+
+        [JsonProperty("y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json", Required = Required.Always)]
+        public string[] YStringSurrogatesU1D11EMusicalSymbolGClefJson { get; set; }
+
+        [JsonProperty("y_string_three-byte-utf-8.json", Required = Required.Always)]
+        public string[] YStringThreeByteUtf8Json { get; set; }
+
+        [JsonProperty("y_string_two-byte-utf-8.json", Required = Required.Always)]
+        public string[] YStringTwoByteUtf8Json { get; set; }
+
+        [JsonProperty("y_string_u+2028_line_sep.json", Required = Required.Always)]
+        public string[] YStringU2028_LineSepJson { get; set; }
+
+        [JsonProperty("y_string_u+2029_par_sep.json", Required = Required.Always)]
+        public string[] YStringU2029_ParSepJson { get; set; }
+
+        [JsonProperty("y_string_uEscape.json", Required = Required.Always)]
+        public string[] YStringUEscapeJson { get; set; }
+
+        [JsonProperty("y_string_uescaped_newline.json", Required = Required.Always)]
+        public string[] YStringUescapedNewlineJson { get; set; }
+
+        [JsonProperty("y_string_unescaped_char_delete.json", Required = Required.Always)]
+        public string[] YStringUnescapedCharDeleteJson { get; set; }
+
+        [JsonProperty("y_string_unicode_2.json", Required = Required.Always)]
+        public string[] YStringUnicode2Json { get; set; }
+
+        [JsonProperty("y_string_unicodeEscapedBackslash.json", Required = Required.Always)]
+        public string[] YStringUnicodeEscapedBackslashJson { get; set; }
+
+        [JsonProperty("y_string_unicode_escaped_double_quote.json", Required = Required.Always)]
+        public string[] YStringUnicodeEscapedDoubleQuoteJson { get; set; }
+
+        [JsonProperty("y_string_unicode.json", Required = Required.Always)]
+        public string[] YStringUnicodeJson { get; set; }
+
+        [JsonProperty("y_string_unicode_U+10FFFE_nonchar.json", Required = Required.Always)]
+        public string[] YStringUnicodeU10FffeNoncharJson { get; set; }
+
+        [JsonProperty("y_string_unicode_U+1FFFE_nonchar.json", Required = Required.Always)]
+        public string[] YStringUnicodeU1FffeNoncharJson { get; set; }
+
+        [JsonProperty("y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json", Required = Required.Always)]
+        public string[] YStringUnicodeU200BZeroWidthSpaceJson { get; set; }
+
+        [JsonProperty("y_string_unicode_U+2064_invisible_plus.json", Required = Required.Always)]
+        public string[] YStringUnicodeU2064_InvisiblePlusJson { get; set; }
+
+        [JsonProperty("y_string_unicode_U+FDD0_nonchar.json", Required = Required.Always)]
+        public string[] YStringUnicodeUFdd0NoncharJson { get; set; }
+
+        [JsonProperty("y_string_unicode_U+FFFE_nonchar.json", Required = Required.Always)]
+        public string[] YStringUnicodeUFffeNoncharJson { get; set; }
+
+        [JsonProperty("y_string_utf8.json", Required = Required.Always)]
+        public string[] YStringUtf8Json { get; set; }
+
+        [JsonProperty("y_string_with_del_character.json", Required = Required.Always)]
+        public string[] YStringWithDelCharacterJson { get; set; }
+
+        [JsonProperty("y_structure_lonely_false.json", Required = Required.Always)]
+        public bool YStructureLonelyFalseJson { get; set; }
+
+        [JsonProperty("y_structure_lonely_int.json", Required = Required.Always)]
+        public long YStructureLonelyIntJson { get; set; }
+
+        [JsonProperty("y_structure_lonely_negative_real.json", Required = Required.Always)]
+        public double YStructureLonelyNegativeRealJson { get; set; }
+
+        [JsonProperty("y_structure_lonely_null.json", Required = Required.AllowNull)]
+        public object YStructureLonelyNullJson { get; set; }
+
+        [JsonProperty("y_structure_lonely_string.json", Required = Required.Always)]
+        public string YStructureLonelyStringJson { get; set; }
+
+        [JsonProperty("y_structure_lonely_true.json", Required = Required.Always)]
+        public bool YStructureLonelyTrueJson { get; set; }
+
+        [JsonProperty("y_structure_string_empty.json", Required = Required.Always)]
+        public string YStructureStringEmptyJson { get; set; }
+
+        [JsonProperty("y_structure_trailing_newline.json", Required = Required.Always)]
+        public string[] YStructureTrailingNewlineJson { get; set; }
+
+        [JsonProperty("y_structure_true_in_array.json", Required = Required.Always)]
+        public bool[] YStructureTrueInArrayJson { get; set; }
+
+        [JsonProperty("y_structure_whitespace_array.json", Required = Required.Always)]
+        public object[] YStructureWhitespaceArrayJson { get; set; }
+    }
+
+    public partial record Json
+    {
+    }
+
+    public partial record YObjectBasicJson
+    {
+        [JsonProperty("asd", Required = Required.Always)]
+        public string Asd { get; set; }
+    }
+
+    public partial record YObjectEmptyKeyJson
+    {
+        [JsonProperty("", Required = Required.Always)]
+        public long Empty { get; set; }
+    }
+
+    public partial record YObjectEscapedNullInKeyJson
+    {
+        [JsonProperty("foo\u0000bar", Required = Required.Always)]
+        public long FooBar { get; set; }
+    }
+
+    public partial record YObjectExtremeNumbersJson
+    {
+        [JsonProperty("max", Required = Required.Always)]
+        public double Max { get; set; }
+
+        [JsonProperty("min", Required = Required.Always)]
+        public double Min { get; set; }
+    }
+
+    public partial record YObjectJson
+    {
+        [JsonProperty("asd", Required = Required.Always)]
+        public string Asd { get; set; }
+
+        [JsonProperty("dfg", Required = Required.Always)]
+        public string Dfg { get; set; }
+    }
+
+    public partial record YObjectLongStringsJson
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("x", Required = Required.Always)]
+        public X[] X { get; set; }
+    }
+
+    public partial record X
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+    }
+
+    public partial record YObjectSimpleJson
+    {
+        [JsonProperty("a", Required = Required.Always)]
+        public object[] A { get; set; }
+    }
+
+    public partial record YObjectStringUnicodeJson
+    {
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+    }
+
+    public partial record YObjectWithNewlinesJson
+    {
+        [JsonProperty("a", Required = Required.Always)]
+        public string A { get; set; }
+    }
+
+    public partial struct YArrayHeterogeneousJson
+    {
+        public long? Integer;
+        public Json? Json;
+
+        public static implicit operator YArrayHeterogeneousJson(long Integer) => new YArrayHeterogeneousJson { Integer = Integer };
+        public static implicit operator YArrayHeterogeneousJson(Json Json) => new YArrayHeterogeneousJson { Json = Json };
+        public bool IsNull => Json == null && Integer == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                YArrayHeterogeneousJsonConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class YArrayHeterogeneousJsonConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(YArrayHeterogeneousJson) || t == typeof(YArrayHeterogeneousJson?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new YArrayHeterogeneousJson { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new YArrayHeterogeneousJson { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    long l;
+                    if (Int64.TryParse(stringValue, out l))
+                    {
+                        return new YArrayHeterogeneousJson { Integer = l };
+                    }
+                    break;
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Json>(reader);
+                    return new YArrayHeterogeneousJson { Json = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type YArrayHeterogeneousJson");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (YArrayHeterogeneousJson)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Json != null)
+            {
+                serializer.Serialize(writer, value.Json);
+                return;
+            }
+            throw new Exception("Cannot marshal type YArrayHeterogeneousJson");
+        }
+
+        public static readonly YArrayHeterogeneousJsonConverter Singleton = new YArrayHeterogeneousJsonConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/number-map.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/number-map.json/default/QuickType.cs
new file mode 100644
index 0000000..c5c49c7
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/number-map.json/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.Always)]
+        public Dictionary<string, double> Foo { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/omit-empty.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/omit-empty.json/default/QuickType.cs
new file mode 100644
index 0000000..e6ed632
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/omit-empty.json/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("results", Required = Required.Always)]
+        public Result[] Results { get; set; }
+    }
+
+    public partial record Result
+    {
+        [JsonProperty("age", Required = Required.Always)]
+        public long Age { get; set; }
+
+        [JsonProperty("name")]
+        public object? Name { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/optional-union.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/optional-union.json/default/QuickType.cs
new file mode 100644
index 0000000..648686c
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/optional-union.json/default/QuickType.cs
@@ -0,0 +1,109 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("a", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public A? A { get; set; }
+    }
+
+    public partial struct A
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator A(long Integer) => new A { Integer = Integer };
+        public static implicit operator A(string String) => new A { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                AConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class AConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(A) || t == typeof(A?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new A { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new A { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type A");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (A)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type A");
+        }
+
+        public static readonly AConverter Singleton = new AConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/php-mixed-union.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/php-mixed-union.json/default/QuickType.cs
new file mode 100644
index 0000000..5597678
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/php-mixed-union.json/default/QuickType.cs
@@ -0,0 +1,143 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("mixed", Required = Required.Always)]
+        public MixedElement[] Mixed { get; set; }
+    }
+
+    public partial record MixedClass
+    {
+        [JsonProperty("nested", Required = Required.Always)]
+        public string Nested { get; set; }
+    }
+
+    public partial struct MixedElement
+    {
+        public bool? Bool;
+        public long? Integer;
+        public MixedClass? MixedClass;
+        public string? String;
+
+        public static implicit operator MixedElement(bool Bool) => new MixedElement { Bool = Bool };
+        public static implicit operator MixedElement(long Integer) => new MixedElement { Integer = Integer };
+        public static implicit operator MixedElement(MixedClass MixedClass) => new MixedElement { MixedClass = MixedClass };
+        public static implicit operator MixedElement(string String) => new MixedElement { String = String };
+        public bool IsNull => Bool == null && MixedClass == null && Integer == null && String == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                MixedElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class MixedElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(MixedElement) || t == typeof(MixedElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new MixedElement { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new MixedElement { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new MixedElement { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new MixedElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MixedClass>(reader);
+                    return new MixedElement { MixedClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type MixedElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (MixedElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.MixedClass != null)
+            {
+                serializer.Serialize(writer, value.MixedClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type MixedElement");
+        }
+
+        public static readonly MixedElementConverter Singleton = new MixedElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/php-validation.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/php-validation.json/default/QuickType.cs
new file mode 100644
index 0000000..42c5d23
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/php-validation.json/default/QuickType.cs
@@ -0,0 +1,73 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("boolean", Required = Required.Always)]
+        public bool Boolean { get; set; }
+
+        [JsonProperty("integer", Required = Required.Always)]
+        public long Integer { get; set; }
+
+        [JsonProperty("integers", Required = Required.Always)]
+        public long[] Integers { get; set; }
+
+        [JsonProperty("number", Required = Required.Always)]
+        public double Number { get; set; }
+
+        [JsonProperty("string", Required = Required.Always)]
+        public string String { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/recursive.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/recursive.json/default/QuickType.cs
new file mode 100644
index 0000000..99e9e31
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/recursive.json/default/QuickType.cs
@@ -0,0 +1,322 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("category", Required = Required.Always)]
+        public Category Category { get; set; }
+
+        [JsonProperty("details", Required = Required.Always)]
+        public Details Details { get; set; }
+
+        [JsonProperty("match", Required = Required.Always)]
+        public string Match { get; set; }
+
+        [JsonProperty("page", Required = Required.Always)]
+        public long Page { get; set; }
+
+        [JsonProperty("product", Required = Required.Always)]
+        public ProductElement[] Product { get; set; }
+
+        [JsonProperty("schk", Required = Required.Always)]
+        public bool Schk { get; set; }
+
+        [JsonProperty("totallooseoffers", Required = Required.Always)]
+        public long Totallooseoffers { get; set; }
+
+        [JsonProperty("totalpages", Required = Required.Always)]
+        public long Totalpages { get; set; }
+
+        [JsonProperty("totalresultsavailable", Required = Required.Always)]
+        public long Totalresultsavailable { get; set; }
+
+        [JsonProperty("totalresultsreturned", Required = Required.Always)]
+        public long Totalresultsreturned { get; set; }
+    }
+
+    public partial record Category
+    {
+        [JsonProperty("concatenatecategoryname", Required = Required.Always)]
+        public bool Concatenatecategoryname { get; set; }
+
+        [JsonProperty("hasoffer", Required = Required.Always)]
+        public bool Hasoffer { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("isfinal", Required = Required.Always)]
+        public bool Isfinal { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public LinkElement[] Links { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("parentcategoryid", Required = Required.Always)]
+        public long Parentcategoryid { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public CategoryThumbnail Thumbnail { get; set; }
+    }
+
+    public partial record LinkElement
+    {
+        [JsonProperty("link", Required = Required.Always)]
+        public LinkLink Link { get; set; }
+    }
+
+    public partial record LinkLink
+    {
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record CategoryThumbnail
+    {
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Details
+    {
+        [JsonProperty("applicationid", Required = Required.Always)]
+        public string Applicationid { get; set; }
+
+        [JsonProperty("applicationversion", Required = Required.Always)]
+        public string Applicationversion { get; set; }
+
+        [JsonProperty("code", Required = Required.Always)]
+        public long Code { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public Date Date { get; set; }
+
+        [JsonProperty("elapsedtime", Required = Required.Always)]
+        public long Elapsedtime { get; set; }
+
+        [JsonProperty("message", Required = Required.Always)]
+        public string Message { get; set; }
+
+        [JsonProperty("status", Required = Required.Always)]
+        public string Status { get; set; }
+    }
+
+    public partial record Date
+    {
+        [JsonProperty("day", Required = Required.Always)]
+        public long Day { get; set; }
+
+        [JsonProperty("eonandyear", Required = Required.Always)]
+        public Eonandyear Eonandyear { get; set; }
+
+        [JsonProperty("hour", Required = Required.Always)]
+        public long Hour { get; set; }
+
+        [JsonProperty("millisecond", Required = Required.Always)]
+        public long Millisecond { get; set; }
+
+        [JsonProperty("minute", Required = Required.Always)]
+        public long Minute { get; set; }
+
+        [JsonProperty("month", Required = Required.Always)]
+        public long Month { get; set; }
+
+        [JsonProperty("second", Required = Required.Always)]
+        public long Second { get; set; }
+
+        [JsonProperty("timezone", Required = Required.Always)]
+        public long Timezone { get; set; }
+
+        [JsonProperty("valid", Required = Required.Always)]
+        public bool Valid { get; set; }
+
+        [JsonProperty("xmlschematype", Required = Required.Always)]
+        public Xmlschematype Xmlschematype { get; set; }
+
+        [JsonProperty("year", Required = Required.Always)]
+        public long Year { get; set; }
+    }
+
+    public partial record Eonandyear
+    {
+        [JsonProperty("lowestsetbit", Required = Required.Always)]
+        public long Lowestsetbit { get; set; }
+    }
+
+    public partial record Xmlschematype
+    {
+        [JsonProperty("localpart", Required = Required.Always)]
+        public string Localpart { get; set; }
+
+        [JsonProperty("namespaceuri", Required = Required.Always)]
+        public Uri Namespaceuri { get; set; }
+
+        [JsonProperty("prefix", Required = Required.Always)]
+        public string Prefix { get; set; }
+    }
+
+    public partial record ProductElement
+    {
+        [JsonProperty("product", Required = Required.Always)]
+        public ProductProduct Product { get; set; }
+    }
+
+    public partial record ProductProduct
+    {
+        [JsonProperty("categoryid", Required = Required.Always)]
+        public long Categoryid { get; set; }
+
+        [JsonProperty("currency", Required = Required.Always)]
+        public Currency Currency { get; set; }
+
+        [JsonProperty("eco", Required = Required.Always)]
+        public bool Eco { get; set; }
+
+        [JsonProperty("fulldescription", Required = Required.Always)]
+        public bool Fulldescription { get; set; }
+
+        [JsonProperty("hasmetasearch", Required = Required.Always)]
+        public bool Hasmetasearch { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("links", Required = Required.Always)]
+        public LinkElement[] Links { get; set; }
+
+        [JsonProperty("numoffers", Required = Required.Always)]
+        public long Numoffers { get; set; }
+
+        [JsonProperty("pricemax", Required = Required.Always)]
+        public string Pricemax { get; set; }
+
+        [JsonProperty("pricemin", Required = Required.Always)]
+        public string Pricemin { get; set; }
+
+        [JsonProperty("productname", Required = Required.Always)]
+        public string Productname { get; set; }
+
+        [JsonProperty("quantity", Required = Required.Always)]
+        public long Quantity { get; set; }
+
+        [JsonProperty("rating", Required = Required.Always)]
+        public Rating Rating { get; set; }
+
+        [JsonProperty("specification", Required = Required.Always)]
+        public Specification Specification { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public FormatsClass Thumbnail { get; set; }
+
+        [JsonProperty("totalsellers", Required = Required.Always)]
+        public long Totalsellers { get; set; }
+    }
+
+    public partial record Currency
+    {
+        [JsonProperty("abbreviation", Required = Required.Always)]
+        public string Abbreviation { get; set; }
+    }
+
+    public partial record Rating
+    {
+        [JsonProperty("useraveragerating", Required = Required.Always)]
+        public Useraveragerating Useraveragerating { get; set; }
+    }
+
+    public partial record Useraveragerating
+    {
+        [JsonProperty("links", Required = Required.Always)]
+        public LinkElement[] Links { get; set; }
+
+        [JsonProperty("numcomments", Required = Required.Always)]
+        public long Numcomments { get; set; }
+
+        [JsonProperty("rating", Required = Required.Always)]
+        public string Rating { get; set; }
+    }
+
+    public partial record Specification
+    {
+        [JsonProperty("links", Required = Required.Always)]
+        public LinkElement[] Links { get; set; }
+    }
+
+    public partial record Format
+    {
+        [JsonProperty("formats", Required = Required.Always)]
+        public FormatsClass Formats { get; set; }
+    }
+
+    public partial record FormatsClass
+    {
+        [JsonProperty("formats", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Format[]? Formats { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/simple-identifiers.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/simple-identifiers.json/default/QuickType.cs
new file mode 100644
index 0000000..b95446b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/simple-identifiers.json/default/QuickType.cs
@@ -0,0 +1,85 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("continue", Required = Required.Always)]
+        public string Continue { get; set; }
+
+        [JsonProperty("", Required = Required.Always)]
+        public string Empty { get; set; }
+
+        [JsonProperty("null", Required = Required.Always)]
+        public string Null { get; set; }
+
+        [JsonProperty("{}", Required = Required.Always)]
+        public string Purple { get; set; }
+
+        [JsonProperty("x'", Required = Required.Always)]
+        public string PurpleX { get; set; }
+
+        [JsonProperty("x\"", Required = Required.Always)]
+        public string TopLevelX { get; set; }
+
+        [JsonProperty("undefined", Required = Required.Always)]
+        public string Undefined { get; set; }
+
+        [JsonProperty("x", Required = Required.Always)]
+        public string X { get; set; }
+
+        [JsonProperty("x y", Required = Required.Always)]
+        public string XY { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/union-constructor-clash.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/union-constructor-clash.json/default/QuickType.cs
new file mode 100644
index 0000000..ff59b59
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/union-constructor-clash.json/default/QuickType.cs
@@ -0,0 +1,117 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("BoolInUnion", Required = Required.Always)]
+        public BoolInUnion BoolInUnion { get; set; }
+
+        [JsonProperty("union", Required = Required.Always)]
+        public Union[] Union { get; set; }
+    }
+
+    public partial record BoolInUnion
+    {
+        [JsonProperty("a", Required = Required.Always)]
+        public bool A { get; set; }
+    }
+
+    public partial struct Union
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Union(bool Bool) => new Union { Bool = Bool };
+        public static implicit operator Union(long Integer) => new Union { Integer = Integer };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                UnionConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class UnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Union) || t == typeof(Union?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Union { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Union { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Union");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Union)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Union");
+        }
+
+        public static readonly UnionConverter Singleton = new UnionConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/unions.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/unions.json/default/QuickType.cs
new file mode 100644
index 0000000..46ea23b
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/unions.json/default/QuickType.cs
@@ -0,0 +1,186 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("x", Required = Required.Always)]
+        public X[] X { get; set; }
+
+        [JsonProperty("y", Required = Required.Always)]
+        public long?[] Y { get; set; }
+
+        [JsonProperty("z", Required = Required.Always)]
+        public ZElement[] Z { get; set; }
+    }
+
+    public partial record ZClass
+    {
+        [JsonProperty("a", Required = Required.Always)]
+        public bool A { get; set; }
+    }
+
+    public partial struct X
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator X(long Integer) => new X { Integer = Integer };
+        public static implicit operator X(string String) => new X { String = String };
+        public bool IsNull => Integer == null && String == null;
+    }
+
+    public partial struct ZElement
+    {
+        public long? Integer;
+        public long[]? IntegerArray;
+        public ZClass? ZClass;
+
+        public static implicit operator ZElement(long Integer) => new ZElement { Integer = Integer };
+        public static implicit operator ZElement(long[] IntegerArray) => new ZElement { IntegerArray = IntegerArray };
+        public static implicit operator ZElement(ZClass ZClass) => new ZElement { ZClass = ZClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                XConverter.Singleton,
+                ZElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class XConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(X) || t == typeof(X?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new X { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new X { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new X { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type X");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (X)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type X");
+        }
+
+        public static readonly XConverter Singleton = new XConverter();
+    }
+
+    internal class ZElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ZElement) || t == typeof(ZElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new ZElement { Integer = integerValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ZClass>(reader);
+                    return new ZElement { ZClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new ZElement { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type ZElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ZElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.ZClass != null)
+            {
+                serializer.Serialize(writer, value.ZClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ZElement");
+        }
+
+        public static readonly ZElementConverter Singleton = new ZElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/url.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/url.json/default/QuickType.cs
new file mode 100644
index 0000000..c9987c6
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/url.json/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("fromURL", Required = Required.Always)]
+        public string FromUrl { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public string Url { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/priority/uuids.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/uuids.json/default/QuickType.cs
new file mode 100644
index 0000000..66c7467
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/priority/uuids.json/default/QuickType.cs
@@ -0,0 +1,76 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("booleanValue", Required = Required.Always)]
+        public bool BooleanValue { get; set; }
+
+        [JsonProperty("doubleValue", Required = Required.Always)]
+        public double DoubleValue { get; set; }
+
+        [JsonProperty("intValue", Required = Required.Always)]
+        public long IntValue { get; set; }
+
+        [JsonProperty("stringValue", Required = Required.Always)]
+        public string StringValue { get; set; }
+
+        [JsonProperty("uuidValue", Required = Required.Always)]
+        public Guid UuidValue { get; set; }
+
+        [JsonProperty("uuidValues", Required = Required.Always)]
+        public Guid[] UuidValues { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/bitcoin-block.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/bitcoin-block.json/default/QuickType.cs
new file mode 100644
index 0000000..20a560e
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/bitcoin-block.json/default/QuickType.cs
@@ -0,0 +1,73 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("block_index", Required = Required.Always)]
+        public long BlockIndex { get; set; }
+
+        [JsonProperty("hash", Required = Required.Always)]
+        public string Hash { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("time", Required = Required.Always)]
+        public long Time { get; set; }
+
+        [JsonProperty("txIndexes", Required = Required.Always)]
+        public long[] TxIndexes { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/getting-started.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/getting-started.json/default/QuickType.cs
new file mode 100644
index 0000000..81ff6a0
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/getting-started.json/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("greeting", Required = Required.Always)]
+        public string Greeting { get; set; }
+
+        [JsonProperty("instructions", Required = Required.Always)]
+        public string[] Instructions { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/github-events.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/github-events.json/default/QuickType.cs
new file mode 100644
index 0000000..67fc4b8
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/github-events.json/default/QuickType.cs
@@ -0,0 +1,855 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("actor", Required = Required.Always)]
+        public Actor Actor { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("org", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Actor? Org { get; set; }
+
+        [JsonProperty("payload", Required = Required.Always)]
+        public Payload Payload { get; set; }
+
+        [JsonProperty("public", Required = Required.Always)]
+        public bool Public { get; set; }
+
+        [JsonProperty("repo", Required = Required.Always)]
+        public TopLevelRepo Repo { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record Actor
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("display_login", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DisplayLogin { get; set; }
+
+        [JsonProperty("gravatar_id", Required = Required.Always)]
+        public string GravatarId { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("login", Required = Required.Always)]
+        public string Login { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Payload
+    {
+        [JsonProperty("action", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Action { get; set; }
+
+        [JsonProperty("before", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Before { get; set; }
+
+        [JsonProperty("comment", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Comment? Comment { get; set; }
+
+        [JsonProperty("commits", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Commit[]? Commits { get; set; }
+
+        [JsonProperty("description", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Description { get; set; }
+
+        [JsonProperty("distinct_size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? DistinctSize { get; set; }
+
+        [JsonProperty("head", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Head { get; set; }
+
+        [JsonProperty("issue", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Issue? Issue { get; set; }
+
+        [JsonProperty("master_branch", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? MasterBranch { get; set; }
+
+        [JsonProperty("number", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Number { get; set; }
+
+        [JsonProperty("pull_request", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public PayloadPullRequest? PullRequest { get; set; }
+
+        [JsonProperty("push_id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? PushId { get; set; }
+
+        [JsonProperty("pusher_type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? PusherType { get; set; }
+
+        [JsonProperty("ref", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Ref { get; set; }
+
+        [JsonProperty("ref_type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? RefType { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Size { get; set; }
+    }
+
+    public partial record Comment
+    {
+        [JsonProperty("body", Required = Required.Always)]
+        public string Body { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("html_url", Required = Required.Always)]
+        public Uri HtmlUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("issue_url", Required = Required.Always)]
+        public Uri IssueUrl { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.Always)]
+        public User User { get; set; }
+    }
+
+    public partial record User
+    {
+        [JsonProperty("avatar_url", Required = Required.Always)]
+        public Uri AvatarUrl { get; set; }
+
+        [JsonProperty("events_url", Required = Required.Always)]
+        public string EventsUrl { get; set; }
+
+        [JsonProperty("followers_url", Required = Required.Always)]
+        public Uri FollowersUrl { get; set; }
+
+        [JsonProperty("following_url", Required = Required.Always)]
+        public string FollowingUrl { get; set; }
+
+        [JsonProperty("gists_url", Required = Required.Always)]
+        public string GistsUrl { get; set; }
+
+        [JsonProperty("gravatar_id", Required = Required.Always)]
+        public string GravatarId { get; set; }
+
+        [JsonProperty("html_url", Required = Required.Always)]
+        public Uri HtmlUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("login", Required = Required.Always)]
+        public string Login { get; set; }
+
+        [JsonProperty("organizations_url", Required = Required.Always)]
+        public Uri OrganizationsUrl { get; set; }
+
+        [JsonProperty("received_events_url", Required = Required.Always)]
+        public Uri ReceivedEventsUrl { get; set; }
+
+        [JsonProperty("repos_url", Required = Required.Always)]
+        public Uri ReposUrl { get; set; }
+
+        [JsonProperty("site_admin", Required = Required.Always)]
+        public bool SiteAdmin { get; set; }
+
+        [JsonProperty("starred_url", Required = Required.Always)]
+        public string StarredUrl { get; set; }
+
+        [JsonProperty("subscriptions_url", Required = Required.Always)]
+        public Uri SubscriptionsUrl { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Commit
+    {
+        [JsonProperty("author", Required = Required.Always)]
+        public Author Author { get; set; }
+
+        [JsonProperty("distinct", Required = Required.Always)]
+        public bool Distinct { get; set; }
+
+        [JsonProperty("message", Required = Required.Always)]
+        public string Message { get; set; }
+
+        [JsonProperty("sha", Required = Required.Always)]
+        public string Sha { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Author
+    {
+        [JsonProperty("email", Required = Required.Always)]
+        public string Email { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record Issue
+    {
+        [JsonProperty("assignee", Required = Required.AllowNull)]
+        public object Assignee { get; set; }
+
+        [JsonProperty("assignees", Required = Required.Always)]
+        public object[] Assignees { get; set; }
+
+        [JsonProperty("body", Required = Required.Always)]
+        public string Body { get; set; }
+
+        [JsonProperty("closed_at", Required = Required.AllowNull)]
+        public DateTimeOffset? ClosedAt { get; set; }
+
+        [JsonProperty("comments", Required = Required.Always)]
+        public long Comments { get; set; }
+
+        [JsonProperty("comments_url", Required = Required.Always)]
+        public Uri CommentsUrl { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("events_url", Required = Required.Always)]
+        public Uri EventsUrl { get; set; }
+
+        [JsonProperty("html_url", Required = Required.Always)]
+        public Uri HtmlUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("labels", Required = Required.Always)]
+        public Label[] Labels { get; set; }
+
+        [JsonProperty("labels_url", Required = Required.Always)]
+        public string LabelsUrl { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("milestone", Required = Required.AllowNull)]
+        public Milestone? Milestone { get; set; }
+
+        [JsonProperty("number", Required = Required.Always)]
+        public long Number { get; set; }
+
+        [JsonProperty("pull_request", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public IssuePullRequest? PullRequest { get; set; }
+
+        [JsonProperty("repository_url", Required = Required.Always)]
+        public Uri RepositoryUrl { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.Always)]
+        public User User { get; set; }
+    }
+
+    public partial record Label
+    {
+        [JsonProperty("color", Required = Required.Always)]
+        public string Color { get; set; }
+
+        [JsonProperty("default", Required = Required.Always)]
+        public bool Default { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record Milestone
+    {
+        [JsonProperty("closed_at", Required = Required.AllowNull)]
+        public object ClosedAt { get; set; }
+
+        [JsonProperty("closed_issues", Required = Required.Always)]
+        public long ClosedIssues { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("creator", Required = Required.Always)]
+        public User Creator { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("due_on", Required = Required.AllowNull)]
+        public DateTimeOffset? DueOn { get; set; }
+
+        [JsonProperty("html_url", Required = Required.Always)]
+        public Uri HtmlUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("labels_url", Required = Required.Always)]
+        public Uri LabelsUrl { get; set; }
+
+        [JsonProperty("number", Required = Required.Always)]
+        public long Number { get; set; }
+
+        [JsonProperty("open_issues", Required = Required.Always)]
+        public long OpenIssues { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record IssuePullRequest
+    {
+        [JsonProperty("diff_url", Required = Required.Always)]
+        public Uri DiffUrl { get; set; }
+
+        [JsonProperty("html_url", Required = Required.Always)]
+        public Uri HtmlUrl { get; set; }
+
+        [JsonProperty("patch_url", Required = Required.Always)]
+        public Uri PatchUrl { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public partial record PayloadPullRequest
+    {
+        [JsonProperty("additions", Required = Required.Always)]
+        public long Additions { get; set; }
+
+        [JsonProperty("assignee", Required = Required.AllowNull)]
+        public object Assignee { get; set; }
+
+        [JsonProperty("assignees", Required = Required.Always)]
+        public object[] Assignees { get; set; }
+
+        [JsonProperty("base", Required = Required.Always)]
+        public Base Base { get; set; }
+
+        [JsonProperty("body", Required = Required.Always)]
+        public string Body { get; set; }
+
+        [JsonProperty("changed_files", Required = Required.Always)]
+        public long ChangedFiles { get; set; }
+
+        [JsonProperty("closed_at", Required = Required.Always)]
+        public DateTimeOffset ClosedAt { get; set; }
+
+        [JsonProperty("comments", Required = Required.Always)]
+        public long Comments { get; set; }
+
+        [JsonProperty("comments_url", Required = Required.Always)]
+        public Uri CommentsUrl { get; set; }
+
+        [JsonProperty("commits", Required = Required.Always)]
+        public long Commits { get; set; }
+
+        [JsonProperty("commits_url", Required = Required.Always)]
+        public Uri CommitsUrl { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("deletions", Required = Required.Always)]
+        public long Deletions { get; set; }
+
+        [JsonProperty("diff_url", Required = Required.Always)]
+        public Uri DiffUrl { get; set; }
+
+        [JsonProperty("head", Required = Required.Always)]
+        public Base Head { get; set; }
+
+        [JsonProperty("html_url", Required = Required.Always)]
+        public Uri HtmlUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("issue_url", Required = Required.Always)]
+        public Uri IssueUrl { get; set; }
+
+        [JsonProperty("_links", Required = Required.Always)]
+        public Links Links { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("maintainer_can_modify", Required = Required.Always)]
+        public bool MaintainerCanModify { get; set; }
+
+        [JsonProperty("merge_commit_sha", Required = Required.Always)]
+        public string MergeCommitSha { get; set; }
+
+        [JsonProperty("mergeable", Required = Required.AllowNull)]
+        public object Mergeable { get; set; }
+
+        [JsonProperty("mergeable_state", Required = Required.Always)]
+        public string MergeableState { get; set; }
+
+        [JsonProperty("merged", Required = Required.Always)]
+        public bool Merged { get; set; }
+
+        [JsonProperty("merged_at", Required = Required.Always)]
+        public DateTimeOffset MergedAt { get; set; }
+
+        [JsonProperty("merged_by", Required = Required.Always)]
+        public User MergedBy { get; set; }
+
+        [JsonProperty("milestone", Required = Required.AllowNull)]
+        public object Milestone { get; set; }
+
+        [JsonProperty("number", Required = Required.Always)]
+        public long Number { get; set; }
+
+        [JsonProperty("patch_url", Required = Required.Always)]
+        public Uri PatchUrl { get; set; }
+
+        [JsonProperty("rebaseable", Required = Required.AllowNull)]
+        public object Rebaseable { get; set; }
+
+        [JsonProperty("requested_reviewers", Required = Required.Always)]
+        public object[] RequestedReviewers { get; set; }
+
+        [JsonProperty("review_comment_url", Required = Required.Always)]
+        public string ReviewCommentUrl { get; set; }
+
+        [JsonProperty("review_comments", Required = Required.Always)]
+        public long ReviewComments { get; set; }
+
+        [JsonProperty("review_comments_url", Required = Required.Always)]
+        public Uri ReviewCommentsUrl { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("statuses_url", Required = Required.Always)]
+        public Uri StatusesUrl { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user", Required = Required.Always)]
+        public User User { get; set; }
+    }
+
+    public partial record Base
+    {
+        [JsonProperty("label", Required = Required.Always)]
+        public string Label { get; set; }
+
+        [JsonProperty("ref", Required = Required.Always)]
+        public string Ref { get; set; }
+
+        [JsonProperty("repo", Required = Required.Always)]
+        public BaseRepo Repo { get; set; }
+
+        [JsonProperty("sha", Required = Required.Always)]
+        public string Sha { get; set; }
+
+        [JsonProperty("user", Required = Required.Always)]
+        public User User { get; set; }
+    }
+
+    public partial record BaseRepo
+    {
+        [JsonProperty("archive_url", Required = Required.Always)]
+        public string ArchiveUrl { get; set; }
+
+        [JsonProperty("assignees_url", Required = Required.Always)]
+        public string AssigneesUrl { get; set; }
+
+        [JsonProperty("blobs_url", Required = Required.Always)]
+        public string BlobsUrl { get; set; }
+
+        [JsonProperty("branches_url", Required = Required.Always)]
+        public string BranchesUrl { get; set; }
+
+        [JsonProperty("clone_url", Required = Required.Always)]
+        public Uri CloneUrl { get; set; }
+
+        [JsonProperty("collaborators_url", Required = Required.Always)]
+        public string CollaboratorsUrl { get; set; }
+
+        [JsonProperty("comments_url", Required = Required.Always)]
+        public string CommentsUrl { get; set; }
+
+        [JsonProperty("commits_url", Required = Required.Always)]
+        public string CommitsUrl { get; set; }
+
+        [JsonProperty("compare_url", Required = Required.Always)]
+        public string CompareUrl { get; set; }
+
+        [JsonProperty("contents_url", Required = Required.Always)]
+        public string ContentsUrl { get; set; }
+
+        [JsonProperty("contributors_url", Required = Required.Always)]
+        public Uri ContributorsUrl { get; set; }
+
+        [JsonProperty("created_at", Required = Required.Always)]
+        public DateTimeOffset CreatedAt { get; set; }
+
+        [JsonProperty("default_branch", Required = Required.Always)]
+        public string DefaultBranch { get; set; }
+
+        [JsonProperty("deployments_url", Required = Required.Always)]
+        public Uri DeploymentsUrl { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("downloads_url", Required = Required.Always)]
+        public Uri DownloadsUrl { get; set; }
+
+        [JsonProperty("events_url", Required = Required.Always)]
+        public Uri EventsUrl { get; set; }
+
+        [JsonProperty("fork", Required = Required.Always)]
+        public bool Fork { get; set; }
+
+        [JsonProperty("forks", Required = Required.Always)]
+        public long Forks { get; set; }
+
+        [JsonProperty("forks_count", Required = Required.Always)]
+        public long ForksCount { get; set; }
+
+        [JsonProperty("forks_url", Required = Required.Always)]
+        public Uri ForksUrl { get; set; }
+
+        [JsonProperty("full_name", Required = Required.Always)]
+        public string FullName { get; set; }
+
+        [JsonProperty("git_commits_url", Required = Required.Always)]
+        public string GitCommitsUrl { get; set; }
+
+        [JsonProperty("git_refs_url", Required = Required.Always)]
+        public string GitRefsUrl { get; set; }
+
+        [JsonProperty("git_tags_url", Required = Required.Always)]
+        public string GitTagsUrl { get; set; }
+
+        [JsonProperty("git_url", Required = Required.Always)]
+        public string GitUrl { get; set; }
+
+        [JsonProperty("has_downloads", Required = Required.Always)]
+        public bool HasDownloads { get; set; }
+
+        [JsonProperty("has_issues", Required = Required.Always)]
+        public bool HasIssues { get; set; }
+
+        [JsonProperty("has_pages", Required = Required.Always)]
+        public bool HasPages { get; set; }
+
+        [JsonProperty("has_projects", Required = Required.Always)]
+        public bool HasProjects { get; set; }
+
+        [JsonProperty("has_wiki", Required = Required.Always)]
+        public bool HasWiki { get; set; }
+
+        [JsonProperty("homepage", Required = Required.Always)]
+        public string Homepage { get; set; }
+
+        [JsonProperty("hooks_url", Required = Required.Always)]
+        public Uri HooksUrl { get; set; }
+
+        [JsonProperty("html_url", Required = Required.Always)]
+        public Uri HtmlUrl { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("issue_comment_url", Required = Required.Always)]
+        public string IssueCommentUrl { get; set; }
+
+        [JsonProperty("issue_events_url", Required = Required.Always)]
+        public string IssueEventsUrl { get; set; }
+
+        [JsonProperty("issues_url", Required = Required.Always)]
+        public string IssuesUrl { get; set; }
+
+        [JsonProperty("keys_url", Required = Required.Always)]
+        public string KeysUrl { get; set; }
+
+        [JsonProperty("labels_url", Required = Required.Always)]
+        public string LabelsUrl { get; set; }
+
+        [JsonProperty("language", Required = Required.Always)]
+        public string Language { get; set; }
+
+        [JsonProperty("languages_url", Required = Required.Always)]
+        public Uri LanguagesUrl { get; set; }
+
+        [JsonProperty("merges_url", Required = Required.Always)]
+        public Uri MergesUrl { get; set; }
+
+        [JsonProperty("milestones_url", Required = Required.Always)]
+        public string MilestonesUrl { get; set; }
+
+        [JsonProperty("mirror_url", Required = Required.AllowNull)]
+        public object MirrorUrl { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("notifications_url", Required = Required.Always)]
+        public string NotificationsUrl { get; set; }
+
+        [JsonProperty("open_issues", Required = Required.Always)]
+        public long OpenIssues { get; set; }
+
+        [JsonProperty("open_issues_count", Required = Required.Always)]
+        public long OpenIssuesCount { get; set; }
+
+        [JsonProperty("owner", Required = Required.Always)]
+        public User Owner { get; set; }
+
+        [JsonProperty("private", Required = Required.Always)]
+        public bool Private { get; set; }
+
+        [JsonProperty("pulls_url", Required = Required.Always)]
+        public string PullsUrl { get; set; }
+
+        [JsonProperty("pushed_at", Required = Required.Always)]
+        public DateTimeOffset PushedAt { get; set; }
+
+        [JsonProperty("releases_url", Required = Required.Always)]
+        public string ReleasesUrl { get; set; }
+
+        [JsonProperty("size", Required = Required.Always)]
+        public long Size { get; set; }
+
+        [JsonProperty("ssh_url", Required = Required.Always)]
+        public string SshUrl { get; set; }
+
+        [JsonProperty("stargazers_count", Required = Required.Always)]
+        public long StargazersCount { get; set; }
+
+        [JsonProperty("stargazers_url", Required = Required.Always)]
+        public Uri StargazersUrl { get; set; }
+
+        [JsonProperty("statuses_url", Required = Required.Always)]
+        public string StatusesUrl { get; set; }
+
+        [JsonProperty("subscribers_url", Required = Required.Always)]
+        public Uri SubscribersUrl { get; set; }
+
+        [JsonProperty("subscription_url", Required = Required.Always)]
+        public Uri SubscriptionUrl { get; set; }
+
+        [JsonProperty("svn_url", Required = Required.Always)]
+        public Uri SvnUrl { get; set; }
+
+        [JsonProperty("tags_url", Required = Required.Always)]
+        public Uri TagsUrl { get; set; }
+
+        [JsonProperty("teams_url", Required = Required.Always)]
+        public Uri TeamsUrl { get; set; }
+
+        [JsonProperty("trees_url", Required = Required.Always)]
+        public string TreesUrl { get; set; }
+
+        [JsonProperty("updated_at", Required = Required.Always)]
+        public DateTimeOffset UpdatedAt { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("watchers", Required = Required.Always)]
+        public long Watchers { get; set; }
+
+        [JsonProperty("watchers_count", Required = Required.Always)]
+        public long WatchersCount { get; set; }
+    }
+
+    public partial record Links
+    {
+        [JsonProperty("comments", Required = Required.Always)]
+        public Comments Comments { get; set; }
+
+        [JsonProperty("commits", Required = Required.Always)]
+        public Comments Commits { get; set; }
+
+        [JsonProperty("html", Required = Required.Always)]
+        public Comments Html { get; set; }
+
+        [JsonProperty("issue", Required = Required.Always)]
+        public Comments Issue { get; set; }
+
+        [JsonProperty("review_comment", Required = Required.Always)]
+        public Comments ReviewComment { get; set; }
+
+        [JsonProperty("review_comments", Required = Required.Always)]
+        public Comments ReviewComments { get; set; }
+
+        [JsonProperty("self", Required = Required.Always)]
+        public Comments Self { get; set; }
+
+        [JsonProperty("statuses", Required = Required.Always)]
+        public Comments Statuses { get; set; }
+    }
+
+    public partial record Comments
+    {
+        [JsonProperty("href", Required = Required.Always)]
+        public string Href { get; set; }
+    }
+
+    public partial record TopLevelRepo
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+    }
+
+    public enum TypeEnum { User, Organization };
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TypeEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "User":
+                    return TypeEnum.User;
+                case "Organization":
+                    return TypeEnum.Organization;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            switch (value)
+            {
+                case TypeEnum.User:
+                    serializer.Serialize(writer, "User");
+                    return;
+                case TypeEnum.Organization:
+                    serializer.Serialize(writer, "Organization");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/kitchen-sink.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/kitchen-sink.json/default/QuickType.cs
new file mode 100644
index 0000000..ba454fd
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/kitchen-sink.json/default/QuickType.cs
@@ -0,0 +1,272 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("booleanValue", Required = Required.Always)]
+        public bool BooleanValue { get; set; }
+
+        [JsonProperty("dateValue", Required = Required.Always)]
+        public string DateValue { get; set; }
+
+        [JsonProperty("differentThings", Required = Required.Always)]
+        public DifferentThingElement[] DifferentThings { get; set; }
+
+        [JsonProperty("doubleValue", Required = Required.Always)]
+        public double DoubleValue { get; set; }
+
+        [JsonProperty("intValue", Required = Required.Always)]
+        public long IntValue { get; set; }
+
+        [JsonProperty("mapValue", Required = Required.Always)]
+        public Dictionary<string, long?> MapValue { get; set; }
+
+        [JsonProperty("name with spaces", Required = Required.AllowNull)]
+        public object NameWithSpaces { get; set; }
+
+        [JsonProperty("nullValue", Required = Required.AllowNull)]
+        public object NullValue { get; set; }
+
+        [JsonProperty("nullableMapValue", Required = Required.Always)]
+        public Dictionary<string, long?> NullableMapValue { get; set; }
+
+        [JsonProperty("people", Required = Required.Always)]
+        public PersonElement[] People { get; set; }
+
+        [JsonProperty("person", Required = Required.Always)]
+        public PurplePerson Person { get; set; }
+
+        [JsonProperty("stringValue", Required = Required.Always)]
+        public string StringValue { get; set; }
+
+        [JsonProperty("tuples", Required = Required.Always)]
+        public Tuple[][] Tuples { get; set; }
+
+        [JsonProperty("uuidValue", Required = Required.Always)]
+        public string UuidValue { get; set; }
+    }
+
+    public partial record DifferentThingClass
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record PersonElement
+    {
+        [JsonProperty("intOrString", Required = Required.Always)]
+        [JsonConverter(typeof(DecodingChoiceConverter))]
+        public long IntOrString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("optionalValue", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? OptionalValue { get; set; }
+    }
+
+    public partial record PurplePerson
+    {
+        [JsonProperty("intOrString", Required = Required.Always)]
+        public long IntOrString { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial struct DifferentThingElement
+    {
+        public DifferentThingClass? DifferentThingClass;
+        public long? Integer;
+
+        public static implicit operator DifferentThingElement(DifferentThingClass DifferentThingClass) => new DifferentThingElement { DifferentThingClass = DifferentThingClass };
+        public static implicit operator DifferentThingElement(long Integer) => new DifferentThingElement { Integer = Integer };
+    }
+
+    public partial struct Tuple
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Tuple(long Integer) => new Tuple { Integer = Integer };
+        public static implicit operator Tuple(string String) => new Tuple { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DifferentThingElementConverter.Singleton,
+                TupleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DifferentThingElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DifferentThingElement) || t == typeof(DifferentThingElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new DifferentThingElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    long l;
+                    if (Int64.TryParse(stringValue, out l))
+                    {
+                        return new DifferentThingElement { Integer = l };
+                    }
+                    break;
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DifferentThingClass>(reader);
+                    return new DifferentThingElement { DifferentThingClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type DifferentThingElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DifferentThingElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.DifferentThingClass != null)
+            {
+                serializer.Serialize(writer, value.DifferentThingClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DifferentThingElement");
+        }
+
+        public static readonly DifferentThingElementConverter Singleton = new DifferentThingElementConverter();
+    }
+
+    internal class DecodingChoiceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return integerValue;
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    long l;
+                    if (Int64.TryParse(stringValue, out l))
+                    {
+                        return l;
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value);
+            return;
+        }
+
+        public static readonly DecodingChoiceConverter Singleton = new DecodingChoiceConverter();
+    }
+
+    internal class TupleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tuple) || t == typeof(Tuple?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Tuple { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Tuple { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Tuple");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tuple)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tuple");
+        }
+
+        public static readonly TupleConverter Singleton = new TupleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/null-safe.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/null-safe.json/default/QuickType.cs
new file mode 100644
index 0000000..b208f7e
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/null-safe.json/default/QuickType.cs
@@ -0,0 +1,88 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("item", Required = Required.Always)]
+        public Item[] Item { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("address", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Address? Address { get; set; }
+
+        [JsonProperty("created_at", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DateTimeOffset? CreatedAt { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("sex", Required = Required.AllowNull)]
+        public long? Sex { get; set; }
+    }
+
+    public partial record Address
+    {
+        [JsonProperty("city", Required = Required.Always)]
+        public string City { get; set; }
+
+        [JsonProperty("country", Required = Required.Always)]
+        public string Country { get; set; }
+
+        [JsonProperty("street", Required = Required.Always)]
+        public string Street { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/pokedex.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/pokedex.json/default/QuickType.cs
new file mode 100644
index 0000000..672bd43
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/pokedex.json/default/QuickType.cs
@@ -0,0 +1,307 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("pokemon", Required = Required.Always)]
+        public Pokemon[] Pokemon { get; set; }
+    }
+
+    public partial record Pokemon
+    {
+        [JsonProperty("avg_spawns", Required = Required.Always)]
+        public double AvgSpawns { get; set; }
+
+        [JsonProperty("candy", Required = Required.Always)]
+        public string Candy { get; set; }
+
+        [JsonProperty("candy_count", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? CandyCount { get; set; }
+
+        [JsonProperty("egg", Required = Required.Always)]
+        public Egg Egg { get; set; }
+
+        [JsonProperty("height", Required = Required.Always)]
+        public string Height { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+
+        [JsonProperty("img", Required = Required.Always)]
+        public Uri Img { get; set; }
+
+        [JsonProperty("multipliers", Required = Required.AllowNull)]
+        public double[]? Multipliers { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("next_evolution", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Evolution[]? NextEvolution { get; set; }
+
+        [JsonProperty("num", Required = Required.Always)]
+        public string Num { get; set; }
+
+        [JsonProperty("prev_evolution", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Evolution[]? PrevEvolution { get; set; }
+
+        [JsonProperty("spawn_chance", Required = Required.Always)]
+        public double SpawnChance { get; set; }
+
+        [JsonProperty("spawn_time", Required = Required.Always)]
+        public string SpawnTime { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeElement[] Type { get; set; }
+
+        [JsonProperty("weaknesses", Required = Required.Always)]
+        public TypeElement[] Weaknesses { get; set; }
+
+        [JsonProperty("weight", Required = Required.Always)]
+        public string Weight { get; set; }
+    }
+
+    public partial record Evolution
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("num", Required = Required.Always)]
+        public string Num { get; set; }
+    }
+
+    public enum Egg { The2Km, NotInEggs, The5Km, The10Km, OmanyteCandy };
+
+    public enum TypeElement { Fire, Ice, Flying, Psychic, Water, Ground, Rock, Electric, Grass, Fighting, Poison, Bug, Fairy, Ghost, Dark, Steel, Dragon, Normal };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                EggConverter.Singleton,
+                TypeElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class EggConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Egg) || t == typeof(Egg?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "2 km":
+                    return Egg.The2Km;
+                case "Not in Eggs":
+                    return Egg.NotInEggs;
+                case "5 km":
+                    return Egg.The5Km;
+                case "10 km":
+                    return Egg.The10Km;
+                case "Omanyte Candy":
+                    return Egg.OmanyteCandy;
+            }
+            throw new Exception("Cannot unmarshal type Egg");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Egg)untypedValue;
+            switch (value)
+            {
+                case Egg.The2Km:
+                    serializer.Serialize(writer, "2 km");
+                    return;
+                case Egg.NotInEggs:
+                    serializer.Serialize(writer, "Not in Eggs");
+                    return;
+                case Egg.The5Km:
+                    serializer.Serialize(writer, "5 km");
+                    return;
+                case Egg.The10Km:
+                    serializer.Serialize(writer, "10 km");
+                    return;
+                case Egg.OmanyteCandy:
+                    serializer.Serialize(writer, "Omanyte Candy");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Egg");
+        }
+
+        public static readonly EggConverter Singleton = new EggConverter();
+    }
+
+    internal class TypeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeElement) || t == typeof(TypeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Fire":
+                    return TypeElement.Fire;
+                case "Ice":
+                    return TypeElement.Ice;
+                case "Flying":
+                    return TypeElement.Flying;
+                case "Psychic":
+                    return TypeElement.Psychic;
+                case "Water":
+                    return TypeElement.Water;
+                case "Ground":
+                    return TypeElement.Ground;
+                case "Rock":
+                    return TypeElement.Rock;
+                case "Electric":
+                    return TypeElement.Electric;
+                case "Grass":
+                    return TypeElement.Grass;
+                case "Fighting":
+                    return TypeElement.Fighting;
+                case "Poison":
+                    return TypeElement.Poison;
+                case "Bug":
+                    return TypeElement.Bug;
+                case "Fairy":
+                    return TypeElement.Fairy;
+                case "Ghost":
+                    return TypeElement.Ghost;
+                case "Dark":
+                    return TypeElement.Dark;
+                case "Steel":
+                    return TypeElement.Steel;
+                case "Dragon":
+                    return TypeElement.Dragon;
+                case "Normal":
+                    return TypeElement.Normal;
+            }
+            throw new Exception("Cannot unmarshal type TypeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeElement)untypedValue;
+            switch (value)
+            {
+                case TypeElement.Fire:
+                    serializer.Serialize(writer, "Fire");
+                    return;
+                case TypeElement.Ice:
+                    serializer.Serialize(writer, "Ice");
+                    return;
+                case TypeElement.Flying:
+                    serializer.Serialize(writer, "Flying");
+                    return;
+                case TypeElement.Psychic:
+                    serializer.Serialize(writer, "Psychic");
+                    return;
+                case TypeElement.Water:
+                    serializer.Serialize(writer, "Water");
+                    return;
+                case TypeElement.Ground:
+                    serializer.Serialize(writer, "Ground");
+                    return;
+                case TypeElement.Rock:
+                    serializer.Serialize(writer, "Rock");
+                    return;
+                case TypeElement.Electric:
+                    serializer.Serialize(writer, "Electric");
+                    return;
+                case TypeElement.Grass:
+                    serializer.Serialize(writer, "Grass");
+                    return;
+                case TypeElement.Fighting:
+                    serializer.Serialize(writer, "Fighting");
+                    return;
+                case TypeElement.Poison:
+                    serializer.Serialize(writer, "Poison");
+                    return;
+                case TypeElement.Bug:
+                    serializer.Serialize(writer, "Bug");
+                    return;
+                case TypeElement.Fairy:
+                    serializer.Serialize(writer, "Fairy");
+                    return;
+                case TypeElement.Ghost:
+                    serializer.Serialize(writer, "Ghost");
+                    return;
+                case TypeElement.Dark:
+                    serializer.Serialize(writer, "Dark");
+                    return;
+                case TypeElement.Steel:
+                    serializer.Serialize(writer, "Steel");
+                    return;
+                case TypeElement.Dragon:
+                    serializer.Serialize(writer, "Dragon");
+                    return;
+                case TypeElement.Normal:
+                    serializer.Serialize(writer, "Normal");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeElement");
+        }
+
+        public static readonly TypeElementConverter Singleton = new TypeElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/reddit.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/reddit.json/default/QuickType.cs
new file mode 100644
index 0000000..f4eed5a
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/reddit.json/default/QuickType.cs
@@ -0,0 +1,667 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public TopLevelData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public string Kind { get; set; }
+    }
+
+    public partial record TopLevelData
+    {
+        [JsonProperty("after", Required = Required.Always)]
+        public string After { get; set; }
+
+        [JsonProperty("before", Required = Required.AllowNull)]
+        public object Before { get; set; }
+
+        [JsonProperty("children", Required = Required.Always)]
+        public Child[] Children { get; set; }
+
+        [JsonProperty("modhash", Required = Required.Always)]
+        public string Modhash { get; set; }
+    }
+
+    public partial record Child
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public ChildData Data { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    public partial record ChildData
+    {
+        [JsonProperty("approved_at_utc", Required = Required.AllowNull)]
+        public object ApprovedAtUtc { get; set; }
+
+        [JsonProperty("approved_by", Required = Required.AllowNull)]
+        public object ApprovedBy { get; set; }
+
+        [JsonProperty("archived", Required = Required.Always)]
+        public bool Archived { get; set; }
+
+        [JsonProperty("author", Required = Required.Always)]
+        public string Author { get; set; }
+
+        [JsonProperty("author_flair_css_class", Required = Required.AllowNull)]
+        public string? AuthorFlairCssClass { get; set; }
+
+        [JsonProperty("author_flair_text", Required = Required.AllowNull)]
+        public string? AuthorFlairText { get; set; }
+
+        [JsonProperty("banned_at_utc", Required = Required.AllowNull)]
+        public object BannedAtUtc { get; set; }
+
+        [JsonProperty("banned_by", Required = Required.AllowNull)]
+        public object BannedBy { get; set; }
+
+        [JsonProperty("brand_safe", Required = Required.Always)]
+        public bool BrandSafe { get; set; }
+
+        [JsonProperty("can_gild", Required = Required.Always)]
+        public bool CanGild { get; set; }
+
+        [JsonProperty("can_mod_post", Required = Required.Always)]
+        public bool CanModPost { get; set; }
+
+        [JsonProperty("clicked", Required = Required.Always)]
+        public bool Clicked { get; set; }
+
+        [JsonProperty("contest_mode", Required = Required.Always)]
+        public bool ContestMode { get; set; }
+
+        [JsonProperty("created", Required = Required.Always)]
+        public long Created { get; set; }
+
+        [JsonProperty("created_utc", Required = Required.Always)]
+        public long CreatedUtc { get; set; }
+
+        [JsonProperty("distinguished", Required = Required.AllowNull)]
+        public string? Distinguished { get; set; }
+
+        [JsonProperty("domain", Required = Required.Always)]
+        public Domain Domain { get; set; }
+
+        [JsonProperty("downs", Required = Required.Always)]
+        public long Downs { get; set; }
+
+        [JsonProperty("edited", Required = Required.Always)]
+        public bool Edited { get; set; }
+
+        [JsonProperty("gilded", Required = Required.Always)]
+        public long Gilded { get; set; }
+
+        [JsonProperty("hidden", Required = Required.Always)]
+        public bool Hidden { get; set; }
+
+        [JsonProperty("hide_score", Required = Required.Always)]
+        public bool HideScore { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("is_self", Required = Required.Always)]
+        public bool IsSelf { get; set; }
+
+        [JsonProperty("is_video", Required = Required.Always)]
+        public bool IsVideo { get; set; }
+
+        [JsonProperty("likes", Required = Required.AllowNull)]
+        public object Likes { get; set; }
+
+        [JsonProperty("link_flair_css_class", Required = Required.AllowNull)]
+        public string? LinkFlairCssClass { get; set; }
+
+        [JsonProperty("link_flair_text", Required = Required.AllowNull)]
+        public string? LinkFlairText { get; set; }
+
+        [JsonProperty("locked", Required = Required.Always)]
+        public bool Locked { get; set; }
+
+        [JsonProperty("media", Required = Required.AllowNull)]
+        public object Media { get; set; }
+
+        [JsonProperty("media_embed", Required = Required.Always)]
+        public MediaEmbed MediaEmbed { get; set; }
+
+        [JsonProperty("mod_reports", Required = Required.Always)]
+        public object[] ModReports { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("num_comments", Required = Required.Always)]
+        public long NumComments { get; set; }
+
+        [JsonProperty("num_reports", Required = Required.AllowNull)]
+        public object NumReports { get; set; }
+
+        [JsonProperty("over_18", Required = Required.Always)]
+        public bool Over18 { get; set; }
+
+        [JsonProperty("parent_whitelist_status", Required = Required.Always)]
+        public WhitelistStatus ParentWhitelistStatus { get; set; }
+
+        [JsonProperty("permalink", Required = Required.Always)]
+        public string Permalink { get; set; }
+
+        [JsonProperty("post_hint", Required = Required.Always)]
+        public PostHint PostHint { get; set; }
+
+        [JsonProperty("preview", Required = Required.Always)]
+        public Preview Preview { get; set; }
+
+        [JsonProperty("quarantine", Required = Required.Always)]
+        public bool Quarantine { get; set; }
+
+        [JsonProperty("removal_reason", Required = Required.AllowNull)]
+        public object RemovalReason { get; set; }
+
+        [JsonProperty("report_reasons", Required = Required.AllowNull)]
+        public object ReportReasons { get; set; }
+
+        [JsonProperty("saved", Required = Required.Always)]
+        public bool Saved { get; set; }
+
+        [JsonProperty("score", Required = Required.Always)]
+        public long Score { get; set; }
+
+        [JsonProperty("secure_media", Required = Required.AllowNull)]
+        public object SecureMedia { get; set; }
+
+        [JsonProperty("secure_media_embed", Required = Required.Always)]
+        public MediaEmbed SecureMediaEmbed { get; set; }
+
+        [JsonProperty("selftext", Required = Required.Always)]
+        public string Selftext { get; set; }
+
+        [JsonProperty("selftext_html", Required = Required.AllowNull)]
+        public object SelftextHtml { get; set; }
+
+        [JsonProperty("spoiler", Required = Required.Always)]
+        public bool Spoiler { get; set; }
+
+        [JsonProperty("stickied", Required = Required.Always)]
+        public bool Stickied { get; set; }
+
+        [JsonProperty("subreddit", Required = Required.Always)]
+        public Subreddit Subreddit { get; set; }
+
+        [JsonProperty("subreddit_id", Required = Required.Always)]
+        public SubredditId SubredditId { get; set; }
+
+        [JsonProperty("subreddit_name_prefixed", Required = Required.Always)]
+        public SubredditNamePrefixed SubredditNamePrefixed { get; set; }
+
+        [JsonProperty("subreddit_type", Required = Required.Always)]
+        public SubredditType SubredditType { get; set; }
+
+        [JsonProperty("suggested_sort", Required = Required.AllowNull)]
+        public object SuggestedSort { get; set; }
+
+        [JsonProperty("thumbnail", Required = Required.Always)]
+        public Uri Thumbnail { get; set; }
+
+        [JsonProperty("thumbnail_height", Required = Required.Always)]
+        public long ThumbnailHeight { get; set; }
+
+        [JsonProperty("thumbnail_width", Required = Required.Always)]
+        public long ThumbnailWidth { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("ups", Required = Required.Always)]
+        public long Ups { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("user_reports", Required = Required.Always)]
+        public object[] UserReports { get; set; }
+
+        [JsonProperty("view_count", Required = Required.AllowNull)]
+        public object ViewCount { get; set; }
+
+        [JsonProperty("visited", Required = Required.Always)]
+        public bool Visited { get; set; }
+
+        [JsonProperty("whitelist_status", Required = Required.Always)]
+        public WhitelistStatus WhitelistStatus { get; set; }
+    }
+
+    public partial record MediaEmbed
+    {
+    }
+
+    public partial record Preview
+    {
+        [JsonProperty("enabled", Required = Required.Always)]
+        public bool Enabled { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Image[] Images { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("resolutions", Required = Required.Always)]
+        public Source[] Resolutions { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public Source Source { get; set; }
+
+        [JsonProperty("variants", Required = Required.Always)]
+        public Variants Variants { get; set; }
+    }
+
+    public partial record Source
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record Variants
+    {
+        [JsonProperty("gif", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Gif? Gif { get; set; }
+
+        [JsonProperty("mp4", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Gif? Mp4 { get; set; }
+    }
+
+    public partial record Gif
+    {
+        [JsonProperty("resolutions", Required = Required.Always)]
+        public Source[] Resolutions { get; set; }
+
+        [JsonProperty("source", Required = Required.Always)]
+        public Source Source { get; set; }
+    }
+
+    public enum Domain { RedditCom, IImgurCom, ImgurCom, IReddIt };
+
+    public enum WhitelistStatus { AllAds };
+
+    public enum PostHint { Link, Image };
+
+    public enum Subreddit { Funny };
+
+    public enum SubredditId { T52Qh33 };
+
+    public enum SubredditNamePrefixed { RFunny };
+
+    public enum SubredditType { Public };
+
+    public enum Kind { T3 };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                DomainConverter.Singleton,
+                WhitelistStatusConverter.Singleton,
+                PostHintConverter.Singleton,
+                SubredditConverter.Singleton,
+                SubredditIdConverter.Singleton,
+                SubredditNamePrefixedConverter.Singleton,
+                SubredditTypeConverter.Singleton,
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class DomainConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Domain) || t == typeof(Domain?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "reddit.com":
+                    return Domain.RedditCom;
+                case "i.imgur.com":
+                    return Domain.IImgurCom;
+                case "imgur.com":
+                    return Domain.ImgurCom;
+                case "i.redd.it":
+                    return Domain.IReddIt;
+            }
+            throw new Exception("Cannot unmarshal type Domain");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Domain)untypedValue;
+            switch (value)
+            {
+                case Domain.RedditCom:
+                    serializer.Serialize(writer, "reddit.com");
+                    return;
+                case Domain.IImgurCom:
+                    serializer.Serialize(writer, "i.imgur.com");
+                    return;
+                case Domain.ImgurCom:
+                    serializer.Serialize(writer, "imgur.com");
+                    return;
+                case Domain.IReddIt:
+                    serializer.Serialize(writer, "i.redd.it");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Domain");
+        }
+
+        public static readonly DomainConverter Singleton = new DomainConverter();
+    }
+
+    internal class WhitelistStatusConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(WhitelistStatus) || t == typeof(WhitelistStatus?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "all_ads")
+            {
+                return WhitelistStatus.AllAds;
+            }
+            throw new Exception("Cannot unmarshal type WhitelistStatus");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (WhitelistStatus)untypedValue;
+            if (value == WhitelistStatus.AllAds)
+            {
+                serializer.Serialize(writer, "all_ads");
+                return;
+            }
+            throw new Exception("Cannot marshal type WhitelistStatus");
+        }
+
+        public static readonly WhitelistStatusConverter Singleton = new WhitelistStatusConverter();
+    }
+
+    internal class PostHintConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(PostHint) || t == typeof(PostHint?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "link":
+                    return PostHint.Link;
+                case "image":
+                    return PostHint.Image;
+            }
+            throw new Exception("Cannot unmarshal type PostHint");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (PostHint)untypedValue;
+            switch (value)
+            {
+                case PostHint.Link:
+                    serializer.Serialize(writer, "link");
+                    return;
+                case PostHint.Image:
+                    serializer.Serialize(writer, "image");
+                    return;
+            }
+            throw new Exception("Cannot marshal type PostHint");
+        }
+
+        public static readonly PostHintConverter Singleton = new PostHintConverter();
+    }
+
+    internal class SubredditConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Subreddit) || t == typeof(Subreddit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "funny")
+            {
+                return Subreddit.Funny;
+            }
+            throw new Exception("Cannot unmarshal type Subreddit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Subreddit)untypedValue;
+            if (value == Subreddit.Funny)
+            {
+                serializer.Serialize(writer, "funny");
+                return;
+            }
+            throw new Exception("Cannot marshal type Subreddit");
+        }
+
+        public static readonly SubredditConverter Singleton = new SubredditConverter();
+    }
+
+    internal class SubredditIdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditId) || t == typeof(SubredditId?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t5_2qh33")
+            {
+                return SubredditId.T52Qh33;
+            }
+            throw new Exception("Cannot unmarshal type SubredditId");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditId)untypedValue;
+            if (value == SubredditId.T52Qh33)
+            {
+                serializer.Serialize(writer, "t5_2qh33");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditId");
+        }
+
+        public static readonly SubredditIdConverter Singleton = new SubredditIdConverter();
+    }
+
+    internal class SubredditNamePrefixedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditNamePrefixed) || t == typeof(SubredditNamePrefixed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "r/funny")
+            {
+                return SubredditNamePrefixed.RFunny;
+            }
+            throw new Exception("Cannot unmarshal type SubredditNamePrefixed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditNamePrefixed)untypedValue;
+            if (value == SubredditNamePrefixed.RFunny)
+            {
+                serializer.Serialize(writer, "r/funny");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditNamePrefixed");
+        }
+
+        public static readonly SubredditNamePrefixedConverter Singleton = new SubredditNamePrefixedConverter();
+    }
+
+    internal class SubredditTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SubredditType) || t == typeof(SubredditType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "public")
+            {
+                return SubredditType.Public;
+            }
+            throw new Exception("Cannot unmarshal type SubredditType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SubredditType)untypedValue;
+            if (value == SubredditType.Public)
+            {
+                serializer.Serialize(writer, "public");
+                return;
+            }
+            throw new Exception("Cannot marshal type SubredditType");
+        }
+
+        public static readonly SubredditTypeConverter Singleton = new SubredditTypeConverter();
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "t3")
+            {
+                return Kind.T3;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.T3)
+            {
+                serializer.Serialize(writer, "t3");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/simple-object.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/simple-object.json/default/QuickType.cs
new file mode 100644
index 0000000..6d0605a
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/simple-object.json/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("date", Required = Required.Always)]
+        public long Date { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("validity", Required = Required.Always)]
+        public bool Validity { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/spotify-album.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/spotify-album.json/default/QuickType.cs
new file mode 100644
index 0000000..f587773
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/spotify-album.json/default/QuickType.cs
@@ -0,0 +1,261 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("album_type", Required = Required.Always)]
+        public string AlbumType { get; set; }
+
+        [JsonProperty("artists", Required = Required.Always)]
+        public Artist[] Artists { get; set; }
+
+        [JsonProperty("available_markets", Required = Required.Always)]
+        public string[] AvailableMarkets { get; set; }
+
+        [JsonProperty("copyrights", Required = Required.Always)]
+        public Copyright[] Copyrights { get; set; }
+
+        [JsonProperty("external_ids", Required = Required.Always)]
+        public ExternalIds ExternalIds { get; set; }
+
+        [JsonProperty("external_urls", Required = Required.Always)]
+        public ExternalUrls ExternalUrls { get; set; }
+
+        [JsonProperty("genres", Required = Required.Always)]
+        public object[] Genres { get; set; }
+
+        [JsonProperty("href", Required = Required.Always)]
+        public Uri Href { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("images", Required = Required.Always)]
+        public Image[] Images { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("popularity", Required = Required.Always)]
+        public long Popularity { get; set; }
+
+        [JsonProperty("release_date", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long ReleaseDate { get; set; }
+
+        [JsonProperty("release_date_precision", Required = Required.Always)]
+        public string ReleaseDatePrecision { get; set; }
+
+        [JsonProperty("tracks", Required = Required.Always)]
+        public Tracks Tracks { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("uri", Required = Required.Always)]
+        public string Uri { get; set; }
+    }
+
+    public partial record Artist
+    {
+        [JsonProperty("external_urls", Required = Required.Always)]
+        public ExternalUrls ExternalUrls { get; set; }
+
+        [JsonProperty("href", Required = Required.Always)]
+        public Uri Href { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("uri", Required = Required.Always)]
+        public string Uri { get; set; }
+    }
+
+    public partial record ExternalUrls
+    {
+        [JsonProperty("spotify", Required = Required.Always)]
+        public Uri Spotify { get; set; }
+    }
+
+    public partial record Copyright
+    {
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+    }
+
+    public partial record ExternalIds
+    {
+        [JsonProperty("upc", Required = Required.Always)]
+        public string Upc { get; set; }
+    }
+
+    public partial record Image
+    {
+        [JsonProperty("height", Required = Required.Always)]
+        public long Height { get; set; }
+
+        [JsonProperty("url", Required = Required.Always)]
+        public Uri Url { get; set; }
+
+        [JsonProperty("width", Required = Required.Always)]
+        public long Width { get; set; }
+    }
+
+    public partial record Tracks
+    {
+        [JsonProperty("href", Required = Required.Always)]
+        public Uri Href { get; set; }
+
+        [JsonProperty("items", Required = Required.Always)]
+        public Item[] Items { get; set; }
+
+        [JsonProperty("limit", Required = Required.Always)]
+        public long Limit { get; set; }
+
+        [JsonProperty("next", Required = Required.AllowNull)]
+        public object Next { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("previous", Required = Required.AllowNull)]
+        public object Previous { get; set; }
+
+        [JsonProperty("total", Required = Required.Always)]
+        public long Total { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("artists", Required = Required.Always)]
+        public Artist[] Artists { get; set; }
+
+        [JsonProperty("available_markets", Required = Required.Always)]
+        public string[] AvailableMarkets { get; set; }
+
+        [JsonProperty("disc_number", Required = Required.Always)]
+        public long DiscNumber { get; set; }
+
+        [JsonProperty("duration_ms", Required = Required.Always)]
+        public long DurationMs { get; set; }
+
+        [JsonProperty("explicit", Required = Required.Always)]
+        public bool Explicit { get; set; }
+
+        [JsonProperty("external_urls", Required = Required.Always)]
+        public ExternalUrls ExternalUrls { get; set; }
+
+        [JsonProperty("href", Required = Required.Always)]
+        public Uri Href { get; set; }
+
+        [JsonProperty("id", Required = Required.Always)]
+        public string Id { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("preview_url", Required = Required.Always)]
+        public Uri PreviewUrl { get; set; }
+
+        [JsonProperty("track_number", Required = Required.Always)]
+        public long TrackNumber { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public string Type { get; set; }
+
+        [JsonProperty("uri", Required = Required.Always)]
+        public string Uri { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/us-avg-temperatures.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/us-avg-temperatures.json/default/QuickType.cs
new file mode 100644
index 0000000..64ace20
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/us-avg-temperatures.json/default/QuickType.cs
@@ -0,0 +1,88 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("data", Required = Required.Always)]
+        public Dictionary<string, Datum> Data { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public Description Description { get; set; }
+    }
+
+    public partial record Datum
+    {
+        [JsonProperty("anomaly", Required = Required.Always)]
+        public string Anomaly { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record Description
+    {
+        [JsonProperty("base_period", Required = Required.Always)]
+        public string BasePeriod { get; set; }
+
+        [JsonProperty("missing", Required = Required.Always)]
+        public long Missing { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public string Title { get; set; }
+
+        [JsonProperty("units", Required = Required.Always)]
+        public string Units { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/us-senators.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/us-senators.json/default/QuickType.cs
new file mode 100644
index 0000000..007ed63
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/us-senators.json/default/QuickType.cs
@@ -0,0 +1,732 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("meta", Required = Required.Always)]
+        public Meta Meta { get; set; }
+
+        [JsonProperty("objects", Required = Required.Always)]
+        public Object[] Objects { get; set; }
+    }
+
+    public partial record Meta
+    {
+        [JsonProperty("limit", Required = Required.Always)]
+        public long Limit { get; set; }
+
+        [JsonProperty("offset", Required = Required.Always)]
+        public long Offset { get; set; }
+
+        [JsonProperty("total_count", Required = Required.Always)]
+        public long TotalCount { get; set; }
+    }
+
+    public partial record Object
+    {
+        [JsonProperty("caucus", Required = Required.AllowNull)]
+        public Party? Caucus { get; set; }
+
+        [JsonProperty("congress_numbers", Required = Required.Always)]
+        public long[] CongressNumbers { get; set; }
+
+        [JsonProperty("current", Required = Required.Always)]
+        public bool Current { get; set; }
+
+        [JsonProperty("description", Required = Required.Always)]
+        public string Description { get; set; }
+
+        [JsonProperty("district", Required = Required.AllowNull)]
+        public object District { get; set; }
+
+        [JsonProperty("enddate", Required = Required.Always)]
+        public DateTimeOffset Enddate { get; set; }
+
+        [JsonProperty("extra", Required = Required.Always)]
+        public Extra Extra { get; set; }
+
+        [JsonProperty("leadership_title", Required = Required.AllowNull)]
+        public string? LeadershipTitle { get; set; }
+
+        [JsonProperty("party", Required = Required.Always)]
+        public Party Party { get; set; }
+
+        [JsonProperty("person", Required = Required.Always)]
+        public Person Person { get; set; }
+
+        [JsonProperty("phone", Required = Required.Always)]
+        public string Phone { get; set; }
+
+        [JsonProperty("role_type", Required = Required.Always)]
+        public RoleType RoleType { get; set; }
+
+        [JsonProperty("role_type_label", Required = Required.Always)]
+        public RoleTypeLabel RoleTypeLabel { get; set; }
+
+        [JsonProperty("senator_class", Required = Required.Always)]
+        public SenatorClass SenatorClass { get; set; }
+
+        [JsonProperty("senator_class_label", Required = Required.Always)]
+        public SenatorClassLabel SenatorClassLabel { get; set; }
+
+        [JsonProperty("senator_rank", Required = Required.Always)]
+        public SenatorRank SenatorRank { get; set; }
+
+        [JsonProperty("senator_rank_label", Required = Required.Always)]
+        public SenatorRankLabel SenatorRankLabel { get; set; }
+
+        [JsonProperty("startdate", Required = Required.Always)]
+        public DateTimeOffset Startdate { get; set; }
+
+        [JsonProperty("state", Required = Required.Always)]
+        public string State { get; set; }
+
+        [JsonProperty("title", Required = Required.Always)]
+        public Title Title { get; set; }
+
+        [JsonProperty("title_long", Required = Required.Always)]
+        public RoleTypeLabel TitleLong { get; set; }
+
+        [JsonProperty("website", Required = Required.Always)]
+        public Uri Website { get; set; }
+    }
+
+    public partial record Extra
+    {
+        [JsonProperty("address", Required = Required.Always)]
+        public string Address { get; set; }
+
+        [JsonProperty("contact_form", Required = Required.Always)]
+        public Uri ContactForm { get; set; }
+
+        [JsonProperty("fax", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Fax { get; set; }
+
+        [JsonProperty("office", Required = Required.Always)]
+        public string Office { get; set; }
+
+        [JsonProperty("rss_url", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Uri? RssUrl { get; set; }
+    }
+
+    public partial record Person
+    {
+        [JsonProperty("bioguideid", Required = Required.Always)]
+        public string Bioguideid { get; set; }
+
+        [JsonProperty("birthday", Required = Required.Always)]
+        public DateTimeOffset Birthday { get; set; }
+
+        [JsonProperty("cspanid", Required = Required.Always)]
+        public long Cspanid { get; set; }
+
+        [JsonProperty("firstname", Required = Required.Always)]
+        public string Firstname { get; set; }
+
+        [JsonProperty("gender", Required = Required.Always)]
+        public Gender Gender { get; set; }
+
+        [JsonProperty("gender_label", Required = Required.Always)]
+        public GenderLabel GenderLabel { get; set; }
+
+        [JsonProperty("lastname", Required = Required.Always)]
+        public string Lastname { get; set; }
+
+        [JsonProperty("link", Required = Required.Always)]
+        public Uri Link { get; set; }
+
+        [JsonProperty("middlename", Required = Required.Always)]
+        public string Middlename { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("namemod", Required = Required.Always)]
+        public Namemod Namemod { get; set; }
+
+        [JsonProperty("nickname", Required = Required.Always)]
+        public string Nickname { get; set; }
+
+        [JsonProperty("osid", Required = Required.Always)]
+        public string Osid { get; set; }
+
+        [JsonProperty("pvsid", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long Pvsid { get; set; }
+
+        [JsonProperty("sortname", Required = Required.Always)]
+        public string Sortname { get; set; }
+
+        [JsonProperty("twitterid", Required = Required.AllowNull)]
+        public string? Twitterid { get; set; }
+
+        [JsonProperty("youtubeid", Required = Required.AllowNull)]
+        public string? Youtubeid { get; set; }
+    }
+
+    public enum Party { Democrat, Republican, Independent };
+
+    public enum Gender { Female, Male };
+
+    public enum GenderLabel { Female, Male };
+
+    public enum Namemod { Empty, Jr, Iii };
+
+    public enum RoleType { Senator };
+
+    public enum RoleTypeLabel { Senator };
+
+    public enum SenatorClass { Class1, Class2, Class3 };
+
+    public enum SenatorClassLabel { Class1, Class2, Class3 };
+
+    public enum SenatorRank { Junior, Senior };
+
+    public enum SenatorRankLabel { Junior, Senior };
+
+    public enum Title { Sen };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                PartyConverter.Singleton,
+                GenderConverter.Singleton,
+                GenderLabelConverter.Singleton,
+                NamemodConverter.Singleton,
+                RoleTypeConverter.Singleton,
+                RoleTypeLabelConverter.Singleton,
+                SenatorClassConverter.Singleton,
+                SenatorClassLabelConverter.Singleton,
+                SenatorRankConverter.Singleton,
+                SenatorRankLabelConverter.Singleton,
+                TitleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PartyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Party) || t == typeof(Party?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Democrat":
+                    return Party.Democrat;
+                case "Republican":
+                    return Party.Republican;
+                case "Independent":
+                    return Party.Independent;
+            }
+            throw new Exception("Cannot unmarshal type Party");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Party)untypedValue;
+            switch (value)
+            {
+                case Party.Democrat:
+                    serializer.Serialize(writer, "Democrat");
+                    return;
+                case Party.Republican:
+                    serializer.Serialize(writer, "Republican");
+                    return;
+                case Party.Independent:
+                    serializer.Serialize(writer, "Independent");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Party");
+        }
+
+        public static readonly PartyConverter Singleton = new PartyConverter();
+    }
+
+    internal class GenderConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gender) || t == typeof(Gender?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "female":
+                    return Gender.Female;
+                case "male":
+                    return Gender.Male;
+            }
+            throw new Exception("Cannot unmarshal type Gender");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Gender)untypedValue;
+            switch (value)
+            {
+                case Gender.Female:
+                    serializer.Serialize(writer, "female");
+                    return;
+                case Gender.Male:
+                    serializer.Serialize(writer, "male");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Gender");
+        }
+
+        public static readonly GenderConverter Singleton = new GenderConverter();
+    }
+
+    internal class GenderLabelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(GenderLabel) || t == typeof(GenderLabel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Female":
+                    return GenderLabel.Female;
+                case "Male":
+                    return GenderLabel.Male;
+            }
+            throw new Exception("Cannot unmarshal type GenderLabel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (GenderLabel)untypedValue;
+            switch (value)
+            {
+                case GenderLabel.Female:
+                    serializer.Serialize(writer, "Female");
+                    return;
+                case GenderLabel.Male:
+                    serializer.Serialize(writer, "Male");
+                    return;
+            }
+            throw new Exception("Cannot marshal type GenderLabel");
+        }
+
+        public static readonly GenderLabelConverter Singleton = new GenderLabelConverter();
+    }
+
+    internal class NamemodConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Namemod) || t == typeof(Namemod?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "":
+                    return Namemod.Empty;
+                case "Jr.":
+                    return Namemod.Jr;
+                case "III":
+                    return Namemod.Iii;
+            }
+            throw new Exception("Cannot unmarshal type Namemod");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Namemod)untypedValue;
+            switch (value)
+            {
+                case Namemod.Empty:
+                    serializer.Serialize(writer, "");
+                    return;
+                case Namemod.Jr:
+                    serializer.Serialize(writer, "Jr.");
+                    return;
+                case Namemod.Iii:
+                    serializer.Serialize(writer, "III");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Namemod");
+        }
+
+        public static readonly NamemodConverter Singleton = new NamemodConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class RoleTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RoleType) || t == typeof(RoleType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "senator")
+            {
+                return RoleType.Senator;
+            }
+            throw new Exception("Cannot unmarshal type RoleType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (RoleType)untypedValue;
+            if (value == RoleType.Senator)
+            {
+                serializer.Serialize(writer, "senator");
+                return;
+            }
+            throw new Exception("Cannot marshal type RoleType");
+        }
+
+        public static readonly RoleTypeConverter Singleton = new RoleTypeConverter();
+    }
+
+    internal class RoleTypeLabelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RoleTypeLabel) || t == typeof(RoleTypeLabel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Senator")
+            {
+                return RoleTypeLabel.Senator;
+            }
+            throw new Exception("Cannot unmarshal type RoleTypeLabel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (RoleTypeLabel)untypedValue;
+            if (value == RoleTypeLabel.Senator)
+            {
+                serializer.Serialize(writer, "Senator");
+                return;
+            }
+            throw new Exception("Cannot marshal type RoleTypeLabel");
+        }
+
+        public static readonly RoleTypeLabelConverter Singleton = new RoleTypeLabelConverter();
+    }
+
+    internal class SenatorClassConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SenatorClass) || t == typeof(SenatorClass?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "class1":
+                    return SenatorClass.Class1;
+                case "class2":
+                    return SenatorClass.Class2;
+                case "class3":
+                    return SenatorClass.Class3;
+            }
+            throw new Exception("Cannot unmarshal type SenatorClass");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SenatorClass)untypedValue;
+            switch (value)
+            {
+                case SenatorClass.Class1:
+                    serializer.Serialize(writer, "class1");
+                    return;
+                case SenatorClass.Class2:
+                    serializer.Serialize(writer, "class2");
+                    return;
+                case SenatorClass.Class3:
+                    serializer.Serialize(writer, "class3");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SenatorClass");
+        }
+
+        public static readonly SenatorClassConverter Singleton = new SenatorClassConverter();
+    }
+
+    internal class SenatorClassLabelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SenatorClassLabel) || t == typeof(SenatorClassLabel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Class 1":
+                    return SenatorClassLabel.Class1;
+                case "Class 2":
+                    return SenatorClassLabel.Class2;
+                case "Class 3":
+                    return SenatorClassLabel.Class3;
+            }
+            throw new Exception("Cannot unmarshal type SenatorClassLabel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SenatorClassLabel)untypedValue;
+            switch (value)
+            {
+                case SenatorClassLabel.Class1:
+                    serializer.Serialize(writer, "Class 1");
+                    return;
+                case SenatorClassLabel.Class2:
+                    serializer.Serialize(writer, "Class 2");
+                    return;
+                case SenatorClassLabel.Class3:
+                    serializer.Serialize(writer, "Class 3");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SenatorClassLabel");
+        }
+
+        public static readonly SenatorClassLabelConverter Singleton = new SenatorClassLabelConverter();
+    }
+
+    internal class SenatorRankConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SenatorRank) || t == typeof(SenatorRank?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "junior":
+                    return SenatorRank.Junior;
+                case "senior":
+                    return SenatorRank.Senior;
+            }
+            throw new Exception("Cannot unmarshal type SenatorRank");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SenatorRank)untypedValue;
+            switch (value)
+            {
+                case SenatorRank.Junior:
+                    serializer.Serialize(writer, "junior");
+                    return;
+                case SenatorRank.Senior:
+                    serializer.Serialize(writer, "senior");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SenatorRank");
+        }
+
+        public static readonly SenatorRankConverter Singleton = new SenatorRankConverter();
+    }
+
+    internal class SenatorRankLabelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SenatorRankLabel) || t == typeof(SenatorRankLabel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Junior":
+                    return SenatorRankLabel.Junior;
+                case "Senior":
+                    return SenatorRankLabel.Senior;
+            }
+            throw new Exception("Cannot unmarshal type SenatorRankLabel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SenatorRankLabel)untypedValue;
+            switch (value)
+            {
+                case SenatorRankLabel.Junior:
+                    serializer.Serialize(writer, "Junior");
+                    return;
+                case SenatorRankLabel.Senior:
+                    serializer.Serialize(writer, "Senior");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SenatorRankLabel");
+        }
+
+        public static readonly SenatorRankLabelConverter Singleton = new SenatorRankLabelConverter();
+    }
+
+    internal class TitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Title) || t == typeof(Title?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "Sen.")
+            {
+                return Title.Sen;
+            }
+            throw new Exception("Cannot unmarshal type Title");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Title)untypedValue;
+            if (value == Title.Sen)
+            {
+                serializer.Serialize(writer, "Sen.");
+                return;
+            }
+            throw new Exception("Cannot marshal type Title");
+        }
+
+        public static readonly TitleConverter Singleton = new TitleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/accessors.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/accessors.schema/default/QuickType.cs
new file mode 100644
index 0000000..05f0062
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/accessors.schema/default/QuickType.cs
@@ -0,0 +1,167 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("bar", Required = Required.Always)]
+        public string Barre { get; set; }
+
+        [JsonProperty("enum", Required = Required.Always)]
+        public Enum Enumerification { get; set; }
+
+        [JsonProperty("foo", Required = Required.Always)]
+        public string Fu_uu { get; set; }
+
+        [JsonProperty("union", Required = Required.Always)]
+        public Union Unionization { get; set; }
+    }
+
+    public enum Enum { Fire, Grass, Blue };
+
+    public partial struct Union
+    {
+        public double? Amount;
+        public bool? Presence;
+
+        public static implicit operator Union(double Amount) => new Union { Amount = Amount };
+        public static implicit operator Union(bool Presence) => new Union { Presence = Presence };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                EnumConverter.Singleton,
+                UnionConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class EnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Enum) || t == typeof(Enum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "red":
+                    return Enum.Fire;
+                case "green":
+                    return Enum.Grass;
+                case "blue":
+                    return Enum.Blue;
+            }
+            throw new Exception("Cannot unmarshal type Enum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Enum)untypedValue;
+            switch (value)
+            {
+                case Enum.Fire:
+                    serializer.Serialize(writer, "red");
+                    return;
+                case Enum.Grass:
+                    serializer.Serialize(writer, "green");
+                    return;
+                case Enum.Blue:
+                    serializer.Serialize(writer, "blue");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Enum");
+        }
+
+        public static readonly EnumConverter Singleton = new EnumConverter();
+    }
+
+    internal class UnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Union) || t == typeof(Union?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Union { Amount = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Union { Presence = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Union");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Union)untypedValue;
+            if (value.Amount != null)
+            {
+                serializer.Serialize(writer, value.Amount.Value);
+                return;
+            }
+            if (value.Presence != null)
+            {
+                serializer.Serialize(writer, value.Presence.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Union");
+        }
+
+        public static readonly UnionConverter Singleton = new UnionConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/all-of-additional-properties-false.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/all-of-additional-properties-false.schema/default/QuickType.cs
new file mode 100644
index 0000000..39252e8
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/all-of-additional-properties-false.schema/default/QuickType.cs
@@ -0,0 +1,163 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("amount", Required = Required.Always)]
+        public double Amount { get; set; }
+
+        [JsonProperty("frequency", Required = Required.Always)]
+        public Frequency Frequency { get; set; }
+
+        [JsonProperty("description", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Description { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public TypeEnum Type { get; set; }
+    }
+
+    public enum Frequency { Weekly, Monthly, Annually };
+
+    public enum TypeEnum { GrossSalaryAmount, Overtime };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                FrequencyConverter.Singleton,
+                TypeEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class FrequencyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Frequency) || t == typeof(Frequency?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Weekly":
+                    return Frequency.Weekly;
+                case "Monthly":
+                    return Frequency.Monthly;
+                case "Annually":
+                    return Frequency.Annually;
+            }
+            throw new Exception("Cannot unmarshal type Frequency");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Frequency)untypedValue;
+            switch (value)
+            {
+                case Frequency.Weekly:
+                    serializer.Serialize(writer, "Weekly");
+                    return;
+                case Frequency.Monthly:
+                    serializer.Serialize(writer, "Monthly");
+                    return;
+                case Frequency.Annually:
+                    serializer.Serialize(writer, "Annually");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Frequency");
+        }
+
+        public static readonly FrequencyConverter Singleton = new FrequencyConverter();
+    }
+
+    internal class TypeEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TypeEnum) || t == typeof(TypeEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "GrossSalaryAmount":
+                    return TypeEnum.GrossSalaryAmount;
+                case "Overtime":
+                    return TypeEnum.Overtime;
+            }
+            throw new Exception("Cannot unmarshal type TypeEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TypeEnum)untypedValue;
+            switch (value)
+            {
+                case TypeEnum.GrossSalaryAmount:
+                    serializer.Serialize(writer, "GrossSalaryAmount");
+                    return;
+                case TypeEnum.Overtime:
+                    serializer.Serialize(writer, "Overtime");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TypeEnum");
+        }
+
+        public static readonly TypeEnumConverter Singleton = new TypeEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/any.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/any.schema/default/QuickType.cs
new file mode 100644
index 0000000..38bd184
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/any.schema/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.AllowNull)]
+        public object Foo { get; set; }
+
+        [JsonProperty("values", Required = Required.Always)]
+        public Dictionary<string, object> Values { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/bool-string.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/bool-string.schema/default/QuickType.cs
new file mode 100644
index 0000000..8eb559c
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/bool-string.schema/default/QuickType.cs
@@ -0,0 +1,322 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("arrNullable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleDecodeArrayConverter))]
+        public bool?[]? ArrNullable { get; set; }
+
+        [JsonProperty("arrOne", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyDecodeArrayConverter))]
+        public bool[]? ArrOne { get; set; }
+
+        [JsonProperty("nullable", Required = Required.AllowNull)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool? Nullable { get; set; }
+
+        [JsonProperty("one", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool One { get; set; }
+
+        [JsonProperty("optional", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public bool? Optional { get; set; }
+
+        [JsonProperty("unionWithBool", Required = Required.Always)]
+        [JsonConverter(typeof(DecodingChoiceConverter))]
+        public bool UnionWithBool { get; set; }
+
+        [JsonProperty("unionWithBoolAndEnum", Required = Required.Always)]
+        public UnionWithBoolAndEnumUnion UnionWithBoolAndEnum { get; set; }
+    }
+
+    public enum UnionWithBoolAndEnumEnum { Foo };
+
+    public partial struct UnionWithBoolAndEnumUnion
+    {
+        public bool? Bool;
+        public UnionWithBoolAndEnumEnum? Enum;
+
+        public static implicit operator UnionWithBoolAndEnumUnion(bool Bool) => new UnionWithBoolAndEnumUnion { Bool = Bool };
+        public static implicit operator UnionWithBoolAndEnumUnion(UnionWithBoolAndEnumEnum Enum) => new UnionWithBoolAndEnumUnion { Enum = Enum };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                UnionWithBoolAndEnumUnionConverter.Singleton,
+                UnionWithBoolAndEnumEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleDecodeArrayConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool?[]);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            reader.Read();
+            var value = new List<bool?>();
+            while (reader.TokenType != JsonToken.EndArray)
+            {
+                var converter = ParseStringConverter.Singleton;
+                var arrayItem = (bool?)converter.ReadJson(reader, typeof(bool?), null, serializer);
+                value.Add(arrayItem);
+                reader.Read();
+            }
+            return value.ToArray();
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (bool?[])untypedValue;
+            writer.WriteStartArray();
+            foreach (var arrayItem in value)
+            {
+                var converter = ParseStringConverter.Singleton;
+                converter.WriteJson(writer, arrayItem, serializer);
+            }
+            writer.WriteEndArray();
+            return;
+        }
+
+        public static readonly PurpleDecodeArrayConverter Singleton = new PurpleDecodeArrayConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            bool b;
+            if (Boolean.TryParse(value, out b))
+            {
+                return b;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            var boolString = value ? "true" : "false";
+            serializer.Serialize(writer, boolString);
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class FluffyDecodeArrayConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool[]);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            reader.Read();
+            var value = new List<bool>();
+            while (reader.TokenType != JsonToken.EndArray)
+            {
+                var converter = ParseStringConverter.Singleton;
+                var arrayItem = (bool)converter.ReadJson(reader, typeof(bool), null, serializer);
+                value.Add(arrayItem);
+                reader.Read();
+            }
+            return value.ToArray();
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (bool[])untypedValue;
+            writer.WriteStartArray();
+            foreach (var arrayItem in value)
+            {
+                var converter = ParseStringConverter.Singleton;
+                converter.WriteJson(writer, arrayItem, serializer);
+            }
+            writer.WriteEndArray();
+            return;
+        }
+
+        public static readonly FluffyDecodeArrayConverter Singleton = new FluffyDecodeArrayConverter();
+    }
+
+    internal class DecodingChoiceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(bool) || t == typeof(bool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return boolValue;
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    bool b;
+                    if (Boolean.TryParse(stringValue, out b))
+                    {
+                        return b;
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type bool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (bool)untypedValue;
+            serializer.Serialize(writer, value);
+            return;
+        }
+
+        public static readonly DecodingChoiceConverter Singleton = new DecodingChoiceConverter();
+    }
+
+    internal class UnionWithBoolAndEnumUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWithBoolAndEnumUnion) || t == typeof(UnionWithBoolAndEnumUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnionWithBoolAndEnumUnion { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    bool b;
+                    if (Boolean.TryParse(stringValue, out b))
+                    {
+                        return new UnionWithBoolAndEnumUnion { Bool = b };
+                    }
+                    if (stringValue == "foo")
+                    {
+                        return new UnionWithBoolAndEnumUnion { Enum = UnionWithBoolAndEnumEnum.Foo };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type UnionWithBoolAndEnumUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionWithBoolAndEnumUnion)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.Enum != null)
+            {
+                if (value.Enum == UnionWithBoolAndEnumEnum.Foo)
+                {
+                    serializer.Serialize(writer, "foo");
+                    return;
+                }
+            }
+            throw new Exception("Cannot marshal type UnionWithBoolAndEnumUnion");
+        }
+
+        public static readonly UnionWithBoolAndEnumUnionConverter Singleton = new UnionWithBoolAndEnumUnionConverter();
+    }
+
+    internal class UnionWithBoolAndEnumEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWithBoolAndEnumEnum) || t == typeof(UnionWithBoolAndEnumEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "foo")
+            {
+                return UnionWithBoolAndEnumEnum.Foo;
+            }
+            throw new Exception("Cannot unmarshal type UnionWithBoolAndEnumEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (UnionWithBoolAndEnumEnum)untypedValue;
+            if (value == UnionWithBoolAndEnumEnum.Foo)
+            {
+                serializer.Serialize(writer, "foo");
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionWithBoolAndEnumEnum");
+        }
+
+        public static readonly UnionWithBoolAndEnumEnumConverter Singleton = new UnionWithBoolAndEnumEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/boolean-subschema.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/boolean-subschema.schema/default/QuickType.cs
new file mode 100644
index 0000000..eb02748
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/boolean-subschema.schema/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("disallowed")]
+        public object? Disallowed { get; set; }
+
+        [JsonProperty("empty", Required = Required.Always)]
+        public object[] Empty { get; set; }
+
+        [JsonProperty("foo", Required = Required.Always)]
+        public string Foo { get; set; }
+
+        [JsonProperty("impossible")]
+        public object? Impossible { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/camelCase.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/camelCase.schema/default/QuickType.cs
new file mode 100644
index 0000000..c640625
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/camelCase.schema/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("myProperty", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? MyProperty { get; set; }
+
+        [JsonProperty("secondProperty", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? SecondProperty { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/class-map-union.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/class-map-union.schema/default/QuickType.cs
new file mode 100644
index 0000000..9f35254
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/class-map-union.schema/default/QuickType.cs
@@ -0,0 +1,136 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("union", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Dictionary<string, UnionValue>? Union { get; set; }
+    }
+
+    public partial record UnionClass
+    {
+        [JsonProperty("quux", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Quux { get; set; }
+    }
+
+    public partial struct UnionValue
+    {
+        public bool? Bool;
+        public double? Double;
+        public string? String;
+        public UnionClass? UnionClass;
+
+        public static implicit operator UnionValue(bool Bool) => new UnionValue { Bool = Bool };
+        public static implicit operator UnionValue(double Double) => new UnionValue { Double = Double };
+        public static implicit operator UnionValue(string String) => new UnionValue { String = String };
+        public static implicit operator UnionValue(UnionClass UnionClass) => new UnionValue { UnionClass = UnionClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                UnionValueConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class UnionValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionValue) || t == typeof(UnionValue?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionValue { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new UnionValue { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new UnionValue { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnionClass>(reader);
+                    return new UnionValue { UnionClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionValue");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionValue)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.UnionClass != null)
+            {
+                serializer.Serialize(writer, value.UnionClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionValue");
+        }
+
+        public static readonly UnionValueConverter Singleton = new UnionValueConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/class-with-additional.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/class-with-additional.schema/default/QuickType.cs
new file mode 100644
index 0000000..fb904e4
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/class-with-additional.schema/default/QuickType.cs
@@ -0,0 +1,109 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("map", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Dictionary<string, Map>? Map { get; set; }
+    }
+
+    public partial struct Map
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Map(bool Bool) => new Map { Bool = Bool };
+        public static implicit operator Map(double Double) => new Map { Double = Double };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                MapConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class MapConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Map) || t == typeof(Map?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Map { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Map { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Map");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Map)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Map");
+        }
+
+        public static readonly MapConverter Singleton = new MapConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/QuickType.cs
new file mode 100644
index 0000000..a634029
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/QuickType.cs
@@ -0,0 +1,110 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        /// <summary>
+        /// Nested enum block comment openers:
+        /// {-
+        /// /*
+        /// This text must remain inside the generated enum documentation comment.
+        /// </summary>
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    /// <summary>
+    /// Nested enum block comment openers:
+    /// {-
+    /// /*
+    /// This text must remain inside the generated enum documentation comment.
+    /// </summary>
+    public enum Kind { Ok };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "ok")
+            {
+                return Kind.Ok;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.Ok)
+            {
+                serializer.Serialize(writer, "ok");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/comment-injection-enum.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/comment-injection-enum.schema/default/QuickType.cs
new file mode 100644
index 0000000..629a99b
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/comment-injection-enum.schema/default/QuickType.cs
@@ -0,0 +1,116 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        /// <summary>
+        /// Comment delimiters:
+        /// */
+        /// {-
+        /// -}
+        /// """
+        /// }
+        /// }
+        /// </summary>
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    /// <summary>
+    /// Comment delimiters:
+    /// */
+    /// {-
+    /// -}
+    /// """
+    /// }
+    /// }
+    /// </summary>
+    public enum Kind { Ok };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "ok")
+            {
+                return Kind.Ok;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.Ok)
+            {
+                serializer.Serialize(writer, "ok");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/comment-injection-nested-comment.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/comment-injection-nested-comment.schema/default/QuickType.cs
new file mode 100644
index 0000000..10b1172
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/comment-injection-nested-comment.schema/default/QuickType.cs
@@ -0,0 +1,73 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    /// <summary>
+    /// Nested block comment openers:
+    /// {-
+    /// /*
+    /// This text must remain inside the generated documentation comment.
+    /// </summary>
+    public partial record TopLevel
+    {
+        /// <summary>
+        /// Nested property block comment openers:
+        /// {-
+        /// /*
+        /// This text must remain inside the generated property documentation comment.
+        /// </summary>
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/comment-injection.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/comment-injection.schema/default/QuickType.cs
new file mode 100644
index 0000000..f2cb4b6
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/comment-injection.schema/default/QuickType.cs
@@ -0,0 +1,107 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    /// <summary>
+    /// Comment delimiters:
+    /// */
+    /// /*
+    /// {-
+    /// -}
+    /// """
+    /// &lt;/summary&gt; &amp; &lt;br&gt;
+    /// }
+    /// }
+    /// }
+    /// }
+    /// }
+    /// </summary>
+    public partial record TopLevel
+    {
+        /// <summary>
+        /// Ends with a backslash \
+        /// </summary>
+        [JsonProperty("trailingBackslash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TrailingBackslash { get; set; }
+
+        /// <summary>
+        /// Ends with a quote "
+        /// </summary>
+        [JsonProperty("trailingQuote", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TrailingQuote { get; set; }
+
+        /// <summary>
+        /// Ends with a triple quote """
+        /// </summary>
+        [JsonProperty("trailingTripleQuote", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TrailingTripleQuote { get; set; }
+
+        /// <summary>
+        /// Property delimiters:
+        /// */
+        /// /*
+        /// {-
+        /// -}
+        /// """
+        /// &lt;/summary&gt; &amp; &lt;br&gt;
+        /// }
+        /// }
+        /// }
+        /// }
+        /// }
+        /// </summary>
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/const-non-string.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/const-non-string.schema/default/QuickType.cs
new file mode 100644
index 0000000..2a665a7
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/const-non-string.schema/default/QuickType.cs
@@ -0,0 +1,110 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("amount", Required = Required.Always)]
+        public long Amount { get; set; }
+
+        [JsonProperty("enabled", Required = Required.Always)]
+        public bool Enabled { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+
+        [JsonProperty("ratio", Required = Required.Always)]
+        public double Ratio { get; set; }
+
+        [JsonProperty("version", Required = Required.Always)]
+        public double Version { get; set; }
+    }
+
+    public enum Kind { Widget };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "widget")
+            {
+                return Kind.Widget;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            if (value == Kind.Widget)
+            {
+                serializer.Serialize(writer, "widget");
+                return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/constructor.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/constructor.schema/default/QuickType.cs
new file mode 100644
index 0000000..e1a107b
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/constructor.schema/default/QuickType.cs
@@ -0,0 +1,113 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("constructor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionConstructor? Constructor { get; set; }
+    }
+
+    public partial record Constructor
+    {
+    }
+
+    public partial struct UnionConstructor
+    {
+        public Constructor? Constructor;
+        public double? Double;
+
+        public static implicit operator UnionConstructor(Constructor Constructor) => new UnionConstructor { Constructor = Constructor };
+        public static implicit operator UnionConstructor(double Double) => new UnionConstructor { Double = Double };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                UnionConstructorConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class UnionConstructorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionConstructor) || t == typeof(UnionConstructor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionConstructor { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Constructor>(reader);
+                    return new UnionConstructor { Constructor = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionConstructor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionConstructor)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Constructor != null)
+            {
+                serializer.Serialize(writer, value.Constructor);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionConstructor");
+        }
+
+        public static readonly UnionConstructorConverter Singleton = new UnionConstructorConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/cut-enum.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/cut-enum.schema/default/QuickType.cs
new file mode 100644
index 0000000..3fbd5dc
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/cut-enum.schema/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.Always)]
+        public long Foo { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/date-time-or-string.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/date-time-or-string.schema/default/QuickType.cs
new file mode 100644
index 0000000..7861f40
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/date-time-or-string.schema/default/QuickType.cs
@@ -0,0 +1,158 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("bar", Required = Required.Always)]
+        public BarUnion Bar { get; set; }
+
+        [JsonProperty("foo", Required = Required.Always)]
+        public string Foo { get; set; }
+    }
+
+    public enum BarEnum { Quux };
+
+    public partial struct BarUnion
+    {
+        public DateTimeOffset? DateTime;
+        public BarEnum? Enum;
+
+        public static implicit operator BarUnion(DateTimeOffset DateTime) => new BarUnion { DateTime = DateTime };
+        public static implicit operator BarUnion(BarEnum Enum) => new BarUnion { Enum = Enum };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                BarUnionConverter.Singleton,
+                BarEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class BarUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(BarUnion) || t == typeof(BarUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    DateTimeOffset dt;
+                    if (DateTimeOffset.TryParse(stringValue, out dt))
+                    {
+                        return new BarUnion { DateTime = dt };
+                    }
+                    if (stringValue == "quux")
+                    {
+                        return new BarUnion { Enum = BarEnum.Quux };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type BarUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (BarUnion)untypedValue;
+            if (value.DateTime != null)
+            {
+                serializer.Serialize(writer, value.DateTime.Value.ToString("o", System.Globalization.CultureInfo.InvariantCulture));
+                return;
+            }
+            if (value.Enum != null)
+            {
+                if (value.Enum == BarEnum.Quux)
+                {
+                    serializer.Serialize(writer, "quux");
+                    return;
+                }
+            }
+            throw new Exception("Cannot marshal type BarUnion");
+        }
+
+        public static readonly BarUnionConverter Singleton = new BarUnionConverter();
+    }
+
+    internal class BarEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(BarEnum) || t == typeof(BarEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "quux")
+            {
+                return BarEnum.Quux;
+            }
+            throw new Exception("Cannot unmarshal type BarEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (BarEnum)untypedValue;
+            if (value == BarEnum.Quux)
+            {
+                serializer.Serialize(writer, "quux");
+                return;
+            }
+            throw new Exception("Cannot marshal type BarEnum");
+        }
+
+        public static readonly BarEnumConverter Singleton = new BarEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/date-time.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/date-time.schema/default/QuickType.cs
new file mode 100644
index 0000000..06fcbfa
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/date-time.schema/default/QuickType.cs
@@ -0,0 +1,191 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("complex-union-array", Required = Required.Always)]
+        public ComplexUnionArrayElement[] ComplexUnionArray { get; set; }
+
+        [JsonProperty("date", Required = Required.Always)]
+        public DateTimeOffset Date { get; set; }
+
+        [JsonProperty("date-time", Required = Required.Always)]
+        public DateTimeOffset DateTime { get; set; }
+
+        [JsonProperty("time", Required = Required.Always)]
+        public DateTimeOffset Time { get; set; }
+
+        [JsonProperty("union-array", Required = Required.Always)]
+        public DateTimeOffset[] UnionArray { get; set; }
+    }
+
+    public enum ComplexUnionArrayEnum { Foo, Bar };
+
+    public partial struct ComplexUnionArrayElement
+    {
+        public DateTimeOffset? DateTime;
+        public ComplexUnionArrayEnum? Enum;
+        public long? Integer;
+
+        public static implicit operator ComplexUnionArrayElement(DateTimeOffset DateTime) => new ComplexUnionArrayElement { DateTime = DateTime };
+        public static implicit operator ComplexUnionArrayElement(ComplexUnionArrayEnum Enum) => new ComplexUnionArrayElement { Enum = Enum };
+        public static implicit operator ComplexUnionArrayElement(long Integer) => new ComplexUnionArrayElement { Integer = Integer };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ComplexUnionArrayElementConverter.Singleton,
+                ComplexUnionArrayEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ComplexUnionArrayElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ComplexUnionArrayElement) || t == typeof(ComplexUnionArrayElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new ComplexUnionArrayElement { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    DateTimeOffset dt;
+                    if (DateTimeOffset.TryParse(stringValue, out dt))
+                    {
+                        return new ComplexUnionArrayElement { DateTime = dt };
+                    }
+                    switch (stringValue)
+                    {
+                        case "foo":
+                            return new ComplexUnionArrayElement { Enum = ComplexUnionArrayEnum.Foo };
+                        case "bar":
+                            return new ComplexUnionArrayElement { Enum = ComplexUnionArrayEnum.Bar };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type ComplexUnionArrayElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ComplexUnionArrayElement)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.DateTime != null)
+            {
+                serializer.Serialize(writer, value.DateTime.Value.ToString("o", System.Globalization.CultureInfo.InvariantCulture));
+                return;
+            }
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case ComplexUnionArrayEnum.Foo:
+                        serializer.Serialize(writer, "foo");
+                        return;
+                    case ComplexUnionArrayEnum.Bar:
+                        serializer.Serialize(writer, "bar");
+                        return;
+                }
+            }
+            throw new Exception("Cannot marshal type ComplexUnionArrayElement");
+        }
+
+        public static readonly ComplexUnionArrayElementConverter Singleton = new ComplexUnionArrayElementConverter();
+    }
+
+    internal class ComplexUnionArrayEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ComplexUnionArrayEnum) || t == typeof(ComplexUnionArrayEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "foo":
+                    return ComplexUnionArrayEnum.Foo;
+                case "bar":
+                    return ComplexUnionArrayEnum.Bar;
+            }
+            throw new Exception("Cannot unmarshal type ComplexUnionArrayEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ComplexUnionArrayEnum)untypedValue;
+            switch (value)
+            {
+                case ComplexUnionArrayEnum.Foo:
+                    serializer.Serialize(writer, "foo");
+                    return;
+                case ComplexUnionArrayEnum.Bar:
+                    serializer.Serialize(writer, "bar");
+                    return;
+            }
+            throw new Exception("Cannot marshal type ComplexUnionArrayEnum");
+        }
+
+        public static readonly ComplexUnionArrayEnumConverter Singleton = new ComplexUnionArrayEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/default-value.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/default-value.schema/default/QuickType.cs
new file mode 100644
index 0000000..2dad0ac
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/default-value.schema/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    /// <summary>
+    /// An object with a scalar default
+    /// </summary>
+    public partial record TopLevel
+    {
+        [JsonProperty("id", Required = Required.Always)]
+        public long Id { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/description-with-double-quotes.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/description-with-double-quotes.schema/default/QuickType.cs
new file mode 100644
index 0000000..2b8c08c
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/description-with-double-quotes.schema/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    /// <summary>
+    /// Cool "stuff"
+    /// </summary>
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Foo { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/description.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/description.schema/default/QuickType.cs
new file mode 100644
index 0000000..b6aa573
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/description.schema/default/QuickType.cs
@@ -0,0 +1,242 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    /// <summary>
+    /// The top-level class.
+    /// Its description has two lines.
+    /// </summary>
+    public partial record TopLevel
+    {
+        /// <summary>
+        /// A pretty boolean
+        /// </summary>
+        [JsonProperty("bar", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Bar { get; set; }
+
+        /// <summary>
+        /// An enumeration
+        /// </summary>
+        [JsonProperty("enum", Required = Required.Always)]
+        public Enum Enum { get; set; }
+
+        [JsonProperty("foo", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Foo { get; set; }
+
+        [JsonProperty("object-or-string", Required = Required.Always)]
+        public ObjectOrStringUnion ObjectOrString { get; set; }
+
+        /// <summary>
+        /// Either a number or a string
+        /// </summary>
+        [JsonProperty("union", Required = Required.Always)]
+        public Union Union { get; set; }
+    }
+
+    public partial record ObjectOrStringClass
+    {
+        /// <summary>
+        /// This must not get lost
+        /// </summary>
+        [JsonProperty("prop", Required = Required.Always)]
+        public double Prop { get; set; }
+    }
+
+    /// <summary>
+    /// An enumeration
+    /// </summary>
+    public enum Enum { Foo, Bar };
+
+    public partial struct ObjectOrStringUnion
+    {
+        public ObjectOrStringClass? ObjectOrStringClass;
+        public string? String;
+
+        public static implicit operator ObjectOrStringUnion(ObjectOrStringClass ObjectOrStringClass) => new ObjectOrStringUnion { ObjectOrStringClass = ObjectOrStringClass };
+        public static implicit operator ObjectOrStringUnion(string String) => new ObjectOrStringUnion { String = String };
+    }
+
+    /// <summary>
+    /// Either a number or a string
+    /// </summary>
+    public partial struct Union
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Union(double Double) => new Union { Double = Double };
+        public static implicit operator Union(string String) => new Union { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                EnumConverter.Singleton,
+                ObjectOrStringUnionConverter.Singleton,
+                UnionConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class EnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Enum) || t == typeof(Enum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "foo":
+                    return Enum.Foo;
+                case "bar":
+                    return Enum.Bar;
+            }
+            throw new Exception("Cannot unmarshal type Enum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Enum)untypedValue;
+            switch (value)
+            {
+                case Enum.Foo:
+                    serializer.Serialize(writer, "foo");
+                    return;
+                case Enum.Bar:
+                    serializer.Serialize(writer, "bar");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Enum");
+        }
+
+        public static readonly EnumConverter Singleton = new EnumConverter();
+    }
+
+    internal class ObjectOrStringUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ObjectOrStringUnion) || t == typeof(ObjectOrStringUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new ObjectOrStringUnion { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ObjectOrStringClass>(reader);
+                    return new ObjectOrStringUnion { ObjectOrStringClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ObjectOrStringUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ObjectOrStringUnion)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.ObjectOrStringClass != null)
+            {
+                serializer.Serialize(writer, value.ObjectOrStringClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ObjectOrStringUnion");
+        }
+
+        public static readonly ObjectOrStringUnionConverter Singleton = new ObjectOrStringUnionConverter();
+    }
+
+    internal class UnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Union) || t == typeof(Union?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Union { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Union { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Union");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Union)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Union");
+        }
+
+        public static readonly UnionConverter Singleton = new UnionConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/direct-union.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/direct-union.schema/default/QuickType.cs
new file mode 100644
index 0000000..d420262
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/direct-union.schema/default/QuickType.cs
@@ -0,0 +1,166 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("stuff", Required = Required.Always)]
+        public Dictionary<string, Thing> Stuff { get; set; }
+    }
+
+    public partial record Thing
+    {
+        [JsonProperty("optional")]
+        public Anything? Optional { get; set; }
+
+        [JsonProperty("required", Required = Required.AllowNull)]
+        public Anything ThingRequired { get; set; }
+    }
+
+    public partial struct Anything
+    {
+        public object[]? AnythingArray;
+        public Dictionary<string, object>? AnythingMap;
+        public bool? Bool;
+        public double? Double;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Anything(object[] AnythingArray) => new Anything { AnythingArray = AnythingArray };
+        public static implicit operator Anything(Dictionary<string, object> AnythingMap) => new Anything { AnythingMap = AnythingMap };
+        public static implicit operator Anything(bool Bool) => new Anything { Bool = Bool };
+        public static implicit operator Anything(double Double) => new Anything { Double = Double };
+        public static implicit operator Anything(long Integer) => new Anything { Integer = Integer };
+        public static implicit operator Anything(string String) => new Anything { String = String };
+        public bool IsNull => AnythingArray == null && Bool == null && Double == null && Integer == null && AnythingMap == null && String == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                AnythingConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class AnythingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Anything) || t == typeof(Anything?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Anything { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Anything { Integer = integerValue };
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Anything { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Anything { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Anything { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, object>>(reader);
+                    return new Anything { AnythingMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new Anything { AnythingArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Anything");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Anything)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.AnythingArray != null)
+            {
+                serializer.Serialize(writer, value.AnythingArray);
+                return;
+            }
+            if (value.AnythingMap != null)
+            {
+                serializer.Serialize(writer, value.AnythingMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Anything");
+        }
+
+        public static readonly AnythingConverter Singleton = new AnythingConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/enum-large.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/enum-large.schema/default/QuickType.cs
new file mode 100644
index 0000000..2db8337
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/enum-large.schema/default/QuickType.cs
@@ -0,0 +1,247 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("callsign", Required = Required.Always)]
+        public Callsign Callsign { get; set; }
+
+        [JsonProperty("priority", Required = Required.Always)]
+        public Priority Priority { get; set; }
+    }
+
+    public enum Callsign { Alpha, Bravo, Charlie, Delta, Echo, Foxtrot, Golf, Hotel, India, Juliett, Kilo, Lima, Mike, November, Oscar, Papa, Quebec, Romeo, Sierra, Tango };
+
+    public enum Priority { Low, Medium, High };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                CallsignConverter.Singleton,
+                PriorityConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class CallsignConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Callsign) || t == typeof(Callsign?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "alpha":
+                    return Callsign.Alpha;
+                case "bravo":
+                    return Callsign.Bravo;
+                case "charlie":
+                    return Callsign.Charlie;
+                case "delta":
+                    return Callsign.Delta;
+                case "echo":
+                    return Callsign.Echo;
+                case "foxtrot":
+                    return Callsign.Foxtrot;
+                case "golf":
+                    return Callsign.Golf;
+                case "hotel":
+                    return Callsign.Hotel;
+                case "india":
+                    return Callsign.India;
+                case "juliett":
+                    return Callsign.Juliett;
+                case "kilo":
+                    return Callsign.Kilo;
+                case "lima":
+                    return Callsign.Lima;
+                case "mike":
+                    return Callsign.Mike;
+                case "november":
+                    return Callsign.November;
+                case "oscar":
+                    return Callsign.Oscar;
+                case "papa":
+                    return Callsign.Papa;
+                case "quebec":
+                    return Callsign.Quebec;
+                case "romeo":
+                    return Callsign.Romeo;
+                case "sierra":
+                    return Callsign.Sierra;
+                case "tango":
+                    return Callsign.Tango;
+            }
+            throw new Exception("Cannot unmarshal type Callsign");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Callsign)untypedValue;
+            switch (value)
+            {
+                case Callsign.Alpha:
+                    serializer.Serialize(writer, "alpha");
+                    return;
+                case Callsign.Bravo:
+                    serializer.Serialize(writer, "bravo");
+                    return;
+                case Callsign.Charlie:
+                    serializer.Serialize(writer, "charlie");
+                    return;
+                case Callsign.Delta:
+                    serializer.Serialize(writer, "delta");
+                    return;
+                case Callsign.Echo:
+                    serializer.Serialize(writer, "echo");
+                    return;
+                case Callsign.Foxtrot:
+                    serializer.Serialize(writer, "foxtrot");
+                    return;
+                case Callsign.Golf:
+                    serializer.Serialize(writer, "golf");
+                    return;
+                case Callsign.Hotel:
+                    serializer.Serialize(writer, "hotel");
+                    return;
+                case Callsign.India:
+                    serializer.Serialize(writer, "india");
+                    return;
+                case Callsign.Juliett:
+                    serializer.Serialize(writer, "juliett");
+                    return;
+                case Callsign.Kilo:
+                    serializer.Serialize(writer, "kilo");
+                    return;
+                case Callsign.Lima:
+                    serializer.Serialize(writer, "lima");
+                    return;
+                case Callsign.Mike:
+                    serializer.Serialize(writer, "mike");
+                    return;
+                case Callsign.November:
+                    serializer.Serialize(writer, "november");
+                    return;
+                case Callsign.Oscar:
+                    serializer.Serialize(writer, "oscar");
+                    return;
+                case Callsign.Papa:
+                    serializer.Serialize(writer, "papa");
+                    return;
+                case Callsign.Quebec:
+                    serializer.Serialize(writer, "quebec");
+                    return;
+                case Callsign.Romeo:
+                    serializer.Serialize(writer, "romeo");
+                    return;
+                case Callsign.Sierra:
+                    serializer.Serialize(writer, "sierra");
+                    return;
+                case Callsign.Tango:
+                    serializer.Serialize(writer, "tango");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Callsign");
+        }
+
+        public static readonly CallsignConverter Singleton = new CallsignConverter();
+    }
+
+    internal class PriorityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Priority) || t == typeof(Priority?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "low":
+                    return Priority.Low;
+                case "medium":
+                    return Priority.Medium;
+                case "high":
+                    return Priority.High;
+            }
+            throw new Exception("Cannot unmarshal type Priority");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Priority)untypedValue;
+            switch (value)
+            {
+                case Priority.Low:
+                    serializer.Serialize(writer, "low");
+                    return;
+                case Priority.Medium:
+                    serializer.Serialize(writer, "medium");
+                    return;
+                case Priority.High:
+                    serializer.Serialize(writer, "high");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Priority");
+        }
+
+        public static readonly PriorityConverter Singleton = new PriorityConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/enum-with-null.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/enum-with-null.schema/default/QuickType.cs
new file mode 100644
index 0000000..d636ba6
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/enum-with-null.schema/default/QuickType.cs
@@ -0,0 +1,105 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("enum", Required = Required.AllowNull)]
+        public Enum? Enum { get; set; }
+    }
+
+    public enum Enum { Foo, Bar };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                EnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class EnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Enum) || t == typeof(Enum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "foo":
+                    return Enum.Foo;
+                case "bar":
+                    return Enum.Bar;
+            }
+            throw new Exception("Cannot unmarshal type Enum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Enum)untypedValue;
+            switch (value)
+            {
+                case Enum.Foo:
+                    serializer.Serialize(writer, "foo");
+                    return;
+                case Enum.Bar:
+                    serializer.Serialize(writer, "bar");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Enum");
+        }
+
+        public static readonly EnumConverter Singleton = new EnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/enum-with-values.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/enum-with-values.schema/default/QuickType.cs
new file mode 100644
index 0000000..8d545ab
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/enum-with-values.schema/default/QuickType.cs
@@ -0,0 +1,130 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("weekdays", Required = Required.Always)]
+        public Weekdays Weekdays { get; set; }
+    }
+
+    public enum Weekdays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                WeekdaysConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class WeekdaysConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Weekdays) || t == typeof(Weekdays?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "Monday":
+                    return Weekdays.Monday;
+                case "Tuesday":
+                    return Weekdays.Tuesday;
+                case "Wednesday":
+                    return Weekdays.Wednesday;
+                case "Thursday":
+                    return Weekdays.Thursday;
+                case "Friday":
+                    return Weekdays.Friday;
+                case "Saturday":
+                    return Weekdays.Saturday;
+                case "Sunday":
+                    return Weekdays.Sunday;
+            }
+            throw new Exception("Cannot unmarshal type Weekdays");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Weekdays)untypedValue;
+            switch (value)
+            {
+                case Weekdays.Monday:
+                    serializer.Serialize(writer, "Monday");
+                    return;
+                case Weekdays.Tuesday:
+                    serializer.Serialize(writer, "Tuesday");
+                    return;
+                case Weekdays.Wednesday:
+                    serializer.Serialize(writer, "Wednesday");
+                    return;
+                case Weekdays.Thursday:
+                    serializer.Serialize(writer, "Thursday");
+                    return;
+                case Weekdays.Friday:
+                    serializer.Serialize(writer, "Friday");
+                    return;
+                case Weekdays.Saturday:
+                    serializer.Serialize(writer, "Saturday");
+                    return;
+                case Weekdays.Sunday:
+                    serializer.Serialize(writer, "Sunday");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Weekdays");
+        }
+
+        public static readonly WeekdaysConverter Singleton = new WeekdaysConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/enum.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/enum.schema/default/QuickType.cs
new file mode 100644
index 0000000..3ec920b
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/enum.schema/default/QuickType.cs
@@ -0,0 +1,287 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("arr", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Arr[]? Arr { get; set; }
+
+        [JsonProperty("for", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? For { get; set; }
+
+        [JsonProperty("gve", Required = Required.Always)]
+        public Gve Gve { get; set; }
+
+        [JsonProperty("lvc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Lvc? Lvc { get; set; }
+
+        [JsonProperty("otherArr", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public OtherArr[]? OtherArr { get; set; }
+    }
+
+    public enum OtherArr { Foo, Bar, If };
+
+    public enum Gve { Good, Neutral, Evil };
+
+    public enum Lvc { Lawful, Neutral, Chaotic };
+
+    public partial struct Arr
+    {
+        public OtherArr? Enum;
+        public long? Integer;
+
+        public static implicit operator Arr(OtherArr Enum) => new Arr { Enum = Enum };
+        public static implicit operator Arr(long Integer) => new Arr { Integer = Integer };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ArrConverter.Singleton,
+                OtherArrConverter.Singleton,
+                GveConverter.Singleton,
+                LvcConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ArrConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Arr) || t == typeof(Arr?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Arr { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    switch (stringValue)
+                    {
+                        case "foo":
+                            return new Arr { Enum = OtherArr.Foo };
+                        case "bar":
+                            return new Arr { Enum = OtherArr.Bar };
+                        case "if":
+                            return new Arr { Enum = OtherArr.If };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type Arr");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Arr)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case OtherArr.Foo:
+                        serializer.Serialize(writer, "foo");
+                        return;
+                    case OtherArr.Bar:
+                        serializer.Serialize(writer, "bar");
+                        return;
+                    case OtherArr.If:
+                        serializer.Serialize(writer, "if");
+                        return;
+                }
+            }
+            throw new Exception("Cannot marshal type Arr");
+        }
+
+        public static readonly ArrConverter Singleton = new ArrConverter();
+    }
+
+    internal class OtherArrConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(OtherArr) || t == typeof(OtherArr?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "foo":
+                    return OtherArr.Foo;
+                case "bar":
+                    return OtherArr.Bar;
+                case "if":
+                    return OtherArr.If;
+            }
+            throw new Exception("Cannot unmarshal type OtherArr");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (OtherArr)untypedValue;
+            switch (value)
+            {
+                case OtherArr.Foo:
+                    serializer.Serialize(writer, "foo");
+                    return;
+                case OtherArr.Bar:
+                    serializer.Serialize(writer, "bar");
+                    return;
+                case OtherArr.If:
+                    serializer.Serialize(writer, "if");
+                    return;
+            }
+            throw new Exception("Cannot marshal type OtherArr");
+        }
+
+        public static readonly OtherArrConverter Singleton = new OtherArrConverter();
+    }
+
+    internal class GveConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Gve) || t == typeof(Gve?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "good":
+                    return Gve.Good;
+                case "neutral":
+                    return Gve.Neutral;
+                case "evil":
+                    return Gve.Evil;
+            }
+            throw new Exception("Cannot unmarshal type Gve");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Gve)untypedValue;
+            switch (value)
+            {
+                case Gve.Good:
+                    serializer.Serialize(writer, "good");
+                    return;
+                case Gve.Neutral:
+                    serializer.Serialize(writer, "neutral");
+                    return;
+                case Gve.Evil:
+                    serializer.Serialize(writer, "evil");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Gve");
+        }
+
+        public static readonly GveConverter Singleton = new GveConverter();
+    }
+
+    internal class LvcConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Lvc) || t == typeof(Lvc?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "lawful":
+                    return Lvc.Lawful;
+                case "neutral":
+                    return Lvc.Neutral;
+                case "chaotic":
+                    return Lvc.Chaotic;
+            }
+            throw new Exception("Cannot unmarshal type Lvc");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Lvc)untypedValue;
+            switch (value)
+            {
+                case Lvc.Lawful:
+                    serializer.Serialize(writer, "lawful");
+                    return;
+                case Lvc.Neutral:
+                    serializer.Serialize(writer, "neutral");
+                    return;
+                case Lvc.Chaotic:
+                    serializer.Serialize(writer, "chaotic");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Lvc");
+        }
+
+        public static readonly LvcConverter Singleton = new LvcConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/go-schema-pattern-properties.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/go-schema-pattern-properties.schema/default/QuickType.cs
new file mode 100644
index 0000000..2a29686
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/go-schema-pattern-properties.schema/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("map", Required = Required.Always)]
+        public Dictionary<string, long> Map { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/haskell-enum-forbidden.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/haskell-enum-forbidden.schema/default/QuickType.cs
new file mode 100644
index 0000000..7eed847
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/haskell-enum-forbidden.schema/default/QuickType.cs
@@ -0,0 +1,105 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("health", Required = Required.Always)]
+        public Health Health { get; set; }
+    }
+
+    public enum Health { Ok, Error };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                HealthConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class HealthConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Health) || t == typeof(Health?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "ok":
+                    return Health.Ok;
+                case "error":
+                    return Health.Error;
+            }
+            throw new Exception("Cannot unmarshal type Health");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Health)untypedValue;
+            switch (value)
+            {
+                case Health.Ok:
+                    serializer.Serialize(writer, "ok");
+                    return;
+                case Health.Error:
+                    serializer.Serialize(writer, "error");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Health");
+        }
+
+        public static readonly HealthConverter Singleton = new HealthConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/id-no-address.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/id-no-address.schema/default/QuickType.cs
new file mode 100644
index 0000000..d1a9a98
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/id-no-address.schema/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("item", Required = Required.Always)]
+        public long Item { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/id-root.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/id-root.schema/default/QuickType.cs
new file mode 100644
index 0000000..2d23371
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/id-root.schema/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("bar", Required = Required.Always)]
+        public long Bar { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/implicit-all-of.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/implicit-all-of.schema/default/QuickType.cs
new file mode 100644
index 0000000..51a68c7
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/implicit-all-of.schema/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.Always)]
+        public long Foo { get; set; }
+
+        [JsonProperty("bar", Required = Required.Always)]
+        public bool Bar { get; set; }
+
+        [JsonProperty("quux", Required = Required.Always)]
+        public string Quux { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/implicit-class-array-union.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/implicit-class-array-union.schema/default/QuickType.cs
new file mode 100644
index 0000000..0fdae7f
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/implicit-class-array-union.schema/default/QuickType.cs
@@ -0,0 +1,163 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.AllowNull)]
+        public FooUnion Foo { get; set; }
+    }
+
+    public partial record FooClass
+    {
+        [JsonProperty("bar", Required = Required.Always)]
+        public long Bar { get; set; }
+    }
+
+    public partial struct FooUnion
+    {
+        public bool? Bool;
+        public double? Double;
+        public FooClass? FooClass;
+        public long? Integer;
+        public long[]? IntegerArray;
+        public string? String;
+
+        public static implicit operator FooUnion(bool Bool) => new FooUnion { Bool = Bool };
+        public static implicit operator FooUnion(double Double) => new FooUnion { Double = Double };
+        public static implicit operator FooUnion(FooClass FooClass) => new FooUnion { FooClass = FooClass };
+        public static implicit operator FooUnion(long Integer) => new FooUnion { Integer = Integer };
+        public static implicit operator FooUnion(long[] IntegerArray) => new FooUnion { IntegerArray = IntegerArray };
+        public static implicit operator FooUnion(string String) => new FooUnion { String = String };
+        public bool IsNull => IntegerArray == null && Bool == null && FooClass == null && Double == null && Integer == null && String == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                FooUnionConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class FooUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FooUnion) || t == typeof(FooUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new FooUnion { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new FooUnion { Integer = integerValue };
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FooUnion { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new FooUnion { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new FooUnion { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FooClass>(reader);
+                    return new FooUnion { FooClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<long[]>(reader);
+                    return new FooUnion { IntegerArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type FooUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FooUnion)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.IntegerArray != null)
+            {
+                serializer.Serialize(writer, value.IntegerArray);
+                return;
+            }
+            if (value.FooClass != null)
+            {
+                serializer.Serialize(writer, value.FooClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type FooUnion");
+        }
+
+        public static readonly FooUnionConverter Singleton = new FooUnionConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/implicit-one-of.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/implicit-one-of.schema/default/QuickType.cs
new file mode 100644
index 0000000..7017e33
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/implicit-one-of.schema/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.Always)]
+        public long Foo { get; set; }
+
+        [JsonProperty("bar", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Bar { get; set; }
+
+        [JsonProperty("quux", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Quux { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/integer-float-union.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/integer-float-union.schema/default/QuickType.cs
new file mode 100644
index 0000000..1dda56a
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/integer-float-union.schema/default/QuickType.cs
@@ -0,0 +1,108 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("number", Required = Required.Always)]
+        public Number Number { get; set; }
+    }
+
+    public partial struct Number
+    {
+        public double? Double;
+        public long? Integer;
+
+        public static implicit operator Number(double Double) => new Number { Double = Double };
+        public static implicit operator Number(long Integer) => new Number { Integer = Integer };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                NumberConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class NumberConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Number) || t == typeof(Number?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Number { Integer = integerValue };
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Number { Double = doubleValue };
+            }
+            throw new Exception("Cannot unmarshal type Number");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Number)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Number");
+        }
+
+        public static readonly NumberConverter Singleton = new NumberConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/integer-string.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/integer-string.schema/default/QuickType.cs
new file mode 100644
index 0000000..9599257
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/integer-string.schema/default/QuickType.cs
@@ -0,0 +1,321 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("arrNullable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleDecodeArrayConverter))]
+        public long?[]? ArrNullable { get; set; }
+
+        [JsonProperty("arrOne", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyDecodeArrayConverter))]
+        public long[]? ArrOne { get; set; }
+
+        [JsonProperty("nullable", Required = Required.AllowNull)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Nullable { get; set; }
+
+        [JsonProperty("one", Required = Required.Always)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long One { get; set; }
+
+        [JsonProperty("optional", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(ParseStringConverter))]
+        public long? Optional { get; set; }
+
+        [JsonProperty("unionWithInt", Required = Required.Always)]
+        [JsonConverter(typeof(DecodingChoiceConverter))]
+        public long UnionWithInt { get; set; }
+
+        [JsonProperty("unionWithIntAndEnum", Required = Required.Always)]
+        public UnionWithIntAndEnumUnion UnionWithIntAndEnum { get; set; }
+    }
+
+    public enum UnionWithIntAndEnumEnum { Foo };
+
+    public partial struct UnionWithIntAndEnumUnion
+    {
+        public UnionWithIntAndEnumEnum? Enum;
+        public long? Integer;
+
+        public static implicit operator UnionWithIntAndEnumUnion(UnionWithIntAndEnumEnum Enum) => new UnionWithIntAndEnumUnion { Enum = Enum };
+        public static implicit operator UnionWithIntAndEnumUnion(long Integer) => new UnionWithIntAndEnumUnion { Integer = Integer };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                UnionWithIntAndEnumUnionConverter.Singleton,
+                UnionWithIntAndEnumEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleDecodeArrayConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long?[]);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            reader.Read();
+            var value = new List<long?>();
+            while (reader.TokenType != JsonToken.EndArray)
+            {
+                var converter = ParseStringConverter.Singleton;
+                var arrayItem = (long?)converter.ReadJson(reader, typeof(long?), null, serializer);
+                value.Add(arrayItem);
+                reader.Read();
+            }
+            return value.ToArray();
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (long?[])untypedValue;
+            writer.WriteStartArray();
+            foreach (var arrayItem in value)
+            {
+                var converter = ParseStringConverter.Singleton;
+                converter.WriteJson(writer, arrayItem, serializer);
+            }
+            writer.WriteEndArray();
+            return;
+        }
+
+        public static readonly PurpleDecodeArrayConverter Singleton = new PurpleDecodeArrayConverter();
+    }
+
+    internal class ParseStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            long l;
+            if (Int64.TryParse(value, out l))
+            {
+                return l;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value.ToString());
+            return;
+        }
+
+        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
+    }
+
+    internal class FluffyDecodeArrayConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long[]);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            reader.Read();
+            var value = new List<long>();
+            while (reader.TokenType != JsonToken.EndArray)
+            {
+                var converter = ParseStringConverter.Singleton;
+                var arrayItem = (long)converter.ReadJson(reader, typeof(long), null, serializer);
+                value.Add(arrayItem);
+                reader.Read();
+            }
+            return value.ToArray();
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (long[])untypedValue;
+            writer.WriteStartArray();
+            foreach (var arrayItem in value)
+            {
+                var converter = ParseStringConverter.Singleton;
+                converter.WriteJson(writer, arrayItem, serializer);
+            }
+            writer.WriteEndArray();
+            return;
+        }
+
+        public static readonly FluffyDecodeArrayConverter Singleton = new FluffyDecodeArrayConverter();
+    }
+
+    internal class DecodingChoiceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return integerValue;
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    long l;
+                    if (Int64.TryParse(stringValue, out l))
+                    {
+                        return l;
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            serializer.Serialize(writer, value);
+            return;
+        }
+
+        public static readonly DecodingChoiceConverter Singleton = new DecodingChoiceConverter();
+    }
+
+    internal class UnionWithIntAndEnumUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWithIntAndEnumUnion) || t == typeof(UnionWithIntAndEnumUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new UnionWithIntAndEnumUnion { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    if (stringValue == "foo")
+                    {
+                        return new UnionWithIntAndEnumUnion { Enum = UnionWithIntAndEnumEnum.Foo };
+                    }
+                    long l;
+                    if (Int64.TryParse(stringValue, out l))
+                    {
+                        return new UnionWithIntAndEnumUnion { Integer = l };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type UnionWithIntAndEnumUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionWithIntAndEnumUnion)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Enum != null)
+            {
+                if (value.Enum == UnionWithIntAndEnumEnum.Foo)
+                {
+                    serializer.Serialize(writer, "foo");
+                    return;
+                }
+            }
+            throw new Exception("Cannot marshal type UnionWithIntAndEnumUnion");
+        }
+
+        public static readonly UnionWithIntAndEnumUnionConverter Singleton = new UnionWithIntAndEnumUnionConverter();
+    }
+
+    internal class UnionWithIntAndEnumEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWithIntAndEnumEnum) || t == typeof(UnionWithIntAndEnumEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "foo")
+            {
+                return UnionWithIntAndEnumEnum.Foo;
+            }
+            throw new Exception("Cannot unmarshal type UnionWithIntAndEnumEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (UnionWithIntAndEnumEnum)untypedValue;
+            if (value == UnionWithIntAndEnumEnum.Foo)
+            {
+                serializer.Serialize(writer, "foo");
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionWithIntAndEnumEnum");
+        }
+
+        public static readonly UnionWithIntAndEnumEnumConverter Singleton = new UnionWithIntAndEnumEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/integer-type.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/integer-type.schema/default/QuickType.cs
new file mode 100644
index 0000000..368dd60
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/integer-type.schema/default/QuickType.cs
@@ -0,0 +1,85 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("above_i32_max", Required = Required.Always)]
+        public long AboveI32Max { get; set; }
+
+        [JsonProperty("below_i32_min", Required = Required.Always)]
+        public long BelowI32Min { get; set; }
+
+        [JsonProperty("i32_range", Required = Required.Always)]
+        public long I32Range { get; set; }
+
+        [JsonProperty("large_bounds", Required = Required.Always)]
+        public long LargeBounds { get; set; }
+
+        [JsonProperty("only_maximum", Required = Required.Always)]
+        public long OnlyMaximum { get; set; }
+
+        [JsonProperty("only_minimum", Required = Required.Always)]
+        public long OnlyMinimum { get; set; }
+
+        [JsonProperty("small_negative", Required = Required.Always)]
+        public long SmallNegative { get; set; }
+
+        [JsonProperty("small_positive", Required = Required.Always)]
+        public long SmallPositive { get; set; }
+
+        [JsonProperty("unbounded", Required = Required.Always)]
+        public long Unbounded { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/intersection-nested.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/intersection-nested.schema/default/QuickType.cs
new file mode 100644
index 0000000..5af83fb
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/intersection-nested.schema/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("intersection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Intersection { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/intersection.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/intersection.schema/default/QuickType.cs
new file mode 100644
index 0000000..cd3333e
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/intersection.schema/default/QuickType.cs
@@ -0,0 +1,70 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("intersection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Intersection? Intersection { get; set; }
+    }
+
+    public partial record Intersection
+    {
+        [JsonProperty("foo", Required = Required.Always)]
+        public double Foo { get; set; }
+
+        [JsonProperty("bar", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Bar { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/keyword-enum.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
new file mode 100644
index 0000000..4500f45
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
@@ -0,0 +1,1480 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("enum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Enum? Enum { get; set; }
+    }
+
+    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, Break, Bycopy, Byref, Byte, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, CoAwait, CoReturn, CoYield, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, Date, DateParseHandling, Debugger, Decimal, Declare, Decltype, DecodeString, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Enum, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, Friend, From, FromJson, Func, Function, Get, Global, Go, Goto, Guard, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, Interface, Internal, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, Lambda, Lazy, Left, Let, List, Lock, Long, Map, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, Not, NotEq, NsString, Null, EnumNull, Nullptr, Number, Object, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, Sbyte, Sealed, Sel, Select, Self, EnumSelf, Serialize, Set, Short, Signed, Sizeof, Stackalloc, Static, StaticAssert, StaticCast, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, ThreadLocal, Throw, Throws, ToJson, TopLevel, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, Unowned, Unsafe, Unsigned, Ushort, Using, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                EnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class EnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Enum) || t == typeof(Enum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "_":
+                    return Enum.Empty;
+                case "_Bool":
+                    return Enum.Bool;
+                case "_Complex":
+                    return Enum.Complex;
+                case "_Imaginery":
+                    return Enum.Imaginery;
+                case "abstract":
+                    return Enum.Abstract;
+                case "alignas":
+                    return Enum.Alignas;
+                case "alignof":
+                    return Enum.Alignof;
+                case "and":
+                    return Enum.And;
+                case "and_eq":
+                    return Enum.AndEq;
+                case "any":
+                    return Enum.Any;
+                case "Any":
+                    return Enum.EnumAny;
+                case "array":
+                    return Enum.Array;
+                case "as":
+                    return Enum.As;
+                case "asm":
+                    return Enum.Asm;
+                case "assert":
+                    return Enum.Assert;
+                case "associatedtype":
+                    return Enum.Associatedtype;
+                case "associativity":
+                    return Enum.Associativity;
+                case "async":
+                    return Enum.Async;
+                case "atomic":
+                    return Enum.Atomic;
+                case "atomic_cancel":
+                    return Enum.AtomicCancel;
+                case "atomic_commit":
+                    return Enum.AtomicCommit;
+                case "atomic_noexcept":
+                    return Enum.AtomicNoexcept;
+                case "auto":
+                    return Enum.Auto;
+                case "await":
+                    return Enum.Await;
+                case "base":
+                    return Enum.Base;
+                case "bitand":
+                    return Enum.Bitand;
+                case "bitor":
+                    return Enum.Bitor;
+                case "BOOL":
+                    return Enum.EnumBool;
+                case "bool":
+                    return Enum.PurpleBool;
+                case "boolean":
+                    return Enum.Boolean;
+                case "break":
+                    return Enum.Break;
+                case "bycopy":
+                    return Enum.Bycopy;
+                case "byref":
+                    return Enum.Byref;
+                case "byte":
+                    return Enum.Byte;
+                case "case":
+                    return Enum.Case;
+                case "catch":
+                    return Enum.Catch;
+                case "chan":
+                    return Enum.Chan;
+                case "char":
+                    return Enum.Char;
+                case "char16_t":
+                    return Enum.Char16T;
+                case "char32_t":
+                    return Enum.Char32T;
+                case "checked":
+                    return Enum.Checked;
+                case "class":
+                    return Enum.Class;
+                case "Class":
+                    return Enum.EnumClass;
+                case "co_await":
+                    return Enum.CoAwait;
+                case "co_return":
+                    return Enum.CoReturn;
+                case "co_yield":
+                    return Enum.CoYield;
+                case "compl":
+                    return Enum.Compl;
+                case "concept":
+                    return Enum.Concept;
+                case "console":
+                    return Enum.Console;
+                case "const":
+                    return Enum.Const;
+                case "const_cast":
+                    return Enum.ConstCast;
+                case "constexpr":
+                    return Enum.Constexpr;
+                case "constructor":
+                    return Enum.Constructor;
+                case "continue":
+                    return Enum.Continue;
+                case "convenience":
+                    return Enum.Convenience;
+                case "convert":
+                    return Enum.Convert;
+                case "converter":
+                    return Enum.Converter;
+                case "date":
+                    return Enum.Date;
+                case "date_parse_handling":
+                    return Enum.DateParseHandling;
+                case "debugger":
+                    return Enum.Debugger;
+                case "decimal":
+                    return Enum.Decimal;
+                case "declare":
+                    return Enum.Declare;
+                case "decltype":
+                    return Enum.Decltype;
+                case "decode_string":
+                    return Enum.DecodeString;
+                case "def":
+                    return Enum.Def;
+                case "default":
+                    return Enum.Default;
+                case "defer":
+                    return Enum.Defer;
+                case "deinit":
+                    return Enum.Deinit;
+                case "del":
+                    return Enum.Del;
+                case "delegate":
+                    return Enum.Delegate;
+                case "delete":
+                    return Enum.Delete;
+                case "dict":
+                    return Enum.Dict;
+                case "dictionary":
+                    return Enum.Dictionary;
+                case "didSet":
+                    return Enum.DidSet;
+                case "do":
+                    return Enum.Do;
+                case "double":
+                    return Enum.Double;
+                case "dynamic":
+                    return Enum.Dynamic;
+                case "dynamic_cast":
+                    return Enum.DynamicCast;
+                case "elif":
+                    return Enum.Elif;
+                case "else":
+                    return Enum.Else;
+                case "encode_quick_type":
+                    return Enum.EncodeQuickType;
+                case "enum":
+                    return Enum.Enum;
+                case "event":
+                    return Enum.Event;
+                case "except":
+                    return Enum.Except;
+                case "exception":
+                    return Enum.Exception;
+                case "explicit":
+                    return Enum.Explicit;
+                case "export":
+                    return Enum.Export;
+                case "exposing":
+                    return Enum.Exposing;
+                case "extends":
+                    return Enum.Extends;
+                case "extension":
+                    return Enum.Extension;
+                case "extern":
+                    return Enum.Extern;
+                case "fallthrough":
+                    return Enum.Fallthrough;
+                case "false":
+                    return Enum.False;
+                case "False":
+                    return Enum.EnumFalse;
+                case "fileprivate":
+                    return Enum.Fileprivate;
+                case "final":
+                    return Enum.Final;
+                case "finally":
+                    return Enum.Finally;
+                case "fixed":
+                    return Enum.Fixed;
+                case "float":
+                    return Enum.Float;
+                case "for":
+                    return Enum.For;
+                case "foreach":
+                    return Enum.Foreach;
+                case "friend":
+                    return Enum.Friend;
+                case "from":
+                    return Enum.From;
+                case "from_json":
+                    return Enum.FromJson;
+                case "func":
+                    return Enum.Func;
+                case "function":
+                    return Enum.Function;
+                case "get":
+                    return Enum.Get;
+                case "global":
+                    return Enum.Global;
+                case "go":
+                    return Enum.Go;
+                case "goto":
+                    return Enum.Goto;
+                case "guard":
+                    return Enum.Guard;
+                case "hasOwnProperty":
+                    return Enum.HasOwnProperty;
+                case "id":
+                    return Enum.Id;
+                case "if":
+                    return Enum.If;
+                case "IMP":
+                    return Enum.Imp;
+                case "implements":
+                    return Enum.Implements;
+                case "implicit":
+                    return Enum.Implicit;
+                case "import":
+                    return Enum.Import;
+                case "in":
+                    return Enum.In;
+                case "indirect":
+                    return Enum.Indirect;
+                case "infix":
+                    return Enum.Infix;
+                case "init":
+                    return Enum.Init;
+                case "inline":
+                    return Enum.Inline;
+                case "inout":
+                    return Enum.Inout;
+                case "instanceof":
+                    return Enum.Instanceof;
+                case "int":
+                    return Enum.Int;
+                case "interface":
+                    return Enum.Interface;
+                case "internal":
+                    return Enum.Internal;
+                case "iterable":
+                    return Enum.Iterable;
+                case "is":
+                    return Enum.Is;
+                case "jdec":
+                    return Enum.Jdec;
+                case "jenc":
+                    return Enum.Jenc;
+                case "jpipe":
+                    return Enum.Jpipe;
+                case "json":
+                    return Enum.Json;
+                case "json_converter":
+                    return Enum.JsonConverter;
+                case "json_serializer":
+                    return Enum.JsonSerializer;
+                case "json_token":
+                    return Enum.JsonToken;
+                case "json_writer":
+                    return Enum.JsonWriter;
+                case "lambda":
+                    return Enum.Lambda;
+                case "lazy":
+                    return Enum.Lazy;
+                case "left":
+                    return Enum.Left;
+                case "let":
+                    return Enum.Let;
+                case "list":
+                    return Enum.List;
+                case "lock":
+                    return Enum.Lock;
+                case "long":
+                    return Enum.Long;
+                case "map":
+                    return Enum.Map;
+                case "metadata_property_handling":
+                    return Enum.MetadataPropertyHandling;
+                case "module":
+                    return Enum.Module;
+                case "mutable":
+                    return Enum.Mutable;
+                case "mutating":
+                    return Enum.Mutating;
+                case "namespace":
+                    return Enum.Namespace;
+                case "native":
+                    return Enum.Native;
+                case "new":
+                    return Enum.New;
+                case "newtonsoft":
+                    return Enum.Newtonsoft;
+                case "nil":
+                    return Enum.Nil;
+                case "NO":
+                    return Enum.No;
+                case "noexcept":
+                    return Enum.Noexcept;
+                case "nonatomic":
+                    return Enum.Nonatomic;
+                case "none":
+                    return Enum.None;
+                case "None":
+                    return Enum.EnumNone;
+                case "nonlocal":
+                    return Enum.Nonlocal;
+                case "nonmutating":
+                    return Enum.Nonmutating;
+                case "not":
+                    return Enum.Not;
+                case "not_eq":
+                    return Enum.NotEq;
+                case "NSString":
+                    return Enum.NsString;
+                case "NULL":
+                    return Enum.Null;
+                case "null":
+                    return Enum.EnumNull;
+                case "nullptr":
+                    return Enum.Nullptr;
+                case "number":
+                    return Enum.Number;
+                case "object":
+                    return Enum.Object;
+                case "of":
+                    return Enum.Of;
+                case "oneway":
+                    return Enum.Oneway;
+                case "open":
+                    return Enum.Open;
+                case "operator":
+                    return Enum.Operator;
+                case "optional":
+                    return Enum.Optional;
+                case "or":
+                    return Enum.Or;
+                case "or_eq":
+                    return Enum.OrEq;
+                case "out":
+                    return Enum.Out;
+                case "override":
+                    return Enum.Override;
+                case "package":
+                    return Enum.Package;
+                case "params":
+                    return Enum.Params;
+                case "pass":
+                    return Enum.Pass;
+                case "port":
+                    return Enum.Port;
+                case "postfix":
+                    return Enum.Postfix;
+                case "precedence":
+                    return Enum.Precedence;
+                case "prefix":
+                    return Enum.Prefix;
+                case "print":
+                    return Enum.Print;
+                case "printf":
+                    return Enum.Printf;
+                case "private":
+                    return Enum.Private;
+                case "protected":
+                    return Enum.Protected;
+                case "Protocol":
+                    return Enum.Protocol;
+                case "protocol":
+                    return Enum.EnumProtocol;
+                case "public":
+                    return Enum.Public;
+                case "quicktype":
+                    return Enum.Quicktype;
+                case "raise":
+                    return Enum.Raise;
+                case "range":
+                    return Enum.Range;
+                case "readonly":
+                    return Enum.Readonly;
+                case "ref":
+                    return Enum.Ref;
+                case "register":
+                    return Enum.Register;
+                case "reinterpret_cast":
+                    return Enum.ReinterpretCast;
+                case "repeat":
+                    return Enum.Repeat;
+                case "require":
+                    return Enum.Require;
+                case "required":
+                    return Enum.Required;
+                case "requires":
+                    return Enum.Requires;
+                case "restrict":
+                    return Enum.Restrict;
+                case "retain":
+                    return Enum.Retain;
+                case "rethrows":
+                    return Enum.Rethrows;
+                case "return":
+                    return Enum.Return;
+                case "right":
+                    return Enum.Right;
+                case "sbyte":
+                    return Enum.Sbyte;
+                case "sealed":
+                    return Enum.Sealed;
+                case "SEL":
+                    return Enum.Sel;
+                case "select":
+                    return Enum.Select;
+                case "Self":
+                    return Enum.Self;
+                case "self":
+                    return Enum.EnumSelf;
+                case "serialize":
+                    return Enum.Serialize;
+                case "set":
+                    return Enum.Set;
+                case "short":
+                    return Enum.Short;
+                case "signed":
+                    return Enum.Signed;
+                case "sizeof":
+                    return Enum.Sizeof;
+                case "stackalloc":
+                    return Enum.Stackalloc;
+                case "static":
+                    return Enum.Static;
+                case "static_assert":
+                    return Enum.StaticAssert;
+                case "static_cast":
+                    return Enum.StaticCast;
+                case "strictfp":
+                    return Enum.Strictfp;
+                case "string":
+                    return Enum.String;
+                case "struct":
+                    return Enum.Struct;
+                case "subscript":
+                    return Enum.Subscript;
+                case "super":
+                    return Enum.Super;
+                case "switch":
+                    return Enum.Switch;
+                case "symbol":
+                    return Enum.Symbol;
+                case "synchronized":
+                    return Enum.Synchronized;
+                case "system":
+                    return Enum.System;
+                case "template":
+                    return Enum.Template;
+                case "then":
+                    return Enum.Then;
+                case "this":
+                    return Enum.This;
+                case "thread_local":
+                    return Enum.ThreadLocal;
+                case "throw":
+                    return Enum.Throw;
+                case "throws":
+                    return Enum.Throws;
+                case "to_json":
+                    return Enum.ToJson;
+                case "top_level":
+                    return Enum.TopLevel;
+                case "transient":
+                    return Enum.Transient;
+                case "True":
+                    return Enum.True;
+                case "true":
+                    return Enum.EnumTrue;
+                case "try":
+                    return Enum.Try;
+                case "Type":
+                    return Enum.Type;
+                case "type":
+                    return Enum.EnumType;
+                case "typealias":
+                    return Enum.Typealias;
+                case "typedef":
+                    return Enum.Typedef;
+                case "typeid":
+                    return Enum.Typeid;
+                case "typename":
+                    return Enum.Typename;
+                case "typeof":
+                    return Enum.Typeof;
+                case "uint":
+                    return Enum.Uint;
+                case "ulong":
+                    return Enum.Ulong;
+                case "unchecked":
+                    return Enum.Unchecked;
+                case "undefined":
+                    return Enum.Undefined;
+                case "union":
+                    return Enum.Union;
+                case "unowned":
+                    return Enum.Unowned;
+                case "unsafe":
+                    return Enum.Unsafe;
+                case "unsigned":
+                    return Enum.Unsigned;
+                case "ushort":
+                    return Enum.Ushort;
+                case "using":
+                    return Enum.Using;
+                case "var":
+                    return Enum.Var;
+                case "virtual":
+                    return Enum.Virtual;
+                case "void":
+                    return Enum.Void;
+                case "volatile":
+                    return Enum.Volatile;
+                case "wchar_t":
+                    return Enum.WcharT;
+                case "weak":
+                    return Enum.Weak;
+                case "where":
+                    return Enum.Where;
+                case "while":
+                    return Enum.While;
+                case "willSet":
+                    return Enum.WillSet;
+                case "with":
+                    return Enum.With;
+                case "xor":
+                    return Enum.Xor;
+                case "xor_eq":
+                    return Enum.XorEq;
+                case "YES":
+                    return Enum.Yes;
+                case "yield":
+                    return Enum.Yield;
+                case "dummy":
+                    return Enum.Dummy;
+            }
+            throw new Exception("Cannot unmarshal type Enum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Enum)untypedValue;
+            switch (value)
+            {
+                case Enum.Empty:
+                    serializer.Serialize(writer, "_");
+                    return;
+                case Enum.Bool:
+                    serializer.Serialize(writer, "_Bool");
+                    return;
+                case Enum.Complex:
+                    serializer.Serialize(writer, "_Complex");
+                    return;
+                case Enum.Imaginery:
+                    serializer.Serialize(writer, "_Imaginery");
+                    return;
+                case Enum.Abstract:
+                    serializer.Serialize(writer, "abstract");
+                    return;
+                case Enum.Alignas:
+                    serializer.Serialize(writer, "alignas");
+                    return;
+                case Enum.Alignof:
+                    serializer.Serialize(writer, "alignof");
+                    return;
+                case Enum.And:
+                    serializer.Serialize(writer, "and");
+                    return;
+                case Enum.AndEq:
+                    serializer.Serialize(writer, "and_eq");
+                    return;
+                case Enum.Any:
+                    serializer.Serialize(writer, "any");
+                    return;
+                case Enum.EnumAny:
+                    serializer.Serialize(writer, "Any");
+                    return;
+                case Enum.Array:
+                    serializer.Serialize(writer, "array");
+                    return;
+                case Enum.As:
+                    serializer.Serialize(writer, "as");
+                    return;
+                case Enum.Asm:
+                    serializer.Serialize(writer, "asm");
+                    return;
+                case Enum.Assert:
+                    serializer.Serialize(writer, "assert");
+                    return;
+                case Enum.Associatedtype:
+                    serializer.Serialize(writer, "associatedtype");
+                    return;
+                case Enum.Associativity:
+                    serializer.Serialize(writer, "associativity");
+                    return;
+                case Enum.Async:
+                    serializer.Serialize(writer, "async");
+                    return;
+                case Enum.Atomic:
+                    serializer.Serialize(writer, "atomic");
+                    return;
+                case Enum.AtomicCancel:
+                    serializer.Serialize(writer, "atomic_cancel");
+                    return;
+                case Enum.AtomicCommit:
+                    serializer.Serialize(writer, "atomic_commit");
+                    return;
+                case Enum.AtomicNoexcept:
+                    serializer.Serialize(writer, "atomic_noexcept");
+                    return;
+                case Enum.Auto:
+                    serializer.Serialize(writer, "auto");
+                    return;
+                case Enum.Await:
+                    serializer.Serialize(writer, "await");
+                    return;
+                case Enum.Base:
+                    serializer.Serialize(writer, "base");
+                    return;
+                case Enum.Bitand:
+                    serializer.Serialize(writer, "bitand");
+                    return;
+                case Enum.Bitor:
+                    serializer.Serialize(writer, "bitor");
+                    return;
+                case Enum.EnumBool:
+                    serializer.Serialize(writer, "BOOL");
+                    return;
+                case Enum.PurpleBool:
+                    serializer.Serialize(writer, "bool");
+                    return;
+                case Enum.Boolean:
+                    serializer.Serialize(writer, "boolean");
+                    return;
+                case Enum.Break:
+                    serializer.Serialize(writer, "break");
+                    return;
+                case Enum.Bycopy:
+                    serializer.Serialize(writer, "bycopy");
+                    return;
+                case Enum.Byref:
+                    serializer.Serialize(writer, "byref");
+                    return;
+                case Enum.Byte:
+                    serializer.Serialize(writer, "byte");
+                    return;
+                case Enum.Case:
+                    serializer.Serialize(writer, "case");
+                    return;
+                case Enum.Catch:
+                    serializer.Serialize(writer, "catch");
+                    return;
+                case Enum.Chan:
+                    serializer.Serialize(writer, "chan");
+                    return;
+                case Enum.Char:
+                    serializer.Serialize(writer, "char");
+                    return;
+                case Enum.Char16T:
+                    serializer.Serialize(writer, "char16_t");
+                    return;
+                case Enum.Char32T:
+                    serializer.Serialize(writer, "char32_t");
+                    return;
+                case Enum.Checked:
+                    serializer.Serialize(writer, "checked");
+                    return;
+                case Enum.Class:
+                    serializer.Serialize(writer, "class");
+                    return;
+                case Enum.EnumClass:
+                    serializer.Serialize(writer, "Class");
+                    return;
+                case Enum.CoAwait:
+                    serializer.Serialize(writer, "co_await");
+                    return;
+                case Enum.CoReturn:
+                    serializer.Serialize(writer, "co_return");
+                    return;
+                case Enum.CoYield:
+                    serializer.Serialize(writer, "co_yield");
+                    return;
+                case Enum.Compl:
+                    serializer.Serialize(writer, "compl");
+                    return;
+                case Enum.Concept:
+                    serializer.Serialize(writer, "concept");
+                    return;
+                case Enum.Console:
+                    serializer.Serialize(writer, "console");
+                    return;
+                case Enum.Const:
+                    serializer.Serialize(writer, "const");
+                    return;
+                case Enum.ConstCast:
+                    serializer.Serialize(writer, "const_cast");
+                    return;
+                case Enum.Constexpr:
+                    serializer.Serialize(writer, "constexpr");
+                    return;
+                case Enum.Constructor:
+                    serializer.Serialize(writer, "constructor");
+                    return;
+                case Enum.Continue:
+                    serializer.Serialize(writer, "continue");
+                    return;
+                case Enum.Convenience:
+                    serializer.Serialize(writer, "convenience");
+                    return;
+                case Enum.Convert:
+                    serializer.Serialize(writer, "convert");
+                    return;
+                case Enum.Converter:
+                    serializer.Serialize(writer, "converter");
+                    return;
+                case Enum.Date:
+                    serializer.Serialize(writer, "date");
+                    return;
+                case Enum.DateParseHandling:
+                    serializer.Serialize(writer, "date_parse_handling");
+                    return;
+                case Enum.Debugger:
+                    serializer.Serialize(writer, "debugger");
+                    return;
+                case Enum.Decimal:
+                    serializer.Serialize(writer, "decimal");
+                    return;
+                case Enum.Declare:
+                    serializer.Serialize(writer, "declare");
+                    return;
+                case Enum.Decltype:
+                    serializer.Serialize(writer, "decltype");
+                    return;
+                case Enum.DecodeString:
+                    serializer.Serialize(writer, "decode_string");
+                    return;
+                case Enum.Def:
+                    serializer.Serialize(writer, "def");
+                    return;
+                case Enum.Default:
+                    serializer.Serialize(writer, "default");
+                    return;
+                case Enum.Defer:
+                    serializer.Serialize(writer, "defer");
+                    return;
+                case Enum.Deinit:
+                    serializer.Serialize(writer, "deinit");
+                    return;
+                case Enum.Del:
+                    serializer.Serialize(writer, "del");
+                    return;
+                case Enum.Delegate:
+                    serializer.Serialize(writer, "delegate");
+                    return;
+                case Enum.Delete:
+                    serializer.Serialize(writer, "delete");
+                    return;
+                case Enum.Dict:
+                    serializer.Serialize(writer, "dict");
+                    return;
+                case Enum.Dictionary:
+                    serializer.Serialize(writer, "dictionary");
+                    return;
+                case Enum.DidSet:
+                    serializer.Serialize(writer, "didSet");
+                    return;
+                case Enum.Do:
+                    serializer.Serialize(writer, "do");
+                    return;
+                case Enum.Double:
+                    serializer.Serialize(writer, "double");
+                    return;
+                case Enum.Dynamic:
+                    serializer.Serialize(writer, "dynamic");
+                    return;
+                case Enum.DynamicCast:
+                    serializer.Serialize(writer, "dynamic_cast");
+                    return;
+                case Enum.Elif:
+                    serializer.Serialize(writer, "elif");
+                    return;
+                case Enum.Else:
+                    serializer.Serialize(writer, "else");
+                    return;
+                case Enum.EncodeQuickType:
+                    serializer.Serialize(writer, "encode_quick_type");
+                    return;
+                case Enum.Enum:
+                    serializer.Serialize(writer, "enum");
+                    return;
+                case Enum.Event:
+                    serializer.Serialize(writer, "event");
+                    return;
+                case Enum.Except:
+                    serializer.Serialize(writer, "except");
+                    return;
+                case Enum.Exception:
+                    serializer.Serialize(writer, "exception");
+                    return;
+                case Enum.Explicit:
+                    serializer.Serialize(writer, "explicit");
+                    return;
+                case Enum.Export:
+                    serializer.Serialize(writer, "export");
+                    return;
+                case Enum.Exposing:
+                    serializer.Serialize(writer, "exposing");
+                    return;
+                case Enum.Extends:
+                    serializer.Serialize(writer, "extends");
+                    return;
+                case Enum.Extension:
+                    serializer.Serialize(writer, "extension");
+                    return;
+                case Enum.Extern:
+                    serializer.Serialize(writer, "extern");
+                    return;
+                case Enum.Fallthrough:
+                    serializer.Serialize(writer, "fallthrough");
+                    return;
+                case Enum.False:
+                    serializer.Serialize(writer, "false");
+                    return;
+                case Enum.EnumFalse:
+                    serializer.Serialize(writer, "False");
+                    return;
+                case Enum.Fileprivate:
+                    serializer.Serialize(writer, "fileprivate");
+                    return;
+                case Enum.Final:
+                    serializer.Serialize(writer, "final");
+                    return;
+                case Enum.Finally:
+                    serializer.Serialize(writer, "finally");
+                    return;
+                case Enum.Fixed:
+                    serializer.Serialize(writer, "fixed");
+                    return;
+                case Enum.Float:
+                    serializer.Serialize(writer, "float");
+                    return;
+                case Enum.For:
+                    serializer.Serialize(writer, "for");
+                    return;
+                case Enum.Foreach:
+                    serializer.Serialize(writer, "foreach");
+                    return;
+                case Enum.Friend:
+                    serializer.Serialize(writer, "friend");
+                    return;
+                case Enum.From:
+                    serializer.Serialize(writer, "from");
+                    return;
+                case Enum.FromJson:
+                    serializer.Serialize(writer, "from_json");
+                    return;
+                case Enum.Func:
+                    serializer.Serialize(writer, "func");
+                    return;
+                case Enum.Function:
+                    serializer.Serialize(writer, "function");
+                    return;
+                case Enum.Get:
+                    serializer.Serialize(writer, "get");
+                    return;
+                case Enum.Global:
+                    serializer.Serialize(writer, "global");
+                    return;
+                case Enum.Go:
+                    serializer.Serialize(writer, "go");
+                    return;
+                case Enum.Goto:
+                    serializer.Serialize(writer, "goto");
+                    return;
+                case Enum.Guard:
+                    serializer.Serialize(writer, "guard");
+                    return;
+                case Enum.HasOwnProperty:
+                    serializer.Serialize(writer, "hasOwnProperty");
+                    return;
+                case Enum.Id:
+                    serializer.Serialize(writer, "id");
+                    return;
+                case Enum.If:
+                    serializer.Serialize(writer, "if");
+                    return;
+                case Enum.Imp:
+                    serializer.Serialize(writer, "IMP");
+                    return;
+                case Enum.Implements:
+                    serializer.Serialize(writer, "implements");
+                    return;
+                case Enum.Implicit:
+                    serializer.Serialize(writer, "implicit");
+                    return;
+                case Enum.Import:
+                    serializer.Serialize(writer, "import");
+                    return;
+                case Enum.In:
+                    serializer.Serialize(writer, "in");
+                    return;
+                case Enum.Indirect:
+                    serializer.Serialize(writer, "indirect");
+                    return;
+                case Enum.Infix:
+                    serializer.Serialize(writer, "infix");
+                    return;
+                case Enum.Init:
+                    serializer.Serialize(writer, "init");
+                    return;
+                case Enum.Inline:
+                    serializer.Serialize(writer, "inline");
+                    return;
+                case Enum.Inout:
+                    serializer.Serialize(writer, "inout");
+                    return;
+                case Enum.Instanceof:
+                    serializer.Serialize(writer, "instanceof");
+                    return;
+                case Enum.Int:
+                    serializer.Serialize(writer, "int");
+                    return;
+                case Enum.Interface:
+                    serializer.Serialize(writer, "interface");
+                    return;
+                case Enum.Internal:
+                    serializer.Serialize(writer, "internal");
+                    return;
+                case Enum.Iterable:
+                    serializer.Serialize(writer, "iterable");
+                    return;
+                case Enum.Is:
+                    serializer.Serialize(writer, "is");
+                    return;
+                case Enum.Jdec:
+                    serializer.Serialize(writer, "jdec");
+                    return;
+                case Enum.Jenc:
+                    serializer.Serialize(writer, "jenc");
+                    return;
+                case Enum.Jpipe:
+                    serializer.Serialize(writer, "jpipe");
+                    return;
+                case Enum.Json:
+                    serializer.Serialize(writer, "json");
+                    return;
+                case Enum.JsonConverter:
+                    serializer.Serialize(writer, "json_converter");
+                    return;
+                case Enum.JsonSerializer:
+                    serializer.Serialize(writer, "json_serializer");
+                    return;
+                case Enum.JsonToken:
+                    serializer.Serialize(writer, "json_token");
+                    return;
+                case Enum.JsonWriter:
+                    serializer.Serialize(writer, "json_writer");
+                    return;
+                case Enum.Lambda:
+                    serializer.Serialize(writer, "lambda");
+                    return;
+                case Enum.Lazy:
+                    serializer.Serialize(writer, "lazy");
+                    return;
+                case Enum.Left:
+                    serializer.Serialize(writer, "left");
+                    return;
+                case Enum.Let:
+                    serializer.Serialize(writer, "let");
+                    return;
+                case Enum.List:
+                    serializer.Serialize(writer, "list");
+                    return;
+                case Enum.Lock:
+                    serializer.Serialize(writer, "lock");
+                    return;
+                case Enum.Long:
+                    serializer.Serialize(writer, "long");
+                    return;
+                case Enum.Map:
+                    serializer.Serialize(writer, "map");
+                    return;
+                case Enum.MetadataPropertyHandling:
+                    serializer.Serialize(writer, "metadata_property_handling");
+                    return;
+                case Enum.Module:
+                    serializer.Serialize(writer, "module");
+                    return;
+                case Enum.Mutable:
+                    serializer.Serialize(writer, "mutable");
+                    return;
+                case Enum.Mutating:
+                    serializer.Serialize(writer, "mutating");
+                    return;
+                case Enum.Namespace:
+                    serializer.Serialize(writer, "namespace");
+                    return;
+                case Enum.Native:
+                    serializer.Serialize(writer, "native");
+                    return;
+                case Enum.New:
+                    serializer.Serialize(writer, "new");
+                    return;
+                case Enum.Newtonsoft:
+                    serializer.Serialize(writer, "newtonsoft");
+                    return;
+                case Enum.Nil:
+                    serializer.Serialize(writer, "nil");
+                    return;
+                case Enum.No:
+                    serializer.Serialize(writer, "NO");
+                    return;
+                case Enum.Noexcept:
+                    serializer.Serialize(writer, "noexcept");
+                    return;
+                case Enum.Nonatomic:
+                    serializer.Serialize(writer, "nonatomic");
+                    return;
+                case Enum.None:
+                    serializer.Serialize(writer, "none");
+                    return;
+                case Enum.EnumNone:
+                    serializer.Serialize(writer, "None");
+                    return;
+                case Enum.Nonlocal:
+                    serializer.Serialize(writer, "nonlocal");
+                    return;
+                case Enum.Nonmutating:
+                    serializer.Serialize(writer, "nonmutating");
+                    return;
+                case Enum.Not:
+                    serializer.Serialize(writer, "not");
+                    return;
+                case Enum.NotEq:
+                    serializer.Serialize(writer, "not_eq");
+                    return;
+                case Enum.NsString:
+                    serializer.Serialize(writer, "NSString");
+                    return;
+                case Enum.Null:
+                    serializer.Serialize(writer, "NULL");
+                    return;
+                case Enum.EnumNull:
+                    serializer.Serialize(writer, "null");
+                    return;
+                case Enum.Nullptr:
+                    serializer.Serialize(writer, "nullptr");
+                    return;
+                case Enum.Number:
+                    serializer.Serialize(writer, "number");
+                    return;
+                case Enum.Object:
+                    serializer.Serialize(writer, "object");
+                    return;
+                case Enum.Of:
+                    serializer.Serialize(writer, "of");
+                    return;
+                case Enum.Oneway:
+                    serializer.Serialize(writer, "oneway");
+                    return;
+                case Enum.Open:
+                    serializer.Serialize(writer, "open");
+                    return;
+                case Enum.Operator:
+                    serializer.Serialize(writer, "operator");
+                    return;
+                case Enum.Optional:
+                    serializer.Serialize(writer, "optional");
+                    return;
+                case Enum.Or:
+                    serializer.Serialize(writer, "or");
+                    return;
+                case Enum.OrEq:
+                    serializer.Serialize(writer, "or_eq");
+                    return;
+                case Enum.Out:
+                    serializer.Serialize(writer, "out");
+                    return;
+                case Enum.Override:
+                    serializer.Serialize(writer, "override");
+                    return;
+                case Enum.Package:
+                    serializer.Serialize(writer, "package");
+                    return;
+                case Enum.Params:
+                    serializer.Serialize(writer, "params");
+                    return;
+                case Enum.Pass:
+                    serializer.Serialize(writer, "pass");
+                    return;
+                case Enum.Port:
+                    serializer.Serialize(writer, "port");
+                    return;
+                case Enum.Postfix:
+                    serializer.Serialize(writer, "postfix");
+                    return;
+                case Enum.Precedence:
+                    serializer.Serialize(writer, "precedence");
+                    return;
+                case Enum.Prefix:
+                    serializer.Serialize(writer, "prefix");
+                    return;
+                case Enum.Print:
+                    serializer.Serialize(writer, "print");
+                    return;
+                case Enum.Printf:
+                    serializer.Serialize(writer, "printf");
+                    return;
+                case Enum.Private:
+                    serializer.Serialize(writer, "private");
+                    return;
+                case Enum.Protected:
+                    serializer.Serialize(writer, "protected");
+                    return;
+                case Enum.Protocol:
+                    serializer.Serialize(writer, "Protocol");
+                    return;
+                case Enum.EnumProtocol:
+                    serializer.Serialize(writer, "protocol");
+                    return;
+                case Enum.Public:
+                    serializer.Serialize(writer, "public");
+                    return;
+                case Enum.Quicktype:
+                    serializer.Serialize(writer, "quicktype");
+                    return;
+                case Enum.Raise:
+                    serializer.Serialize(writer, "raise");
+                    return;
+                case Enum.Range:
+                    serializer.Serialize(writer, "range");
+                    return;
+                case Enum.Readonly:
+                    serializer.Serialize(writer, "readonly");
+                    return;
+                case Enum.Ref:
+                    serializer.Serialize(writer, "ref");
+                    return;
+                case Enum.Register:
+                    serializer.Serialize(writer, "register");
+                    return;
+                case Enum.ReinterpretCast:
+                    serializer.Serialize(writer, "reinterpret_cast");
+                    return;
+                case Enum.Repeat:
+                    serializer.Serialize(writer, "repeat");
+                    return;
+                case Enum.Require:
+                    serializer.Serialize(writer, "require");
+                    return;
+                case Enum.Required:
+                    serializer.Serialize(writer, "required");
+                    return;
+                case Enum.Requires:
+                    serializer.Serialize(writer, "requires");
+                    return;
+                case Enum.Restrict:
+                    serializer.Serialize(writer, "restrict");
+                    return;
+                case Enum.Retain:
+                    serializer.Serialize(writer, "retain");
+                    return;
+                case Enum.Rethrows:
+                    serializer.Serialize(writer, "rethrows");
+                    return;
+                case Enum.Return:
+                    serializer.Serialize(writer, "return");
+                    return;
+                case Enum.Right:
+                    serializer.Serialize(writer, "right");
+                    return;
+                case Enum.Sbyte:
+                    serializer.Serialize(writer, "sbyte");
+                    return;
+                case Enum.Sealed:
+                    serializer.Serialize(writer, "sealed");
+                    return;
+                case Enum.Sel:
+                    serializer.Serialize(writer, "SEL");
+                    return;
+                case Enum.Select:
+                    serializer.Serialize(writer, "select");
+                    return;
+                case Enum.Self:
+                    serializer.Serialize(writer, "Self");
+                    return;
+                case Enum.EnumSelf:
+                    serializer.Serialize(writer, "self");
+                    return;
+                case Enum.Serialize:
+                    serializer.Serialize(writer, "serialize");
+                    return;
+                case Enum.Set:
+                    serializer.Serialize(writer, "set");
+                    return;
+                case Enum.Short:
+                    serializer.Serialize(writer, "short");
+                    return;
+                case Enum.Signed:
+                    serializer.Serialize(writer, "signed");
+                    return;
+                case Enum.Sizeof:
+                    serializer.Serialize(writer, "sizeof");
+                    return;
+                case Enum.Stackalloc:
+                    serializer.Serialize(writer, "stackalloc");
+                    return;
+                case Enum.Static:
+                    serializer.Serialize(writer, "static");
+                    return;
+                case Enum.StaticAssert:
+                    serializer.Serialize(writer, "static_assert");
+                    return;
+                case Enum.StaticCast:
+                    serializer.Serialize(writer, "static_cast");
+                    return;
+                case Enum.Strictfp:
+                    serializer.Serialize(writer, "strictfp");
+                    return;
+                case Enum.String:
+                    serializer.Serialize(writer, "string");
+                    return;
+                case Enum.Struct:
+                    serializer.Serialize(writer, "struct");
+                    return;
+                case Enum.Subscript:
+                    serializer.Serialize(writer, "subscript");
+                    return;
+                case Enum.Super:
+                    serializer.Serialize(writer, "super");
+                    return;
+                case Enum.Switch:
+                    serializer.Serialize(writer, "switch");
+                    return;
+                case Enum.Symbol:
+                    serializer.Serialize(writer, "symbol");
+                    return;
+                case Enum.Synchronized:
+                    serializer.Serialize(writer, "synchronized");
+                    return;
+                case Enum.System:
+                    serializer.Serialize(writer, "system");
+                    return;
+                case Enum.Template:
+                    serializer.Serialize(writer, "template");
+                    return;
+                case Enum.Then:
+                    serializer.Serialize(writer, "then");
+                    return;
+                case Enum.This:
+                    serializer.Serialize(writer, "this");
+                    return;
+                case Enum.ThreadLocal:
+                    serializer.Serialize(writer, "thread_local");
+                    return;
+                case Enum.Throw:
+                    serializer.Serialize(writer, "throw");
+                    return;
+                case Enum.Throws:
+                    serializer.Serialize(writer, "throws");
+                    return;
+                case Enum.ToJson:
+                    serializer.Serialize(writer, "to_json");
+                    return;
+                case Enum.TopLevel:
+                    serializer.Serialize(writer, "top_level");
+                    return;
+                case Enum.Transient:
+                    serializer.Serialize(writer, "transient");
+                    return;
+                case Enum.True:
+                    serializer.Serialize(writer, "True");
+                    return;
+                case Enum.EnumTrue:
+                    serializer.Serialize(writer, "true");
+                    return;
+                case Enum.Try:
+                    serializer.Serialize(writer, "try");
+                    return;
+                case Enum.Type:
+                    serializer.Serialize(writer, "Type");
+                    return;
+                case Enum.EnumType:
+                    serializer.Serialize(writer, "type");
+                    return;
+                case Enum.Typealias:
+                    serializer.Serialize(writer, "typealias");
+                    return;
+                case Enum.Typedef:
+                    serializer.Serialize(writer, "typedef");
+                    return;
+                case Enum.Typeid:
+                    serializer.Serialize(writer, "typeid");
+                    return;
+                case Enum.Typename:
+                    serializer.Serialize(writer, "typename");
+                    return;
+                case Enum.Typeof:
+                    serializer.Serialize(writer, "typeof");
+                    return;
+                case Enum.Uint:
+                    serializer.Serialize(writer, "uint");
+                    return;
+                case Enum.Ulong:
+                    serializer.Serialize(writer, "ulong");
+                    return;
+                case Enum.Unchecked:
+                    serializer.Serialize(writer, "unchecked");
+                    return;
+                case Enum.Undefined:
+                    serializer.Serialize(writer, "undefined");
+                    return;
+                case Enum.Union:
+                    serializer.Serialize(writer, "union");
+                    return;
+                case Enum.Unowned:
+                    serializer.Serialize(writer, "unowned");
+                    return;
+                case Enum.Unsafe:
+                    serializer.Serialize(writer, "unsafe");
+                    return;
+                case Enum.Unsigned:
+                    serializer.Serialize(writer, "unsigned");
+                    return;
+                case Enum.Ushort:
+                    serializer.Serialize(writer, "ushort");
+                    return;
+                case Enum.Using:
+                    serializer.Serialize(writer, "using");
+                    return;
+                case Enum.Var:
+                    serializer.Serialize(writer, "var");
+                    return;
+                case Enum.Virtual:
+                    serializer.Serialize(writer, "virtual");
+                    return;
+                case Enum.Void:
+                    serializer.Serialize(writer, "void");
+                    return;
+                case Enum.Volatile:
+                    serializer.Serialize(writer, "volatile");
+                    return;
+                case Enum.WcharT:
+                    serializer.Serialize(writer, "wchar_t");
+                    return;
+                case Enum.Weak:
+                    serializer.Serialize(writer, "weak");
+                    return;
+                case Enum.Where:
+                    serializer.Serialize(writer, "where");
+                    return;
+                case Enum.While:
+                    serializer.Serialize(writer, "while");
+                    return;
+                case Enum.WillSet:
+                    serializer.Serialize(writer, "willSet");
+                    return;
+                case Enum.With:
+                    serializer.Serialize(writer, "with");
+                    return;
+                case Enum.Xor:
+                    serializer.Serialize(writer, "xor");
+                    return;
+                case Enum.XorEq:
+                    serializer.Serialize(writer, "xor_eq");
+                    return;
+                case Enum.Yes:
+                    serializer.Serialize(writer, "YES");
+                    return;
+                case Enum.Yield:
+                    serializer.Serialize(writer, "yield");
+                    return;
+                case Enum.Dummy:
+                    serializer.Serialize(writer, "dummy");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Enum");
+        }
+
+        public static readonly EnumConverter Singleton = new EnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/keyword-unions.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
new file mode 100644
index 0000000..89dd014
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
@@ -0,0 +1,15241 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("_", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUnion? Empty { get; set; }
+
+        [JsonProperty("_Bool", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionBoolUnion? TopLevelBool { get; set; }
+
+        [JsonProperty("_Complex", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionComplex? Complex { get; set; }
+
+        [JsonProperty("_Imaginery", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionImaginery? Imaginery { get; set; }
+
+        [JsonProperty("abstract", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAbstract? Abstract { get; set; }
+
+        [JsonProperty("alignas", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAlignas? Alignas { get; set; }
+
+        [JsonProperty("alignof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAlignof? Alignof { get; set; }
+
+        [JsonProperty("and", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAnd? And { get; set; }
+
+        [JsonProperty("and_eq", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAndEq? AndEq { get; set; }
+
+        [JsonProperty("any", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAnyUnion? TopLevelAny { get; set; }
+
+        [JsonProperty("Any", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAny? Any { get; set; }
+
+        [JsonProperty("array", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionArray? Array { get; set; }
+
+        [JsonProperty("as", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAs? As { get; set; }
+
+        [JsonProperty("asm", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAsm? Asm { get; set; }
+
+        [JsonProperty("assert", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAssert? Assert { get; set; }
+
+        [JsonProperty("associatedtype", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAssociatedtype? Associatedtype { get; set; }
+
+        [JsonProperty("associativity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAssociativity? Associativity { get; set; }
+
+        [JsonProperty("async", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAsync? Async { get; set; }
+
+        [JsonProperty("atomic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAtomic? Atomic { get; set; }
+
+        [JsonProperty("atomic_cancel", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAtomicCancel? AtomicCancel { get; set; }
+
+        [JsonProperty("atomic_commit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAtomicCommit? AtomicCommit { get; set; }
+
+        [JsonProperty("atomic_noexcept", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAtomicNoexcept? AtomicNoexcept { get; set; }
+
+        [JsonProperty("auto", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAuto? Auto { get; set; }
+
+        [JsonProperty("await", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionAwait? Await { get; set; }
+
+        [JsonProperty("base", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionBase? Base { get; set; }
+
+        [JsonProperty("bitand", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionBitand? Bitand { get; set; }
+
+        [JsonProperty("bitor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionBitor? Bitor { get; set; }
+
+        [JsonProperty("BOOL", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionBool? Bool { get; set; }
+
+        [JsonProperty("bool", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TopLevelUnionBool? PurpleBool { get; set; }
+
+        [JsonProperty("boolean", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionBoolean? Boolean { get; set; }
+
+        [JsonProperty("break", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionBreak? Break { get; set; }
+
+        [JsonProperty("bycopy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionBycopy? Bycopy { get; set; }
+
+        [JsonProperty("byref", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionByref? Byref { get; set; }
+
+        [JsonProperty("byte", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionByte? Byte { get; set; }
+
+        [JsonProperty("case", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionCase? Case { get; set; }
+
+        [JsonProperty("catch", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionCatch? Catch { get; set; }
+
+        [JsonProperty("chan", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionChan? Chan { get; set; }
+
+        [JsonProperty("char", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionChar? Char { get; set; }
+
+        [JsonProperty("char16_t", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionChar16T? Char16T { get; set; }
+
+        [JsonProperty("char32_t", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionChar32T? Char32T { get; set; }
+
+        [JsonProperty("checked", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionChecked? Checked { get; set; }
+
+        [JsonProperty("class", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionClassUnion? TopLevelClass { get; set; }
+
+        [JsonProperty("Class", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionClass? Class { get; set; }
+
+        [JsonProperty("co_await", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionCoAwait? CoAwait { get; set; }
+
+        [JsonProperty("co_return", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionCoReturn? CoReturn { get; set; }
+
+        [JsonProperty("co_yield", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionCoYield? CoYield { get; set; }
+
+        [JsonProperty("compl", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionCompl? Compl { get; set; }
+
+        [JsonProperty("concept", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionConcept? Concept { get; set; }
+
+        [JsonProperty("console", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionConsole? Console { get; set; }
+
+        [JsonProperty("const", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionConst? Const { get; set; }
+
+        [JsonProperty("const_cast", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionConstCast? ConstCast { get; set; }
+
+        [JsonProperty("constexpr", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionConstexpr? Constexpr { get; set; }
+
+        [JsonProperty("constructor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionConstructor? Constructor { get; set; }
+
+        [JsonProperty("continue", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionContinue? Continue { get; set; }
+
+        [JsonProperty("convenience", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionConvenience? Convenience { get; set; }
+
+        [JsonProperty("convert", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionConvert? Convert { get; set; }
+
+        [JsonProperty("converter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionConverter? Converter { get; set; }
+
+        [JsonProperty("date", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDate? Date { get; set; }
+
+        [JsonProperty("date_parse_handling", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDateParseHandling? DateParseHandling { get; set; }
+
+        [JsonProperty("debugger", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDebugger? Debugger { get; set; }
+
+        [JsonProperty("decimal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDecimal? Decimal { get; set; }
+
+        [JsonProperty("declare", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDeclare? Declare { get; set; }
+
+        [JsonProperty("decltype", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDecltype? Decltype { get; set; }
+
+        [JsonProperty("decode_string", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDecodeString? DecodeString { get; set; }
+
+        [JsonProperty("def", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDef? Def { get; set; }
+
+        [JsonProperty("default", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDefault? Default { get; set; }
+
+        [JsonProperty("defer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDefer? Defer { get; set; }
+
+        [JsonProperty("deinit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDeinit? Deinit { get; set; }
+
+        [JsonProperty("del", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDel? Del { get; set; }
+
+        [JsonProperty("delegate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDelegate? Delegate { get; set; }
+
+        [JsonProperty("delete", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDelete? Delete { get; set; }
+
+        [JsonProperty("dict", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDict? Dict { get; set; }
+
+        [JsonProperty("dictionary", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDictionary? Dictionary { get; set; }
+
+        [JsonProperty("didSet", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDidSet? DidSet { get; set; }
+
+        [JsonProperty("do", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDo? Do { get; set; }
+
+        [JsonProperty("double", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDouble? Double { get; set; }
+
+        [JsonProperty("dummy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dummy { get; set; }
+
+        [JsonProperty("dynamic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDynamic? Dynamic { get; set; }
+
+        [JsonProperty("dynamic_cast", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionDynamicCast? DynamicCast { get; set; }
+
+        [JsonProperty("elif", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionElif? Elif { get; set; }
+
+        [JsonProperty("else", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionElse? Else { get; set; }
+
+        [JsonProperty("encode_quick_type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionEncodeQuickType? EncodeQuickType { get; set; }
+
+        [JsonProperty("enum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionEnum? Enum { get; set; }
+
+        [JsonProperty("event", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionEvent? Event { get; set; }
+
+        [JsonProperty("except", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionExcept? Except { get; set; }
+
+        [JsonProperty("exception", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionException? Exception { get; set; }
+
+        [JsonProperty("explicit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionExplicit? Explicit { get; set; }
+
+        [JsonProperty("export", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionExport? Export { get; set; }
+
+        [JsonProperty("exposing", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionExposing? Exposing { get; set; }
+
+        [JsonProperty("extends", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionExtends? Extends { get; set; }
+
+        [JsonProperty("extension", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionExtension? Extension { get; set; }
+
+        [JsonProperty("extern", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionExtern? Extern { get; set; }
+
+        [JsonProperty("fallthrough", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFallthrough? Fallthrough { get; set; }
+
+        [JsonProperty("false", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFalseUnion? TopLevelFalse { get; set; }
+
+        [JsonProperty("False", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFalse? False { get; set; }
+
+        [JsonProperty("fileprivate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFileprivate? Fileprivate { get; set; }
+
+        [JsonProperty("final", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFinal? Final { get; set; }
+
+        [JsonProperty("finally", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFinally? Finally { get; set; }
+
+        [JsonProperty("fixed", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFixed? Fixed { get; set; }
+
+        [JsonProperty("float", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFloat? Float { get; set; }
+
+        [JsonProperty("for", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFor? For { get; set; }
+
+        [JsonProperty("foreach", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionForeach? Foreach { get; set; }
+
+        [JsonProperty("friend", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFriend? Friend { get; set; }
+
+        [JsonProperty("from", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFrom? From { get; set; }
+
+        [JsonProperty("from_json", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFromJson? TopLevelFromJson { get; set; }
+
+        [JsonProperty("func", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFunc? Func { get; set; }
+
+        [JsonProperty("function", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFunction? Function { get; set; }
+
+        [JsonProperty("get", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionGet? Get { get; set; }
+
+        [JsonProperty("global", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionGlobal? Global { get; set; }
+
+        [JsonProperty("go", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionGo? Go { get; set; }
+
+        [JsonProperty("goto", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionGoto? Goto { get; set; }
+
+        [JsonProperty("guard", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionGuard? Guard { get; set; }
+
+        [JsonProperty("hasOwnProperty", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionHasOwnProperty? HasOwnProperty { get; set; }
+
+        [JsonProperty("id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionId? Id { get; set; }
+
+        [JsonProperty("if", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionIf? If { get; set; }
+
+        [JsonProperty("IMP", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionImp? Imp { get; set; }
+
+        [JsonProperty("implements", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionImplements? Implements { get; set; }
+
+        [JsonProperty("implicit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionImplicit? Implicit { get; set; }
+
+        [JsonProperty("import", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionImport? Import { get; set; }
+
+        [JsonProperty("in", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionIn? In { get; set; }
+
+        [JsonProperty("indirect", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionIndirect? Indirect { get; set; }
+
+        [JsonProperty("infix", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionInfix? Infix { get; set; }
+
+        [JsonProperty("init", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionInit? Init { get; set; }
+
+        [JsonProperty("inline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionInline? Inline { get; set; }
+
+        [JsonProperty("inout", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionInout? Inout { get; set; }
+
+        [JsonProperty("instanceof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionInstanceof? Instanceof { get; set; }
+
+        [JsonProperty("int", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionInt? Int { get; set; }
+
+        [JsonProperty("interface", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionInterface? Interface { get; set; }
+
+        [JsonProperty("internal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionInternal? Internal { get; set; }
+
+        [JsonProperty("is", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionIs? Is { get; set; }
+
+        [JsonProperty("iterable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionIterable? Iterable { get; set; }
+
+        [JsonProperty("jdec", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionJdec? Jdec { get; set; }
+
+        [JsonProperty("jenc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionJenc? Jenc { get; set; }
+
+        [JsonProperty("jpipe", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionJpipe? Jpipe { get; set; }
+
+        [JsonProperty("json", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionJson? Json { get; set; }
+
+        [JsonProperty("json_converter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionJsonConverter? JsonConverter { get; set; }
+
+        [JsonProperty("json_serializer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionJsonSerializer? JsonSerializer { get; set; }
+
+        [JsonProperty("json_token", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionJsonToken? JsonToken { get; set; }
+
+        [JsonProperty("json_writer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionJsonWriter? JsonWriter { get; set; }
+
+        [JsonProperty("lambda", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionLambda? Lambda { get; set; }
+
+        [JsonProperty("lazy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionLazy? Lazy { get; set; }
+
+        [JsonProperty("left", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionLeft? Left { get; set; }
+
+        [JsonProperty("let", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionLet? Let { get; set; }
+
+        [JsonProperty("list", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionList? List { get; set; }
+
+        [JsonProperty("lock", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionLock? Lock { get; set; }
+
+        [JsonProperty("long", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionLong? Long { get; set; }
+
+        [JsonProperty("map", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionMap? Map { get; set; }
+
+        [JsonProperty("metadata_property_handling", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionMetadataPropertyHandling? MetadataPropertyHandling { get; set; }
+
+        [JsonProperty("module", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionModule? Module { get; set; }
+
+        [JsonProperty("mutable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionMutable? Mutable { get; set; }
+
+        [JsonProperty("mutating", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionMutating? Mutating { get; set; }
+
+        [JsonProperty("namespace", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNamespace? Namespace { get; set; }
+
+        [JsonProperty("native", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNative? Native { get; set; }
+
+        [JsonProperty("new", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNew? New { get; set; }
+
+        [JsonProperty("newtonsoft", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNewtonsoft? Newtonsoft { get; set; }
+
+        [JsonProperty("nil", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNil? Nil { get; set; }
+
+        [JsonProperty("NO", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNo? No { get; set; }
+
+        [JsonProperty("noexcept", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNoexcept? Noexcept { get; set; }
+
+        [JsonProperty("nonatomic", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNonatomic? Nonatomic { get; set; }
+
+        [JsonProperty("none", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNoneUnion? TopLevelNone { get; set; }
+
+        [JsonProperty("None", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNone? None { get; set; }
+
+        [JsonProperty("nonlocal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNonlocal? Nonlocal { get; set; }
+
+        [JsonProperty("nonmutating", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNonmutating? Nonmutating { get; set; }
+
+        [JsonProperty("not", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNot? Not { get; set; }
+
+        [JsonProperty("not_eq", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNotEq? NotEq { get; set; }
+
+        [JsonProperty("NSString", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNsString? NsString { get; set; }
+
+        [JsonProperty("NULL", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNull? Null { get; set; }
+
+        [JsonProperty("null", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNullUnion? TopLevelNull { get; set; }
+
+        [JsonProperty("nullptr", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNullptr? Nullptr { get; set; }
+
+        [JsonProperty("number", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionNumber? Number { get; set; }
+
+        [JsonProperty("object", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionObject? Object { get; set; }
+
+        [JsonProperty("of", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOf? Of { get; set; }
+
+        [JsonProperty("oneway", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOneway? Oneway { get; set; }
+
+        [JsonProperty("open", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOpen? Open { get; set; }
+
+        [JsonProperty("operator", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOperator? Operator { get; set; }
+
+        [JsonProperty("optional", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOptional? Optional { get; set; }
+
+        [JsonProperty("or", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOr? Or { get; set; }
+
+        [JsonProperty("or_eq", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOrEq? OrEq { get; set; }
+
+        [JsonProperty("out", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOut? Out { get; set; }
+
+        [JsonProperty("override", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOverride? Override { get; set; }
+
+        [JsonProperty("package", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionPackage? Package { get; set; }
+
+        [JsonProperty("params", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionParams? Params { get; set; }
+
+        [JsonProperty("pass", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionPass? Pass { get; set; }
+
+        [JsonProperty("port", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionPort? Port { get; set; }
+
+        [JsonProperty("postfix", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionPostfix? Postfix { get; set; }
+
+        [JsonProperty("precedence", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionPrecedence? Precedence { get; set; }
+
+        [JsonProperty("prefix", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionPrefix? Prefix { get; set; }
+
+        [JsonProperty("print", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionPrint? Print { get; set; }
+
+        [JsonProperty("printf", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionPrintf? Printf { get; set; }
+
+        [JsonProperty("private", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionPrivate? Private { get; set; }
+
+        [JsonProperty("protected", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionProtected? Protected { get; set; }
+
+        [JsonProperty("Protocol", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionProtocol? Protocol { get; set; }
+
+        [JsonProperty("protocol", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionProtocolUnion? TopLevelProtocol { get; set; }
+
+        [JsonProperty("public", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionPublic? Public { get; set; }
+
+        [JsonProperty("quicktype", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionQuicktype? Quicktype { get; set; }
+
+        [JsonProperty("raise", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRaise? Raise { get; set; }
+
+        [JsonProperty("range", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRange? Range { get; set; }
+
+        [JsonProperty("readonly", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionReadonly? Readonly { get; set; }
+
+        [JsonProperty("ref", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRef? Ref { get; set; }
+
+        [JsonProperty("register", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRegister? Register { get; set; }
+
+        [JsonProperty("reinterpret_cast", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionReinterpretCast? ReinterpretCast { get; set; }
+
+        [JsonProperty("repeat", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRepeat? Repeat { get; set; }
+
+        [JsonProperty("require", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRequire? Require { get; set; }
+
+        [JsonProperty("required", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRequired? TopLevelRequired { get; set; }
+
+        [JsonProperty("requires", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRequires? Requires { get; set; }
+
+        [JsonProperty("restrict", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRestrict? Restrict { get; set; }
+
+        [JsonProperty("retain", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRetain? Retain { get; set; }
+
+        [JsonProperty("rethrows", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRethrows? Rethrows { get; set; }
+
+        [JsonProperty("return", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionReturn? Return { get; set; }
+
+        [JsonProperty("right", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionRight? Right { get; set; }
+
+        [JsonProperty("sbyte", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSbyte? Sbyte { get; set; }
+
+        [JsonProperty("sealed", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSealed? Sealed { get; set; }
+
+        [JsonProperty("SEL", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSel? Sel { get; set; }
+
+        [JsonProperty("select", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSelect? Select { get; set; }
+
+        [JsonProperty("Self", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSelf? Self { get; set; }
+
+        [JsonProperty("self", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSelfUnion? TopLevelSelf { get; set; }
+
+        [JsonProperty("serialize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSerialize? Serialize { get; set; }
+
+        [JsonProperty("set", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSet? Set { get; set; }
+
+        [JsonProperty("short", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionShort? Short { get; set; }
+
+        [JsonProperty("signed", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSigned? Signed { get; set; }
+
+        [JsonProperty("sizeof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSizeof? Sizeof { get; set; }
+
+        [JsonProperty("stackalloc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionStackalloc? Stackalloc { get; set; }
+
+        [JsonProperty("static", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionStatic? Static { get; set; }
+
+        [JsonProperty("static_assert", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionStaticAssert? StaticAssert { get; set; }
+
+        [JsonProperty("static_cast", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionStaticCast? StaticCast { get; set; }
+
+        [JsonProperty("strictfp", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionStrictfp? Strictfp { get; set; }
+
+        [JsonProperty("string", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionString? String { get; set; }
+
+        [JsonProperty("struct", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionStruct? Struct { get; set; }
+
+        [JsonProperty("subscript", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSubscript? Subscript { get; set; }
+
+        [JsonProperty("super", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSuper? Super { get; set; }
+
+        [JsonProperty("switch", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSwitch? Switch { get; set; }
+
+        [JsonProperty("symbol", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSymbol? Symbol { get; set; }
+
+        [JsonProperty("synchronized", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSynchronized? Synchronized { get; set; }
+
+        [JsonProperty("system", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionSystem? System { get; set; }
+
+        [JsonProperty("template", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTemplate? Template { get; set; }
+
+        [JsonProperty("then", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionThen? Then { get; set; }
+
+        [JsonProperty("this", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionThis? This { get; set; }
+
+        [JsonProperty("thread_local", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionThreadLocal? ThreadLocal { get; set; }
+
+        [JsonProperty("throw", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionThrow? Throw { get; set; }
+
+        [JsonProperty("throws", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionThrows? Throws { get; set; }
+
+        [JsonProperty("to_json", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionToJson? TopLevelToJson { get; set; }
+
+        [JsonProperty("top_level", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTopLevel? TopLevelTopLevel { get; set; }
+
+        [JsonProperty("transient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTransient? Transient { get; set; }
+
+        [JsonProperty("True", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTrue? True { get; set; }
+
+        [JsonProperty("true", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTrueUnion? TopLevelTrue { get; set; }
+
+        [JsonProperty("try", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTry? Try { get; set; }
+
+        [JsonProperty("Type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionType? Type { get; set; }
+
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTypeUnion? TopLevelType { get; set; }
+
+        [JsonProperty("typealias", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTypealias? Typealias { get; set; }
+
+        [JsonProperty("typedef", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTypedef? Typedef { get; set; }
+
+        [JsonProperty("typeid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTypeid? Typeid { get; set; }
+
+        [JsonProperty("typename", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTypename? Typename { get; set; }
+
+        [JsonProperty("typeof", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionTypeof? Typeof { get; set; }
+
+        [JsonProperty("uint", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUint? Uint { get; set; }
+
+        [JsonProperty("ulong", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUlong? Ulong { get; set; }
+
+        [JsonProperty("unchecked", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUnchecked? Unchecked { get; set; }
+
+        [JsonProperty("undefined", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUndefined? Undefined { get; set; }
+
+        [JsonProperty("union", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUnionUnion? Union { get; set; }
+
+        [JsonProperty("unowned", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUnowned? Unowned { get; set; }
+
+        [JsonProperty("unsafe", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUnsafe? Unsafe { get; set; }
+
+        [JsonProperty("unsigned", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUnsigned? Unsigned { get; set; }
+
+        [JsonProperty("ushort", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUshort? Ushort { get; set; }
+
+        [JsonProperty("using", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUsing? Using { get; set; }
+
+        [JsonProperty("var", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionVar? Var { get; set; }
+
+        [JsonProperty("virtual", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionVirtual? Virtual { get; set; }
+
+        [JsonProperty("void", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionVoid? Void { get; set; }
+
+        [JsonProperty("volatile", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionVolatile? Volatile { get; set; }
+
+        [JsonProperty("wchar_t", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionWcharT? WcharT { get; set; }
+
+        [JsonProperty("weak", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionWeak? Weak { get; set; }
+
+        [JsonProperty("where", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionWhere? Where { get; set; }
+
+        [JsonProperty("while", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionWhile? While { get; set; }
+
+        [JsonProperty("willSet", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionWillSet? WillSet { get; set; }
+
+        [JsonProperty("with", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionWith? With { get; set; }
+
+        [JsonProperty("xor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionXor? Xor { get; set; }
+
+        [JsonProperty("xor_eq", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionXorEq? XorEq { get; set; }
+
+        [JsonProperty("YES", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionYes? Yes { get; set; }
+
+        [JsonProperty("yield", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionYield? Yield { get; set; }
+    }
+
+    public partial record Abstract
+    {
+    }
+
+    public partial record Alignas
+    {
+    }
+
+    public partial record Alignof
+    {
+    }
+
+    public partial record And
+    {
+    }
+
+    public partial record AndEq
+    {
+    }
+
+    public partial record Any
+    {
+    }
+
+    public partial record Array
+    {
+    }
+
+    public partial record As
+    {
+    }
+
+    public partial record Asm
+    {
+    }
+
+    public partial record Assert
+    {
+    }
+
+    public partial record Associatedtype
+    {
+    }
+
+    public partial record Associativity
+    {
+    }
+
+    public partial record Async
+    {
+    }
+
+    public partial record Atomic
+    {
+    }
+
+    public partial record AtomicCancel
+    {
+    }
+
+    public partial record AtomicCommit
+    {
+    }
+
+    public partial record AtomicNoexcept
+    {
+    }
+
+    public partial record Auto
+    {
+    }
+
+    public partial record Await
+    {
+    }
+
+    public partial record Base
+    {
+    }
+
+    public partial record Bitand
+    {
+    }
+
+    public partial record Bitor
+    {
+    }
+
+    public partial record Bool
+    {
+    }
+
+    public partial record Boolean
+    {
+    }
+
+    public partial record Break
+    {
+    }
+
+    public partial record Bycopy
+    {
+    }
+
+    public partial record Byref
+    {
+    }
+
+    public partial record Byte
+    {
+    }
+
+    public partial record Case
+    {
+    }
+
+    public partial record Catch
+    {
+    }
+
+    public partial record Chan
+    {
+    }
+
+    public partial record Char
+    {
+    }
+
+    public partial record Char16T
+    {
+    }
+
+    public partial record Char32T
+    {
+    }
+
+    public partial record Checked
+    {
+    }
+
+    public partial record Class
+    {
+    }
+
+    public partial record CoAwait
+    {
+    }
+
+    public partial record CoReturn
+    {
+    }
+
+    public partial record CoYield
+    {
+    }
+
+    public partial record Compl
+    {
+    }
+
+    public partial record Complex
+    {
+    }
+
+    public partial record Concept
+    {
+    }
+
+    public partial record ConsoleClass
+    {
+    }
+
+    public partial record Const
+    {
+    }
+
+    public partial record ConstCast
+    {
+    }
+
+    public partial record Constexpr
+    {
+    }
+
+    public partial record Constructor
+    {
+    }
+
+    public partial record Continue
+    {
+    }
+
+    public partial record Convenience
+    {
+    }
+
+    public partial record Convert
+    {
+    }
+
+    public partial record ConverterClass
+    {
+    }
+
+    public partial record Date
+    {
+    }
+
+    public partial record DateParseHandlingClass
+    {
+    }
+
+    public partial record Debugger
+    {
+    }
+
+    public partial record Decimal
+    {
+    }
+
+    public partial record Declare
+    {
+    }
+
+    public partial record Decltype
+    {
+    }
+
+    public partial record DecodeString
+    {
+    }
+
+    public partial record Def
+    {
+    }
+
+    public partial record Default
+    {
+    }
+
+    public partial record Defer
+    {
+    }
+
+    public partial record Deinit
+    {
+    }
+
+    public partial record Del
+    {
+    }
+
+    public partial record Delegate
+    {
+    }
+
+    public partial record Delete
+    {
+    }
+
+    public partial record Dict
+    {
+    }
+
+    public partial record Dictionary
+    {
+    }
+
+    public partial record DidSet
+    {
+    }
+
+    public partial record Do
+    {
+    }
+
+    public partial record Double
+    {
+    }
+
+    public partial record Dynamic
+    {
+    }
+
+    public partial record DynamicCast
+    {
+    }
+
+    public partial record Elif
+    {
+    }
+
+    public partial record Else
+    {
+    }
+
+    public partial record Empty
+    {
+    }
+
+    public partial record EncodeQuickType
+    {
+    }
+
+    public partial record Enum
+    {
+    }
+
+    public partial record Event
+    {
+    }
+
+    public partial record Except
+    {
+    }
+
+    public partial record ExceptionClass
+    {
+    }
+
+    public partial record Explicit
+    {
+    }
+
+    public partial record Export
+    {
+    }
+
+    public partial record Exposing
+    {
+    }
+
+    public partial record Extends
+    {
+    }
+
+    public partial record Extension
+    {
+    }
+
+    public partial record Extern
+    {
+    }
+
+    public partial record Fallthrough
+    {
+    }
+
+    public partial record False
+    {
+    }
+
+    public partial record Fileprivate
+    {
+    }
+
+    public partial record Final
+    {
+    }
+
+    public partial record Finally
+    {
+    }
+
+    public partial record Fixed
+    {
+    }
+
+    public partial record Float
+    {
+    }
+
+    public partial record For
+    {
+    }
+
+    public partial record Foreach
+    {
+    }
+
+    public partial record Friend
+    {
+    }
+
+    public partial record From
+    {
+    }
+
+    public partial record Func
+    {
+    }
+
+    public partial record Function
+    {
+    }
+
+    public partial record Get
+    {
+    }
+
+    public partial record Global
+    {
+    }
+
+    public partial record Go
+    {
+    }
+
+    public partial record Goto
+    {
+    }
+
+    public partial record Guard
+    {
+    }
+
+    public partial record HasOwnProperty
+    {
+    }
+
+    public partial record Id
+    {
+    }
+
+    public partial record If
+    {
+    }
+
+    public partial record Imaginery
+    {
+    }
+
+    public partial record Imp
+    {
+    }
+
+    public partial record Implements
+    {
+    }
+
+    public partial record Implicit
+    {
+    }
+
+    public partial record Import
+    {
+    }
+
+    public partial record In
+    {
+    }
+
+    public partial record Indirect
+    {
+    }
+
+    public partial record Infix
+    {
+    }
+
+    public partial record Init
+    {
+    }
+
+    public partial record Inline
+    {
+    }
+
+    public partial record Inout
+    {
+    }
+
+    public partial record Instanceof
+    {
+    }
+
+    public partial record Int
+    {
+    }
+
+    public partial record Interface
+    {
+    }
+
+    public partial record Internal
+    {
+    }
+
+    public partial record Is
+    {
+    }
+
+    public partial record Iterable
+    {
+    }
+
+    public partial record Jdec
+    {
+    }
+
+    public partial record Jenc
+    {
+    }
+
+    public partial record Jpipe
+    {
+    }
+
+    public partial record Json
+    {
+    }
+
+    public partial record JsonConverterClass
+    {
+    }
+
+    public partial record JsonSerializerClass
+    {
+    }
+
+    public partial record JsonTokenClass
+    {
+    }
+
+    public partial record JsonWriterClass
+    {
+    }
+
+    public partial record Lambda
+    {
+    }
+
+    public partial record Lazy
+    {
+    }
+
+    public partial record Left
+    {
+    }
+
+    public partial record Let
+    {
+    }
+
+    public partial record List
+    {
+    }
+
+    public partial record Lock
+    {
+    }
+
+    public partial record Long
+    {
+    }
+
+    public partial record Map
+    {
+    }
+
+    public partial record MetadataPropertyHandlingClass
+    {
+    }
+
+    public partial record Module
+    {
+    }
+
+    public partial record Mutable
+    {
+    }
+
+    public partial record Mutating
+    {
+    }
+
+    public partial record Namespace
+    {
+    }
+
+    public partial record Native
+    {
+    }
+
+    public partial record New
+    {
+    }
+
+    public partial record NewtonsoftClass
+    {
+    }
+
+    public partial record Nil
+    {
+    }
+
+    public partial record No
+    {
+    }
+
+    public partial record Noexcept
+    {
+    }
+
+    public partial record Nonatomic
+    {
+    }
+
+    public partial record None
+    {
+    }
+
+    public partial record Nonlocal
+    {
+    }
+
+    public partial record Nonmutating
+    {
+    }
+
+    public partial record Not
+    {
+    }
+
+    public partial record NotEq
+    {
+    }
+
+    public partial record NsString
+    {
+    }
+
+    public partial record Null
+    {
+    }
+
+    public partial record Nullptr
+    {
+    }
+
+    public partial record Number
+    {
+    }
+
+    public partial record Object
+    {
+    }
+
+    public partial record Of
+    {
+    }
+
+    public partial record Oneway
+    {
+    }
+
+    public partial record Open
+    {
+    }
+
+    public partial record Operator
+    {
+    }
+
+    public partial record Optional
+    {
+    }
+
+    public partial record Or
+    {
+    }
+
+    public partial record OrEq
+    {
+    }
+
+    public partial record Out
+    {
+    }
+
+    public partial record Override
+    {
+    }
+
+    public partial record Package
+    {
+    }
+
+    public partial record Params
+    {
+    }
+
+    public partial record Pass
+    {
+    }
+
+    public partial record Port
+    {
+    }
+
+    public partial record Postfix
+    {
+    }
+
+    public partial record Precedence
+    {
+    }
+
+    public partial record Prefix
+    {
+    }
+
+    public partial record Print
+    {
+    }
+
+    public partial record Printf
+    {
+    }
+
+    public partial record Private
+    {
+    }
+
+    public partial record Protected
+    {
+    }
+
+    public partial record Protocol
+    {
+    }
+
+    public partial record Public
+    {
+    }
+
+    public partial record UnionBoolBool
+    {
+    }
+
+    public partial record Quicktype
+    {
+    }
+
+    public partial record Raise
+    {
+    }
+
+    public partial record Range
+    {
+    }
+
+    public partial record Readonly
+    {
+    }
+
+    public partial record Ref
+    {
+    }
+
+    public partial record Register
+    {
+    }
+
+    public partial record ReinterpretCast
+    {
+    }
+
+    public partial record Repeat
+    {
+    }
+
+    public partial record Require
+    {
+    }
+
+    public partial record Requires
+    {
+    }
+
+    public partial record Restrict
+    {
+    }
+
+    public partial record Retain
+    {
+    }
+
+    public partial record Rethrows
+    {
+    }
+
+    public partial record Return
+    {
+    }
+
+    public partial record Right
+    {
+    }
+
+    public partial record Sbyte
+    {
+    }
+
+    public partial record Sealed
+    {
+    }
+
+    public partial record Sel
+    {
+    }
+
+    public partial record Select
+    {
+    }
+
+    public partial record Self
+    {
+    }
+
+    public partial record SerializeClass
+    {
+    }
+
+    public partial record Set
+    {
+    }
+
+    public partial record Short
+    {
+    }
+
+    public partial record Signed
+    {
+    }
+
+    public partial record Sizeof
+    {
+    }
+
+    public partial record Stackalloc
+    {
+    }
+
+    public partial record Static
+    {
+    }
+
+    public partial record StaticAssert
+    {
+    }
+
+    public partial record StaticCast
+    {
+    }
+
+    public partial record Strictfp
+    {
+    }
+
+    public partial record String
+    {
+    }
+
+    public partial record Struct
+    {
+    }
+
+    public partial record Subscript
+    {
+    }
+
+    public partial record Super
+    {
+    }
+
+    public partial record Switch
+    {
+    }
+
+    public partial record Symbol
+    {
+    }
+
+    public partial record Synchronized
+    {
+    }
+
+    public partial record SystemClass
+    {
+    }
+
+    public partial record Template
+    {
+    }
+
+    public partial record Then
+    {
+    }
+
+    public partial record This
+    {
+    }
+
+    public partial record ThreadLocal
+    {
+    }
+
+    public partial record Throw
+    {
+    }
+
+    public partial record Throws
+    {
+    }
+
+    public partial record AnyClass
+    {
+    }
+
+    public partial record BoolClass
+    {
+    }
+
+    public partial record ClassClass
+    {
+    }
+
+    public partial record FalseClass
+    {
+    }
+
+    public partial record FromJsonClass
+    {
+    }
+
+    public partial record NoneClass
+    {
+    }
+
+    public partial record NullClass
+    {
+    }
+
+    public partial record ProtocolClass
+    {
+    }
+
+    public partial record RequiredClass
+    {
+    }
+
+    public partial record SelfClass
+    {
+    }
+
+    public partial record ToJson
+    {
+    }
+
+    public partial record TopLevelClass
+    {
+    }
+
+    public partial record TrueClass
+    {
+    }
+
+    public partial record UnionTypeType
+    {
+    }
+
+    public partial record Transient
+    {
+    }
+
+    public partial record True
+    {
+    }
+
+    public partial record Try
+    {
+    }
+
+    public partial record TypeClass
+    {
+    }
+
+    public partial record Typealias
+    {
+    }
+
+    public partial record Typedef
+    {
+    }
+
+    public partial record Typeid
+    {
+    }
+
+    public partial record Typename
+    {
+    }
+
+    public partial record Typeof
+    {
+    }
+
+    public partial record Uint
+    {
+    }
+
+    public partial record Ulong
+    {
+    }
+
+    public partial record Unchecked
+    {
+    }
+
+    public partial record Undefined
+    {
+    }
+
+    public partial record Union
+    {
+    }
+
+    public partial record Unowned
+    {
+    }
+
+    public partial record Unsafe
+    {
+    }
+
+    public partial record Unsigned
+    {
+    }
+
+    public partial record Ushort
+    {
+    }
+
+    public partial record Using
+    {
+    }
+
+    public partial record Var
+    {
+    }
+
+    public partial record Virtual
+    {
+    }
+
+    public partial record Void
+    {
+    }
+
+    public partial record Volatile
+    {
+    }
+
+    public partial record WcharT
+    {
+    }
+
+    public partial record Weak
+    {
+    }
+
+    public partial record Where
+    {
+    }
+
+    public partial record While
+    {
+    }
+
+    public partial record WillSet
+    {
+    }
+
+    public partial record With
+    {
+    }
+
+    public partial record Xor
+    {
+    }
+
+    public partial record XorEq
+    {
+    }
+
+    public partial record Yes
+    {
+    }
+
+    public partial record Yield
+    {
+    }
+
+    public partial struct UnionAbstract
+    {
+        public Abstract? Abstract;
+        public double? Double;
+
+        public static implicit operator UnionAbstract(Abstract Abstract) => new UnionAbstract { Abstract = Abstract };
+        public static implicit operator UnionAbstract(double Double) => new UnionAbstract { Double = Double };
+    }
+
+    public partial struct UnionAlignas
+    {
+        public Alignas? Alignas;
+        public double? Double;
+
+        public static implicit operator UnionAlignas(Alignas Alignas) => new UnionAlignas { Alignas = Alignas };
+        public static implicit operator UnionAlignas(double Double) => new UnionAlignas { Double = Double };
+    }
+
+    public partial struct UnionAlignof
+    {
+        public Alignof? Alignof;
+        public double? Double;
+
+        public static implicit operator UnionAlignof(Alignof Alignof) => new UnionAlignof { Alignof = Alignof };
+        public static implicit operator UnionAlignof(double Double) => new UnionAlignof { Double = Double };
+    }
+
+    public partial struct UnionAnd
+    {
+        public And? And;
+        public double? Double;
+
+        public static implicit operator UnionAnd(And And) => new UnionAnd { And = And };
+        public static implicit operator UnionAnd(double Double) => new UnionAnd { Double = Double };
+    }
+
+    public partial struct UnionAndEq
+    {
+        public AndEq? AndEq;
+        public double? Double;
+
+        public static implicit operator UnionAndEq(AndEq AndEq) => new UnionAndEq { AndEq = AndEq };
+        public static implicit operator UnionAndEq(double Double) => new UnionAndEq { Double = Double };
+    }
+
+    public partial struct UnionAny
+    {
+        public Any? Any;
+        public double? Double;
+
+        public static implicit operator UnionAny(Any Any) => new UnionAny { Any = Any };
+        public static implicit operator UnionAny(double Double) => new UnionAny { Double = Double };
+    }
+
+    public partial struct UnionArray
+    {
+        public Array? Array;
+        public double? Double;
+
+        public static implicit operator UnionArray(Array Array) => new UnionArray { Array = Array };
+        public static implicit operator UnionArray(double Double) => new UnionArray { Double = Double };
+    }
+
+    public partial struct UnionAs
+    {
+        public As? As;
+        public double? Double;
+
+        public static implicit operator UnionAs(As As) => new UnionAs { As = As };
+        public static implicit operator UnionAs(double Double) => new UnionAs { Double = Double };
+    }
+
+    public partial struct UnionAsm
+    {
+        public Asm? Asm;
+        public double? Double;
+
+        public static implicit operator UnionAsm(Asm Asm) => new UnionAsm { Asm = Asm };
+        public static implicit operator UnionAsm(double Double) => new UnionAsm { Double = Double };
+    }
+
+    public partial struct UnionAssert
+    {
+        public Assert? Assert;
+        public double? Double;
+
+        public static implicit operator UnionAssert(Assert Assert) => new UnionAssert { Assert = Assert };
+        public static implicit operator UnionAssert(double Double) => new UnionAssert { Double = Double };
+    }
+
+    public partial struct UnionAssociatedtype
+    {
+        public Associatedtype? Associatedtype;
+        public double? Double;
+
+        public static implicit operator UnionAssociatedtype(Associatedtype Associatedtype) => new UnionAssociatedtype { Associatedtype = Associatedtype };
+        public static implicit operator UnionAssociatedtype(double Double) => new UnionAssociatedtype { Double = Double };
+    }
+
+    public partial struct UnionAssociativity
+    {
+        public Associativity? Associativity;
+        public double? Double;
+
+        public static implicit operator UnionAssociativity(Associativity Associativity) => new UnionAssociativity { Associativity = Associativity };
+        public static implicit operator UnionAssociativity(double Double) => new UnionAssociativity { Double = Double };
+    }
+
+    public partial struct UnionAsync
+    {
+        public Async? Async;
+        public double? Double;
+
+        public static implicit operator UnionAsync(Async Async) => new UnionAsync { Async = Async };
+        public static implicit operator UnionAsync(double Double) => new UnionAsync { Double = Double };
+    }
+
+    public partial struct UnionAtomic
+    {
+        public Atomic? Atomic;
+        public double? Double;
+
+        public static implicit operator UnionAtomic(Atomic Atomic) => new UnionAtomic { Atomic = Atomic };
+        public static implicit operator UnionAtomic(double Double) => new UnionAtomic { Double = Double };
+    }
+
+    public partial struct UnionAtomicCancel
+    {
+        public AtomicCancel? AtomicCancel;
+        public double? Double;
+
+        public static implicit operator UnionAtomicCancel(AtomicCancel AtomicCancel) => new UnionAtomicCancel { AtomicCancel = AtomicCancel };
+        public static implicit operator UnionAtomicCancel(double Double) => new UnionAtomicCancel { Double = Double };
+    }
+
+    public partial struct UnionAtomicCommit
+    {
+        public AtomicCommit? AtomicCommit;
+        public double? Double;
+
+        public static implicit operator UnionAtomicCommit(AtomicCommit AtomicCommit) => new UnionAtomicCommit { AtomicCommit = AtomicCommit };
+        public static implicit operator UnionAtomicCommit(double Double) => new UnionAtomicCommit { Double = Double };
+    }
+
+    public partial struct UnionAtomicNoexcept
+    {
+        public AtomicNoexcept? AtomicNoexcept;
+        public double? Double;
+
+        public static implicit operator UnionAtomicNoexcept(AtomicNoexcept AtomicNoexcept) => new UnionAtomicNoexcept { AtomicNoexcept = AtomicNoexcept };
+        public static implicit operator UnionAtomicNoexcept(double Double) => new UnionAtomicNoexcept { Double = Double };
+    }
+
+    public partial struct UnionAuto
+    {
+        public Auto? Auto;
+        public double? Double;
+
+        public static implicit operator UnionAuto(Auto Auto) => new UnionAuto { Auto = Auto };
+        public static implicit operator UnionAuto(double Double) => new UnionAuto { Double = Double };
+    }
+
+    public partial struct UnionAwait
+    {
+        public Await? Await;
+        public double? Double;
+
+        public static implicit operator UnionAwait(Await Await) => new UnionAwait { Await = Await };
+        public static implicit operator UnionAwait(double Double) => new UnionAwait { Double = Double };
+    }
+
+    public partial struct UnionBase
+    {
+        public Base? Base;
+        public double? Double;
+
+        public static implicit operator UnionBase(Base Base) => new UnionBase { Base = Base };
+        public static implicit operator UnionBase(double Double) => new UnionBase { Double = Double };
+    }
+
+    public partial struct UnionBitand
+    {
+        public Bitand? Bitand;
+        public double? Double;
+
+        public static implicit operator UnionBitand(Bitand Bitand) => new UnionBitand { Bitand = Bitand };
+        public static implicit operator UnionBitand(double Double) => new UnionBitand { Double = Double };
+    }
+
+    public partial struct UnionBitor
+    {
+        public Bitor? Bitor;
+        public double? Double;
+
+        public static implicit operator UnionBitor(Bitor Bitor) => new UnionBitor { Bitor = Bitor };
+        public static implicit operator UnionBitor(double Double) => new UnionBitor { Double = Double };
+    }
+
+    public partial struct UnionBool
+    {
+        public Bool? Bool;
+        public double? Double;
+
+        public static implicit operator UnionBool(Bool Bool) => new UnionBool { Bool = Bool };
+        public static implicit operator UnionBool(double Double) => new UnionBool { Double = Double };
+    }
+
+    public partial struct UnionBoolean
+    {
+        public Boolean? Boolean;
+        public double? Double;
+
+        public static implicit operator UnionBoolean(Boolean Boolean) => new UnionBoolean { Boolean = Boolean };
+        public static implicit operator UnionBoolean(double Double) => new UnionBoolean { Double = Double };
+    }
+
+    public partial struct UnionBreak
+    {
+        public Break? Break;
+        public double? Double;
+
+        public static implicit operator UnionBreak(Break Break) => new UnionBreak { Break = Break };
+        public static implicit operator UnionBreak(double Double) => new UnionBreak { Double = Double };
+    }
+
+    public partial struct UnionBycopy
+    {
+        public Bycopy? Bycopy;
+        public double? Double;
+
+        public static implicit operator UnionBycopy(Bycopy Bycopy) => new UnionBycopy { Bycopy = Bycopy };
+        public static implicit operator UnionBycopy(double Double) => new UnionBycopy { Double = Double };
+    }
+
+    public partial struct UnionByref
+    {
+        public Byref? Byref;
+        public double? Double;
+
+        public static implicit operator UnionByref(Byref Byref) => new UnionByref { Byref = Byref };
+        public static implicit operator UnionByref(double Double) => new UnionByref { Double = Double };
+    }
+
+    public partial struct UnionByte
+    {
+        public Byte? Byte;
+        public double? Double;
+
+        public static implicit operator UnionByte(Byte Byte) => new UnionByte { Byte = Byte };
+        public static implicit operator UnionByte(double Double) => new UnionByte { Double = Double };
+    }
+
+    public partial struct UnionCase
+    {
+        public Case? Case;
+        public double? Double;
+
+        public static implicit operator UnionCase(Case Case) => new UnionCase { Case = Case };
+        public static implicit operator UnionCase(double Double) => new UnionCase { Double = Double };
+    }
+
+    public partial struct UnionCatch
+    {
+        public Catch? Catch;
+        public double? Double;
+
+        public static implicit operator UnionCatch(Catch Catch) => new UnionCatch { Catch = Catch };
+        public static implicit operator UnionCatch(double Double) => new UnionCatch { Double = Double };
+    }
+
+    public partial struct UnionChan
+    {
+        public Chan? Chan;
+        public double? Double;
+
+        public static implicit operator UnionChan(Chan Chan) => new UnionChan { Chan = Chan };
+        public static implicit operator UnionChan(double Double) => new UnionChan { Double = Double };
+    }
+
+    public partial struct UnionChar
+    {
+        public Char? Char;
+        public double? Double;
+
+        public static implicit operator UnionChar(Char Char) => new UnionChar { Char = Char };
+        public static implicit operator UnionChar(double Double) => new UnionChar { Double = Double };
+    }
+
+    public partial struct UnionChar16T
+    {
+        public Char16T? Char16T;
+        public double? Double;
+
+        public static implicit operator UnionChar16T(Char16T Char16T) => new UnionChar16T { Char16T = Char16T };
+        public static implicit operator UnionChar16T(double Double) => new UnionChar16T { Double = Double };
+    }
+
+    public partial struct UnionChar32T
+    {
+        public Char32T? Char32T;
+        public double? Double;
+
+        public static implicit operator UnionChar32T(Char32T Char32T) => new UnionChar32T { Char32T = Char32T };
+        public static implicit operator UnionChar32T(double Double) => new UnionChar32T { Double = Double };
+    }
+
+    public partial struct UnionChecked
+    {
+        public Checked? Checked;
+        public double? Double;
+
+        public static implicit operator UnionChecked(Checked Checked) => new UnionChecked { Checked = Checked };
+        public static implicit operator UnionChecked(double Double) => new UnionChecked { Double = Double };
+    }
+
+    public partial struct UnionClass
+    {
+        public Class? Class;
+        public double? Double;
+
+        public static implicit operator UnionClass(Class Class) => new UnionClass { Class = Class };
+        public static implicit operator UnionClass(double Double) => new UnionClass { Double = Double };
+    }
+
+    public partial struct UnionCoAwait
+    {
+        public CoAwait? CoAwait;
+        public double? Double;
+
+        public static implicit operator UnionCoAwait(CoAwait CoAwait) => new UnionCoAwait { CoAwait = CoAwait };
+        public static implicit operator UnionCoAwait(double Double) => new UnionCoAwait { Double = Double };
+    }
+
+    public partial struct UnionCoReturn
+    {
+        public CoReturn? CoReturn;
+        public double? Double;
+
+        public static implicit operator UnionCoReturn(CoReturn CoReturn) => new UnionCoReturn { CoReturn = CoReturn };
+        public static implicit operator UnionCoReturn(double Double) => new UnionCoReturn { Double = Double };
+    }
+
+    public partial struct UnionCoYield
+    {
+        public CoYield? CoYield;
+        public double? Double;
+
+        public static implicit operator UnionCoYield(CoYield CoYield) => new UnionCoYield { CoYield = CoYield };
+        public static implicit operator UnionCoYield(double Double) => new UnionCoYield { Double = Double };
+    }
+
+    public partial struct UnionCompl
+    {
+        public Compl? Compl;
+        public double? Double;
+
+        public static implicit operator UnionCompl(Compl Compl) => new UnionCompl { Compl = Compl };
+        public static implicit operator UnionCompl(double Double) => new UnionCompl { Double = Double };
+    }
+
+    public partial struct UnionComplex
+    {
+        public Complex? Complex;
+        public double? Double;
+
+        public static implicit operator UnionComplex(Complex Complex) => new UnionComplex { Complex = Complex };
+        public static implicit operator UnionComplex(double Double) => new UnionComplex { Double = Double };
+    }
+
+    public partial struct UnionConcept
+    {
+        public Concept? Concept;
+        public double? Double;
+
+        public static implicit operator UnionConcept(Concept Concept) => new UnionConcept { Concept = Concept };
+        public static implicit operator UnionConcept(double Double) => new UnionConcept { Double = Double };
+    }
+
+    public partial struct UnionConsole
+    {
+        public ConsoleClass? ConsoleClass;
+        public double? Double;
+
+        public static implicit operator UnionConsole(ConsoleClass ConsoleClass) => new UnionConsole { ConsoleClass = ConsoleClass };
+        public static implicit operator UnionConsole(double Double) => new UnionConsole { Double = Double };
+    }
+
+    public partial struct UnionConst
+    {
+        public Const? Const;
+        public double? Double;
+
+        public static implicit operator UnionConst(Const Const) => new UnionConst { Const = Const };
+        public static implicit operator UnionConst(double Double) => new UnionConst { Double = Double };
+    }
+
+    public partial struct UnionConstCast
+    {
+        public ConstCast? ConstCast;
+        public double? Double;
+
+        public static implicit operator UnionConstCast(ConstCast ConstCast) => new UnionConstCast { ConstCast = ConstCast };
+        public static implicit operator UnionConstCast(double Double) => new UnionConstCast { Double = Double };
+    }
+
+    public partial struct UnionConstexpr
+    {
+        public Constexpr? Constexpr;
+        public double? Double;
+
+        public static implicit operator UnionConstexpr(Constexpr Constexpr) => new UnionConstexpr { Constexpr = Constexpr };
+        public static implicit operator UnionConstexpr(double Double) => new UnionConstexpr { Double = Double };
+    }
+
+    public partial struct UnionConstructor
+    {
+        public Constructor? Constructor;
+        public double? Double;
+
+        public static implicit operator UnionConstructor(Constructor Constructor) => new UnionConstructor { Constructor = Constructor };
+        public static implicit operator UnionConstructor(double Double) => new UnionConstructor { Double = Double };
+    }
+
+    public partial struct UnionContinue
+    {
+        public Continue? Continue;
+        public double? Double;
+
+        public static implicit operator UnionContinue(Continue Continue) => new UnionContinue { Continue = Continue };
+        public static implicit operator UnionContinue(double Double) => new UnionContinue { Double = Double };
+    }
+
+    public partial struct UnionConvenience
+    {
+        public Convenience? Convenience;
+        public double? Double;
+
+        public static implicit operator UnionConvenience(Convenience Convenience) => new UnionConvenience { Convenience = Convenience };
+        public static implicit operator UnionConvenience(double Double) => new UnionConvenience { Double = Double };
+    }
+
+    public partial struct UnionConvert
+    {
+        public Convert? Convert;
+        public double? Double;
+
+        public static implicit operator UnionConvert(Convert Convert) => new UnionConvert { Convert = Convert };
+        public static implicit operator UnionConvert(double Double) => new UnionConvert { Double = Double };
+    }
+
+    public partial struct UnionConverter
+    {
+        public ConverterClass? ConverterClass;
+        public double? Double;
+
+        public static implicit operator UnionConverter(ConverterClass ConverterClass) => new UnionConverter { ConverterClass = ConverterClass };
+        public static implicit operator UnionConverter(double Double) => new UnionConverter { Double = Double };
+    }
+
+    public partial struct UnionDate
+    {
+        public Date? Date;
+        public double? Double;
+
+        public static implicit operator UnionDate(Date Date) => new UnionDate { Date = Date };
+        public static implicit operator UnionDate(double Double) => new UnionDate { Double = Double };
+    }
+
+    public partial struct UnionDateParseHandling
+    {
+        public DateParseHandlingClass? DateParseHandlingClass;
+        public double? Double;
+
+        public static implicit operator UnionDateParseHandling(DateParseHandlingClass DateParseHandlingClass) => new UnionDateParseHandling { DateParseHandlingClass = DateParseHandlingClass };
+        public static implicit operator UnionDateParseHandling(double Double) => new UnionDateParseHandling { Double = Double };
+    }
+
+    public partial struct UnionDebugger
+    {
+        public Debugger? Debugger;
+        public double? Double;
+
+        public static implicit operator UnionDebugger(Debugger Debugger) => new UnionDebugger { Debugger = Debugger };
+        public static implicit operator UnionDebugger(double Double) => new UnionDebugger { Double = Double };
+    }
+
+    public partial struct UnionDecimal
+    {
+        public Decimal? Decimal;
+        public double? Double;
+
+        public static implicit operator UnionDecimal(Decimal Decimal) => new UnionDecimal { Decimal = Decimal };
+        public static implicit operator UnionDecimal(double Double) => new UnionDecimal { Double = Double };
+    }
+
+    public partial struct UnionDeclare
+    {
+        public Declare? Declare;
+        public double? Double;
+
+        public static implicit operator UnionDeclare(Declare Declare) => new UnionDeclare { Declare = Declare };
+        public static implicit operator UnionDeclare(double Double) => new UnionDeclare { Double = Double };
+    }
+
+    public partial struct UnionDecltype
+    {
+        public Decltype? Decltype;
+        public double? Double;
+
+        public static implicit operator UnionDecltype(Decltype Decltype) => new UnionDecltype { Decltype = Decltype };
+        public static implicit operator UnionDecltype(double Double) => new UnionDecltype { Double = Double };
+    }
+
+    public partial struct UnionDecodeString
+    {
+        public DecodeString? DecodeString;
+        public double? Double;
+
+        public static implicit operator UnionDecodeString(DecodeString DecodeString) => new UnionDecodeString { DecodeString = DecodeString };
+        public static implicit operator UnionDecodeString(double Double) => new UnionDecodeString { Double = Double };
+    }
+
+    public partial struct UnionDef
+    {
+        public Def? Def;
+        public double? Double;
+
+        public static implicit operator UnionDef(Def Def) => new UnionDef { Def = Def };
+        public static implicit operator UnionDef(double Double) => new UnionDef { Double = Double };
+    }
+
+    public partial struct UnionDefault
+    {
+        public Default? Default;
+        public double? Double;
+
+        public static implicit operator UnionDefault(Default Default) => new UnionDefault { Default = Default };
+        public static implicit operator UnionDefault(double Double) => new UnionDefault { Double = Double };
+    }
+
+    public partial struct UnionDefer
+    {
+        public Defer? Defer;
+        public double? Double;
+
+        public static implicit operator UnionDefer(Defer Defer) => new UnionDefer { Defer = Defer };
+        public static implicit operator UnionDefer(double Double) => new UnionDefer { Double = Double };
+    }
+
+    public partial struct UnionDeinit
+    {
+        public Deinit? Deinit;
+        public double? Double;
+
+        public static implicit operator UnionDeinit(Deinit Deinit) => new UnionDeinit { Deinit = Deinit };
+        public static implicit operator UnionDeinit(double Double) => new UnionDeinit { Double = Double };
+    }
+
+    public partial struct UnionDel
+    {
+        public Del? Del;
+        public double? Double;
+
+        public static implicit operator UnionDel(Del Del) => new UnionDel { Del = Del };
+        public static implicit operator UnionDel(double Double) => new UnionDel { Double = Double };
+    }
+
+    public partial struct UnionDelegate
+    {
+        public Delegate? Delegate;
+        public double? Double;
+
+        public static implicit operator UnionDelegate(Delegate Delegate) => new UnionDelegate { Delegate = Delegate };
+        public static implicit operator UnionDelegate(double Double) => new UnionDelegate { Double = Double };
+    }
+
+    public partial struct UnionDelete
+    {
+        public Delete? Delete;
+        public double? Double;
+
+        public static implicit operator UnionDelete(Delete Delete) => new UnionDelete { Delete = Delete };
+        public static implicit operator UnionDelete(double Double) => new UnionDelete { Double = Double };
+    }
+
+    public partial struct UnionDict
+    {
+        public Dict? Dict;
+        public double? Double;
+
+        public static implicit operator UnionDict(Dict Dict) => new UnionDict { Dict = Dict };
+        public static implicit operator UnionDict(double Double) => new UnionDict { Double = Double };
+    }
+
+    public partial struct UnionDictionary
+    {
+        public Dictionary? Dictionary;
+        public double? Double;
+
+        public static implicit operator UnionDictionary(Dictionary Dictionary) => new UnionDictionary { Dictionary = Dictionary };
+        public static implicit operator UnionDictionary(double Double) => new UnionDictionary { Double = Double };
+    }
+
+    public partial struct UnionDidSet
+    {
+        public DidSet? DidSet;
+        public double? Double;
+
+        public static implicit operator UnionDidSet(DidSet DidSet) => new UnionDidSet { DidSet = DidSet };
+        public static implicit operator UnionDidSet(double Double) => new UnionDidSet { Double = Double };
+    }
+
+    public partial struct UnionDo
+    {
+        public Do? Do;
+        public double? Double;
+
+        public static implicit operator UnionDo(Do Do) => new UnionDo { Do = Do };
+        public static implicit operator UnionDo(double Double) => new UnionDo { Double = Double };
+    }
+
+    public partial struct UnionDouble
+    {
+        public double? Double;
+        public Double? PurpleDouble;
+
+        public static implicit operator UnionDouble(double Double) => new UnionDouble { Double = Double };
+        public static implicit operator UnionDouble(Double PurpleDouble) => new UnionDouble { PurpleDouble = PurpleDouble };
+    }
+
+    public partial struct UnionDynamic
+    {
+        public double? Double;
+        public Dynamic? Dynamic;
+
+        public static implicit operator UnionDynamic(double Double) => new UnionDynamic { Double = Double };
+        public static implicit operator UnionDynamic(Dynamic Dynamic) => new UnionDynamic { Dynamic = Dynamic };
+    }
+
+    public partial struct UnionDynamicCast
+    {
+        public double? Double;
+        public DynamicCast? DynamicCast;
+
+        public static implicit operator UnionDynamicCast(double Double) => new UnionDynamicCast { Double = Double };
+        public static implicit operator UnionDynamicCast(DynamicCast DynamicCast) => new UnionDynamicCast { DynamicCast = DynamicCast };
+    }
+
+    public partial struct UnionElif
+    {
+        public double? Double;
+        public Elif? Elif;
+
+        public static implicit operator UnionElif(double Double) => new UnionElif { Double = Double };
+        public static implicit operator UnionElif(Elif Elif) => new UnionElif { Elif = Elif };
+    }
+
+    public partial struct UnionElse
+    {
+        public double? Double;
+        public Else? Else;
+
+        public static implicit operator UnionElse(double Double) => new UnionElse { Double = Double };
+        public static implicit operator UnionElse(Else Else) => new UnionElse { Else = Else };
+    }
+
+    public partial struct UnionUnion
+    {
+        public double? Double;
+        public Empty? Empty;
+
+        public static implicit operator UnionUnion(double Double) => new UnionUnion { Double = Double };
+        public static implicit operator UnionUnion(Empty Empty) => new UnionUnion { Empty = Empty };
+    }
+
+    public partial struct UnionEncodeQuickType
+    {
+        public double? Double;
+        public EncodeQuickType? EncodeQuickType;
+
+        public static implicit operator UnionEncodeQuickType(double Double) => new UnionEncodeQuickType { Double = Double };
+        public static implicit operator UnionEncodeQuickType(EncodeQuickType EncodeQuickType) => new UnionEncodeQuickType { EncodeQuickType = EncodeQuickType };
+    }
+
+    public partial struct UnionEnum
+    {
+        public double? Double;
+        public Enum? Enum;
+
+        public static implicit operator UnionEnum(double Double) => new UnionEnum { Double = Double };
+        public static implicit operator UnionEnum(Enum Enum) => new UnionEnum { Enum = Enum };
+    }
+
+    public partial struct UnionEvent
+    {
+        public double? Double;
+        public Event? Event;
+
+        public static implicit operator UnionEvent(double Double) => new UnionEvent { Double = Double };
+        public static implicit operator UnionEvent(Event Event) => new UnionEvent { Event = Event };
+    }
+
+    public partial struct UnionExcept
+    {
+        public double? Double;
+        public Except? Except;
+
+        public static implicit operator UnionExcept(double Double) => new UnionExcept { Double = Double };
+        public static implicit operator UnionExcept(Except Except) => new UnionExcept { Except = Except };
+    }
+
+    public partial struct UnionException
+    {
+        public double? Double;
+        public ExceptionClass? ExceptionClass;
+
+        public static implicit operator UnionException(double Double) => new UnionException { Double = Double };
+        public static implicit operator UnionException(ExceptionClass ExceptionClass) => new UnionException { ExceptionClass = ExceptionClass };
+    }
+
+    public partial struct UnionExplicit
+    {
+        public double? Double;
+        public Explicit? Explicit;
+
+        public static implicit operator UnionExplicit(double Double) => new UnionExplicit { Double = Double };
+        public static implicit operator UnionExplicit(Explicit Explicit) => new UnionExplicit { Explicit = Explicit };
+    }
+
+    public partial struct UnionExport
+    {
+        public double? Double;
+        public Export? Export;
+
+        public static implicit operator UnionExport(double Double) => new UnionExport { Double = Double };
+        public static implicit operator UnionExport(Export Export) => new UnionExport { Export = Export };
+    }
+
+    public partial struct UnionExposing
+    {
+        public double? Double;
+        public Exposing? Exposing;
+
+        public static implicit operator UnionExposing(double Double) => new UnionExposing { Double = Double };
+        public static implicit operator UnionExposing(Exposing Exposing) => new UnionExposing { Exposing = Exposing };
+    }
+
+    public partial struct UnionExtends
+    {
+        public double? Double;
+        public Extends? Extends;
+
+        public static implicit operator UnionExtends(double Double) => new UnionExtends { Double = Double };
+        public static implicit operator UnionExtends(Extends Extends) => new UnionExtends { Extends = Extends };
+    }
+
+    public partial struct UnionExtension
+    {
+        public double? Double;
+        public Extension? Extension;
+
+        public static implicit operator UnionExtension(double Double) => new UnionExtension { Double = Double };
+        public static implicit operator UnionExtension(Extension Extension) => new UnionExtension { Extension = Extension };
+    }
+
+    public partial struct UnionExtern
+    {
+        public double? Double;
+        public Extern? Extern;
+
+        public static implicit operator UnionExtern(double Double) => new UnionExtern { Double = Double };
+        public static implicit operator UnionExtern(Extern Extern) => new UnionExtern { Extern = Extern };
+    }
+
+    public partial struct UnionFallthrough
+    {
+        public double? Double;
+        public Fallthrough? Fallthrough;
+
+        public static implicit operator UnionFallthrough(double Double) => new UnionFallthrough { Double = Double };
+        public static implicit operator UnionFallthrough(Fallthrough Fallthrough) => new UnionFallthrough { Fallthrough = Fallthrough };
+    }
+
+    public partial struct UnionFalse
+    {
+        public double? Double;
+        public False? False;
+
+        public static implicit operator UnionFalse(double Double) => new UnionFalse { Double = Double };
+        public static implicit operator UnionFalse(False False) => new UnionFalse { False = False };
+    }
+
+    public partial struct UnionFileprivate
+    {
+        public double? Double;
+        public Fileprivate? Fileprivate;
+
+        public static implicit operator UnionFileprivate(double Double) => new UnionFileprivate { Double = Double };
+        public static implicit operator UnionFileprivate(Fileprivate Fileprivate) => new UnionFileprivate { Fileprivate = Fileprivate };
+    }
+
+    public partial struct UnionFinal
+    {
+        public double? Double;
+        public Final? Final;
+
+        public static implicit operator UnionFinal(double Double) => new UnionFinal { Double = Double };
+        public static implicit operator UnionFinal(Final Final) => new UnionFinal { Final = Final };
+    }
+
+    public partial struct UnionFinally
+    {
+        public double? Double;
+        public Finally? Finally;
+
+        public static implicit operator UnionFinally(double Double) => new UnionFinally { Double = Double };
+        public static implicit operator UnionFinally(Finally Finally) => new UnionFinally { Finally = Finally };
+    }
+
+    public partial struct UnionFixed
+    {
+        public double? Double;
+        public Fixed? Fixed;
+
+        public static implicit operator UnionFixed(double Double) => new UnionFixed { Double = Double };
+        public static implicit operator UnionFixed(Fixed Fixed) => new UnionFixed { Fixed = Fixed };
+    }
+
+    public partial struct UnionFloat
+    {
+        public double? Double;
+        public Float? Float;
+
+        public static implicit operator UnionFloat(double Double) => new UnionFloat { Double = Double };
+        public static implicit operator UnionFloat(Float Float) => new UnionFloat { Float = Float };
+    }
+
+    public partial struct UnionFor
+    {
+        public double? Double;
+        public For? For;
+
+        public static implicit operator UnionFor(double Double) => new UnionFor { Double = Double };
+        public static implicit operator UnionFor(For For) => new UnionFor { For = For };
+    }
+
+    public partial struct UnionForeach
+    {
+        public double? Double;
+        public Foreach? Foreach;
+
+        public static implicit operator UnionForeach(double Double) => new UnionForeach { Double = Double };
+        public static implicit operator UnionForeach(Foreach Foreach) => new UnionForeach { Foreach = Foreach };
+    }
+
+    public partial struct UnionFriend
+    {
+        public double? Double;
+        public Friend? Friend;
+
+        public static implicit operator UnionFriend(double Double) => new UnionFriend { Double = Double };
+        public static implicit operator UnionFriend(Friend Friend) => new UnionFriend { Friend = Friend };
+    }
+
+    public partial struct UnionFrom
+    {
+        public double? Double;
+        public From? From;
+
+        public static implicit operator UnionFrom(double Double) => new UnionFrom { Double = Double };
+        public static implicit operator UnionFrom(From From) => new UnionFrom { From = From };
+    }
+
+    public partial struct UnionFunc
+    {
+        public double? Double;
+        public Func? Func;
+
+        public static implicit operator UnionFunc(double Double) => new UnionFunc { Double = Double };
+        public static implicit operator UnionFunc(Func Func) => new UnionFunc { Func = Func };
+    }
+
+    public partial struct UnionFunction
+    {
+        public double? Double;
+        public Function? Function;
+
+        public static implicit operator UnionFunction(double Double) => new UnionFunction { Double = Double };
+        public static implicit operator UnionFunction(Function Function) => new UnionFunction { Function = Function };
+    }
+
+    public partial struct UnionGet
+    {
+        public double? Double;
+        public Get? Get;
+
+        public static implicit operator UnionGet(double Double) => new UnionGet { Double = Double };
+        public static implicit operator UnionGet(Get Get) => new UnionGet { Get = Get };
+    }
+
+    public partial struct UnionGlobal
+    {
+        public double? Double;
+        public Global? Global;
+
+        public static implicit operator UnionGlobal(double Double) => new UnionGlobal { Double = Double };
+        public static implicit operator UnionGlobal(Global Global) => new UnionGlobal { Global = Global };
+    }
+
+    public partial struct UnionGo
+    {
+        public double? Double;
+        public Go? Go;
+
+        public static implicit operator UnionGo(double Double) => new UnionGo { Double = Double };
+        public static implicit operator UnionGo(Go Go) => new UnionGo { Go = Go };
+    }
+
+    public partial struct UnionGoto
+    {
+        public double? Double;
+        public Goto? Goto;
+
+        public static implicit operator UnionGoto(double Double) => new UnionGoto { Double = Double };
+        public static implicit operator UnionGoto(Goto Goto) => new UnionGoto { Goto = Goto };
+    }
+
+    public partial struct UnionGuard
+    {
+        public double? Double;
+        public Guard? Guard;
+
+        public static implicit operator UnionGuard(double Double) => new UnionGuard { Double = Double };
+        public static implicit operator UnionGuard(Guard Guard) => new UnionGuard { Guard = Guard };
+    }
+
+    public partial struct UnionHasOwnProperty
+    {
+        public double? Double;
+        public HasOwnProperty? HasOwnProperty;
+
+        public static implicit operator UnionHasOwnProperty(double Double) => new UnionHasOwnProperty { Double = Double };
+        public static implicit operator UnionHasOwnProperty(HasOwnProperty HasOwnProperty) => new UnionHasOwnProperty { HasOwnProperty = HasOwnProperty };
+    }
+
+    public partial struct UnionId
+    {
+        public double? Double;
+        public Id? Id;
+
+        public static implicit operator UnionId(double Double) => new UnionId { Double = Double };
+        public static implicit operator UnionId(Id Id) => new UnionId { Id = Id };
+    }
+
+    public partial struct UnionIf
+    {
+        public double? Double;
+        public If? If;
+
+        public static implicit operator UnionIf(double Double) => new UnionIf { Double = Double };
+        public static implicit operator UnionIf(If If) => new UnionIf { If = If };
+    }
+
+    public partial struct UnionImaginery
+    {
+        public double? Double;
+        public Imaginery? Imaginery;
+
+        public static implicit operator UnionImaginery(double Double) => new UnionImaginery { Double = Double };
+        public static implicit operator UnionImaginery(Imaginery Imaginery) => new UnionImaginery { Imaginery = Imaginery };
+    }
+
+    public partial struct UnionImp
+    {
+        public double? Double;
+        public Imp? Imp;
+
+        public static implicit operator UnionImp(double Double) => new UnionImp { Double = Double };
+        public static implicit operator UnionImp(Imp Imp) => new UnionImp { Imp = Imp };
+    }
+
+    public partial struct UnionImplements
+    {
+        public double? Double;
+        public Implements? Implements;
+
+        public static implicit operator UnionImplements(double Double) => new UnionImplements { Double = Double };
+        public static implicit operator UnionImplements(Implements Implements) => new UnionImplements { Implements = Implements };
+    }
+
+    public partial struct UnionImplicit
+    {
+        public double? Double;
+        public Implicit? Implicit;
+
+        public static implicit operator UnionImplicit(double Double) => new UnionImplicit { Double = Double };
+        public static implicit operator UnionImplicit(Implicit Implicit) => new UnionImplicit { Implicit = Implicit };
+    }
+
+    public partial struct UnionImport
+    {
+        public double? Double;
+        public Import? Import;
+
+        public static implicit operator UnionImport(double Double) => new UnionImport { Double = Double };
+        public static implicit operator UnionImport(Import Import) => new UnionImport { Import = Import };
+    }
+
+    public partial struct UnionIn
+    {
+        public double? Double;
+        public In? In;
+
+        public static implicit operator UnionIn(double Double) => new UnionIn { Double = Double };
+        public static implicit operator UnionIn(In In) => new UnionIn { In = In };
+    }
+
+    public partial struct UnionIndirect
+    {
+        public double? Double;
+        public Indirect? Indirect;
+
+        public static implicit operator UnionIndirect(double Double) => new UnionIndirect { Double = Double };
+        public static implicit operator UnionIndirect(Indirect Indirect) => new UnionIndirect { Indirect = Indirect };
+    }
+
+    public partial struct UnionInfix
+    {
+        public double? Double;
+        public Infix? Infix;
+
+        public static implicit operator UnionInfix(double Double) => new UnionInfix { Double = Double };
+        public static implicit operator UnionInfix(Infix Infix) => new UnionInfix { Infix = Infix };
+    }
+
+    public partial struct UnionInit
+    {
+        public double? Double;
+        public Init? Init;
+
+        public static implicit operator UnionInit(double Double) => new UnionInit { Double = Double };
+        public static implicit operator UnionInit(Init Init) => new UnionInit { Init = Init };
+    }
+
+    public partial struct UnionInline
+    {
+        public double? Double;
+        public Inline? Inline;
+
+        public static implicit operator UnionInline(double Double) => new UnionInline { Double = Double };
+        public static implicit operator UnionInline(Inline Inline) => new UnionInline { Inline = Inline };
+    }
+
+    public partial struct UnionInout
+    {
+        public double? Double;
+        public Inout? Inout;
+
+        public static implicit operator UnionInout(double Double) => new UnionInout { Double = Double };
+        public static implicit operator UnionInout(Inout Inout) => new UnionInout { Inout = Inout };
+    }
+
+    public partial struct UnionInstanceof
+    {
+        public double? Double;
+        public Instanceof? Instanceof;
+
+        public static implicit operator UnionInstanceof(double Double) => new UnionInstanceof { Double = Double };
+        public static implicit operator UnionInstanceof(Instanceof Instanceof) => new UnionInstanceof { Instanceof = Instanceof };
+    }
+
+    public partial struct UnionInt
+    {
+        public double? Double;
+        public Int? Int;
+
+        public static implicit operator UnionInt(double Double) => new UnionInt { Double = Double };
+        public static implicit operator UnionInt(Int Int) => new UnionInt { Int = Int };
+    }
+
+    public partial struct UnionInterface
+    {
+        public double? Double;
+        public Interface? Interface;
+
+        public static implicit operator UnionInterface(double Double) => new UnionInterface { Double = Double };
+        public static implicit operator UnionInterface(Interface Interface) => new UnionInterface { Interface = Interface };
+    }
+
+    public partial struct UnionInternal
+    {
+        public double? Double;
+        public Internal? Internal;
+
+        public static implicit operator UnionInternal(double Double) => new UnionInternal { Double = Double };
+        public static implicit operator UnionInternal(Internal Internal) => new UnionInternal { Internal = Internal };
+    }
+
+    public partial struct UnionIs
+    {
+        public double? Double;
+        public Is? Is;
+
+        public static implicit operator UnionIs(double Double) => new UnionIs { Double = Double };
+        public static implicit operator UnionIs(Is Is) => new UnionIs { Is = Is };
+    }
+
+    public partial struct UnionIterable
+    {
+        public double? Double;
+        public Iterable? Iterable;
+
+        public static implicit operator UnionIterable(double Double) => new UnionIterable { Double = Double };
+        public static implicit operator UnionIterable(Iterable Iterable) => new UnionIterable { Iterable = Iterable };
+    }
+
+    public partial struct UnionJdec
+    {
+        public double? Double;
+        public Jdec? Jdec;
+
+        public static implicit operator UnionJdec(double Double) => new UnionJdec { Double = Double };
+        public static implicit operator UnionJdec(Jdec Jdec) => new UnionJdec { Jdec = Jdec };
+    }
+
+    public partial struct UnionJenc
+    {
+        public double? Double;
+        public Jenc? Jenc;
+
+        public static implicit operator UnionJenc(double Double) => new UnionJenc { Double = Double };
+        public static implicit operator UnionJenc(Jenc Jenc) => new UnionJenc { Jenc = Jenc };
+    }
+
+    public partial struct UnionJpipe
+    {
+        public double? Double;
+        public Jpipe? Jpipe;
+
+        public static implicit operator UnionJpipe(double Double) => new UnionJpipe { Double = Double };
+        public static implicit operator UnionJpipe(Jpipe Jpipe) => new UnionJpipe { Jpipe = Jpipe };
+    }
+
+    public partial struct UnionJson
+    {
+        public double? Double;
+        public Json? Json;
+
+        public static implicit operator UnionJson(double Double) => new UnionJson { Double = Double };
+        public static implicit operator UnionJson(Json Json) => new UnionJson { Json = Json };
+    }
+
+    public partial struct UnionJsonConverter
+    {
+        public double? Double;
+        public JsonConverterClass? JsonConverterClass;
+
+        public static implicit operator UnionJsonConverter(double Double) => new UnionJsonConverter { Double = Double };
+        public static implicit operator UnionJsonConverter(JsonConverterClass JsonConverterClass) => new UnionJsonConverter { JsonConverterClass = JsonConverterClass };
+    }
+
+    public partial struct UnionJsonSerializer
+    {
+        public double? Double;
+        public JsonSerializerClass? JsonSerializerClass;
+
+        public static implicit operator UnionJsonSerializer(double Double) => new UnionJsonSerializer { Double = Double };
+        public static implicit operator UnionJsonSerializer(JsonSerializerClass JsonSerializerClass) => new UnionJsonSerializer { JsonSerializerClass = JsonSerializerClass };
+    }
+
+    public partial struct UnionJsonToken
+    {
+        public double? Double;
+        public JsonTokenClass? JsonTokenClass;
+
+        public static implicit operator UnionJsonToken(double Double) => new UnionJsonToken { Double = Double };
+        public static implicit operator UnionJsonToken(JsonTokenClass JsonTokenClass) => new UnionJsonToken { JsonTokenClass = JsonTokenClass };
+    }
+
+    public partial struct UnionJsonWriter
+    {
+        public double? Double;
+        public JsonWriterClass? JsonWriterClass;
+
+        public static implicit operator UnionJsonWriter(double Double) => new UnionJsonWriter { Double = Double };
+        public static implicit operator UnionJsonWriter(JsonWriterClass JsonWriterClass) => new UnionJsonWriter { JsonWriterClass = JsonWriterClass };
+    }
+
+    public partial struct UnionLambda
+    {
+        public double? Double;
+        public Lambda? Lambda;
+
+        public static implicit operator UnionLambda(double Double) => new UnionLambda { Double = Double };
+        public static implicit operator UnionLambda(Lambda Lambda) => new UnionLambda { Lambda = Lambda };
+    }
+
+    public partial struct UnionLazy
+    {
+        public double? Double;
+        public Lazy? Lazy;
+
+        public static implicit operator UnionLazy(double Double) => new UnionLazy { Double = Double };
+        public static implicit operator UnionLazy(Lazy Lazy) => new UnionLazy { Lazy = Lazy };
+    }
+
+    public partial struct UnionLeft
+    {
+        public double? Double;
+        public Left? Left;
+
+        public static implicit operator UnionLeft(double Double) => new UnionLeft { Double = Double };
+        public static implicit operator UnionLeft(Left Left) => new UnionLeft { Left = Left };
+    }
+
+    public partial struct UnionLet
+    {
+        public double? Double;
+        public Let? Let;
+
+        public static implicit operator UnionLet(double Double) => new UnionLet { Double = Double };
+        public static implicit operator UnionLet(Let Let) => new UnionLet { Let = Let };
+    }
+
+    public partial struct UnionList
+    {
+        public double? Double;
+        public List? List;
+
+        public static implicit operator UnionList(double Double) => new UnionList { Double = Double };
+        public static implicit operator UnionList(List List) => new UnionList { List = List };
+    }
+
+    public partial struct UnionLock
+    {
+        public double? Double;
+        public Lock? Lock;
+
+        public static implicit operator UnionLock(double Double) => new UnionLock { Double = Double };
+        public static implicit operator UnionLock(Lock Lock) => new UnionLock { Lock = Lock };
+    }
+
+    public partial struct UnionLong
+    {
+        public double? Double;
+        public Long? Long;
+
+        public static implicit operator UnionLong(double Double) => new UnionLong { Double = Double };
+        public static implicit operator UnionLong(Long Long) => new UnionLong { Long = Long };
+    }
+
+    public partial struct UnionMap
+    {
+        public double? Double;
+        public Map? Map;
+
+        public static implicit operator UnionMap(double Double) => new UnionMap { Double = Double };
+        public static implicit operator UnionMap(Map Map) => new UnionMap { Map = Map };
+    }
+
+    public partial struct UnionMetadataPropertyHandling
+    {
+        public double? Double;
+        public MetadataPropertyHandlingClass? MetadataPropertyHandlingClass;
+
+        public static implicit operator UnionMetadataPropertyHandling(double Double) => new UnionMetadataPropertyHandling { Double = Double };
+        public static implicit operator UnionMetadataPropertyHandling(MetadataPropertyHandlingClass MetadataPropertyHandlingClass) => new UnionMetadataPropertyHandling { MetadataPropertyHandlingClass = MetadataPropertyHandlingClass };
+    }
+
+    public partial struct UnionModule
+    {
+        public double? Double;
+        public Module? Module;
+
+        public static implicit operator UnionModule(double Double) => new UnionModule { Double = Double };
+        public static implicit operator UnionModule(Module Module) => new UnionModule { Module = Module };
+    }
+
+    public partial struct UnionMutable
+    {
+        public double? Double;
+        public Mutable? Mutable;
+
+        public static implicit operator UnionMutable(double Double) => new UnionMutable { Double = Double };
+        public static implicit operator UnionMutable(Mutable Mutable) => new UnionMutable { Mutable = Mutable };
+    }
+
+    public partial struct UnionMutating
+    {
+        public double? Double;
+        public Mutating? Mutating;
+
+        public static implicit operator UnionMutating(double Double) => new UnionMutating { Double = Double };
+        public static implicit operator UnionMutating(Mutating Mutating) => new UnionMutating { Mutating = Mutating };
+    }
+
+    public partial struct UnionNamespace
+    {
+        public double? Double;
+        public Namespace? Namespace;
+
+        public static implicit operator UnionNamespace(double Double) => new UnionNamespace { Double = Double };
+        public static implicit operator UnionNamespace(Namespace Namespace) => new UnionNamespace { Namespace = Namespace };
+    }
+
+    public partial struct UnionNative
+    {
+        public double? Double;
+        public Native? Native;
+
+        public static implicit operator UnionNative(double Double) => new UnionNative { Double = Double };
+        public static implicit operator UnionNative(Native Native) => new UnionNative { Native = Native };
+    }
+
+    public partial struct UnionNew
+    {
+        public double? Double;
+        public New? New;
+
+        public static implicit operator UnionNew(double Double) => new UnionNew { Double = Double };
+        public static implicit operator UnionNew(New New) => new UnionNew { New = New };
+    }
+
+    public partial struct UnionNewtonsoft
+    {
+        public double? Double;
+        public NewtonsoftClass? NewtonsoftClass;
+
+        public static implicit operator UnionNewtonsoft(double Double) => new UnionNewtonsoft { Double = Double };
+        public static implicit operator UnionNewtonsoft(NewtonsoftClass NewtonsoftClass) => new UnionNewtonsoft { NewtonsoftClass = NewtonsoftClass };
+    }
+
+    public partial struct UnionNil
+    {
+        public double? Double;
+        public Nil? Nil;
+
+        public static implicit operator UnionNil(double Double) => new UnionNil { Double = Double };
+        public static implicit operator UnionNil(Nil Nil) => new UnionNil { Nil = Nil };
+    }
+
+    public partial struct UnionNo
+    {
+        public double? Double;
+        public No? No;
+
+        public static implicit operator UnionNo(double Double) => new UnionNo { Double = Double };
+        public static implicit operator UnionNo(No No) => new UnionNo { No = No };
+    }
+
+    public partial struct UnionNoexcept
+    {
+        public double? Double;
+        public Noexcept? Noexcept;
+
+        public static implicit operator UnionNoexcept(double Double) => new UnionNoexcept { Double = Double };
+        public static implicit operator UnionNoexcept(Noexcept Noexcept) => new UnionNoexcept { Noexcept = Noexcept };
+    }
+
+    public partial struct UnionNonatomic
+    {
+        public double? Double;
+        public Nonatomic? Nonatomic;
+
+        public static implicit operator UnionNonatomic(double Double) => new UnionNonatomic { Double = Double };
+        public static implicit operator UnionNonatomic(Nonatomic Nonatomic) => new UnionNonatomic { Nonatomic = Nonatomic };
+    }
+
+    public partial struct UnionNone
+    {
+        public double? Double;
+        public None? None;
+
+        public static implicit operator UnionNone(double Double) => new UnionNone { Double = Double };
+        public static implicit operator UnionNone(None None) => new UnionNone { None = None };
+    }
+
+    public partial struct UnionNonlocal
+    {
+        public double? Double;
+        public Nonlocal? Nonlocal;
+
+        public static implicit operator UnionNonlocal(double Double) => new UnionNonlocal { Double = Double };
+        public static implicit operator UnionNonlocal(Nonlocal Nonlocal) => new UnionNonlocal { Nonlocal = Nonlocal };
+    }
+
+    public partial struct UnionNonmutating
+    {
+        public double? Double;
+        public Nonmutating? Nonmutating;
+
+        public static implicit operator UnionNonmutating(double Double) => new UnionNonmutating { Double = Double };
+        public static implicit operator UnionNonmutating(Nonmutating Nonmutating) => new UnionNonmutating { Nonmutating = Nonmutating };
+    }
+
+    public partial struct UnionNot
+    {
+        public double? Double;
+        public Not? Not;
+
+        public static implicit operator UnionNot(double Double) => new UnionNot { Double = Double };
+        public static implicit operator UnionNot(Not Not) => new UnionNot { Not = Not };
+    }
+
+    public partial struct UnionNotEq
+    {
+        public double? Double;
+        public NotEq? NotEq;
+
+        public static implicit operator UnionNotEq(double Double) => new UnionNotEq { Double = Double };
+        public static implicit operator UnionNotEq(NotEq NotEq) => new UnionNotEq { NotEq = NotEq };
+    }
+
+    public partial struct UnionNsString
+    {
+        public double? Double;
+        public NsString? NsString;
+
+        public static implicit operator UnionNsString(double Double) => new UnionNsString { Double = Double };
+        public static implicit operator UnionNsString(NsString NsString) => new UnionNsString { NsString = NsString };
+    }
+
+    public partial struct UnionNull
+    {
+        public double? Double;
+        public Null? Null;
+
+        public static implicit operator UnionNull(double Double) => new UnionNull { Double = Double };
+        public static implicit operator UnionNull(Null Null) => new UnionNull { Null = Null };
+    }
+
+    public partial struct UnionNullptr
+    {
+        public double? Double;
+        public Nullptr? Nullptr;
+
+        public static implicit operator UnionNullptr(double Double) => new UnionNullptr { Double = Double };
+        public static implicit operator UnionNullptr(Nullptr Nullptr) => new UnionNullptr { Nullptr = Nullptr };
+    }
+
+    public partial struct UnionNumber
+    {
+        public double? Double;
+        public Number? Number;
+
+        public static implicit operator UnionNumber(double Double) => new UnionNumber { Double = Double };
+        public static implicit operator UnionNumber(Number Number) => new UnionNumber { Number = Number };
+    }
+
+    public partial struct UnionObject
+    {
+        public double? Double;
+        public Object? Object;
+
+        public static implicit operator UnionObject(double Double) => new UnionObject { Double = Double };
+        public static implicit operator UnionObject(Object Object) => new UnionObject { Object = Object };
+    }
+
+    public partial struct UnionOf
+    {
+        public double? Double;
+        public Of? Of;
+
+        public static implicit operator UnionOf(double Double) => new UnionOf { Double = Double };
+        public static implicit operator UnionOf(Of Of) => new UnionOf { Of = Of };
+    }
+
+    public partial struct UnionOneway
+    {
+        public double? Double;
+        public Oneway? Oneway;
+
+        public static implicit operator UnionOneway(double Double) => new UnionOneway { Double = Double };
+        public static implicit operator UnionOneway(Oneway Oneway) => new UnionOneway { Oneway = Oneway };
+    }
+
+    public partial struct UnionOpen
+    {
+        public double? Double;
+        public Open? Open;
+
+        public static implicit operator UnionOpen(double Double) => new UnionOpen { Double = Double };
+        public static implicit operator UnionOpen(Open Open) => new UnionOpen { Open = Open };
+    }
+
+    public partial struct UnionOperator
+    {
+        public double? Double;
+        public Operator? Operator;
+
+        public static implicit operator UnionOperator(double Double) => new UnionOperator { Double = Double };
+        public static implicit operator UnionOperator(Operator Operator) => new UnionOperator { Operator = Operator };
+    }
+
+    public partial struct UnionOptional
+    {
+        public double? Double;
+        public Optional? Optional;
+
+        public static implicit operator UnionOptional(double Double) => new UnionOptional { Double = Double };
+        public static implicit operator UnionOptional(Optional Optional) => new UnionOptional { Optional = Optional };
+    }
+
+    public partial struct UnionOr
+    {
+        public double? Double;
+        public Or? Or;
+
+        public static implicit operator UnionOr(double Double) => new UnionOr { Double = Double };
+        public static implicit operator UnionOr(Or Or) => new UnionOr { Or = Or };
+    }
+
+    public partial struct UnionOrEq
+    {
+        public double? Double;
+        public OrEq? OrEq;
+
+        public static implicit operator UnionOrEq(double Double) => new UnionOrEq { Double = Double };
+        public static implicit operator UnionOrEq(OrEq OrEq) => new UnionOrEq { OrEq = OrEq };
+    }
+
+    public partial struct UnionOut
+    {
+        public double? Double;
+        public Out? Out;
+
+        public static implicit operator UnionOut(double Double) => new UnionOut { Double = Double };
+        public static implicit operator UnionOut(Out Out) => new UnionOut { Out = Out };
+    }
+
+    public partial struct UnionOverride
+    {
+        public double? Double;
+        public Override? Override;
+
+        public static implicit operator UnionOverride(double Double) => new UnionOverride { Double = Double };
+        public static implicit operator UnionOverride(Override Override) => new UnionOverride { Override = Override };
+    }
+
+    public partial struct UnionPackage
+    {
+        public double? Double;
+        public Package? Package;
+
+        public static implicit operator UnionPackage(double Double) => new UnionPackage { Double = Double };
+        public static implicit operator UnionPackage(Package Package) => new UnionPackage { Package = Package };
+    }
+
+    public partial struct UnionParams
+    {
+        public double? Double;
+        public Params? Params;
+
+        public static implicit operator UnionParams(double Double) => new UnionParams { Double = Double };
+        public static implicit operator UnionParams(Params Params) => new UnionParams { Params = Params };
+    }
+
+    public partial struct UnionPass
+    {
+        public double? Double;
+        public Pass? Pass;
+
+        public static implicit operator UnionPass(double Double) => new UnionPass { Double = Double };
+        public static implicit operator UnionPass(Pass Pass) => new UnionPass { Pass = Pass };
+    }
+
+    public partial struct UnionPort
+    {
+        public double? Double;
+        public Port? Port;
+
+        public static implicit operator UnionPort(double Double) => new UnionPort { Double = Double };
+        public static implicit operator UnionPort(Port Port) => new UnionPort { Port = Port };
+    }
+
+    public partial struct UnionPostfix
+    {
+        public double? Double;
+        public Postfix? Postfix;
+
+        public static implicit operator UnionPostfix(double Double) => new UnionPostfix { Double = Double };
+        public static implicit operator UnionPostfix(Postfix Postfix) => new UnionPostfix { Postfix = Postfix };
+    }
+
+    public partial struct UnionPrecedence
+    {
+        public double? Double;
+        public Precedence? Precedence;
+
+        public static implicit operator UnionPrecedence(double Double) => new UnionPrecedence { Double = Double };
+        public static implicit operator UnionPrecedence(Precedence Precedence) => new UnionPrecedence { Precedence = Precedence };
+    }
+
+    public partial struct UnionPrefix
+    {
+        public double? Double;
+        public Prefix? Prefix;
+
+        public static implicit operator UnionPrefix(double Double) => new UnionPrefix { Double = Double };
+        public static implicit operator UnionPrefix(Prefix Prefix) => new UnionPrefix { Prefix = Prefix };
+    }
+
+    public partial struct UnionPrint
+    {
+        public double? Double;
+        public Print? Print;
+
+        public static implicit operator UnionPrint(double Double) => new UnionPrint { Double = Double };
+        public static implicit operator UnionPrint(Print Print) => new UnionPrint { Print = Print };
+    }
+
+    public partial struct UnionPrintf
+    {
+        public double? Double;
+        public Printf? Printf;
+
+        public static implicit operator UnionPrintf(double Double) => new UnionPrintf { Double = Double };
+        public static implicit operator UnionPrintf(Printf Printf) => new UnionPrintf { Printf = Printf };
+    }
+
+    public partial struct UnionPrivate
+    {
+        public double? Double;
+        public Private? Private;
+
+        public static implicit operator UnionPrivate(double Double) => new UnionPrivate { Double = Double };
+        public static implicit operator UnionPrivate(Private Private) => new UnionPrivate { Private = Private };
+    }
+
+    public partial struct UnionProtected
+    {
+        public double? Double;
+        public Protected? Protected;
+
+        public static implicit operator UnionProtected(double Double) => new UnionProtected { Double = Double };
+        public static implicit operator UnionProtected(Protected Protected) => new UnionProtected { Protected = Protected };
+    }
+
+    public partial struct UnionProtocol
+    {
+        public double? Double;
+        public Protocol? Protocol;
+
+        public static implicit operator UnionProtocol(double Double) => new UnionProtocol { Double = Double };
+        public static implicit operator UnionProtocol(Protocol Protocol) => new UnionProtocol { Protocol = Protocol };
+    }
+
+    public partial struct UnionPublic
+    {
+        public double? Double;
+        public Public? Public;
+
+        public static implicit operator UnionPublic(double Double) => new UnionPublic { Double = Double };
+        public static implicit operator UnionPublic(Public Public) => new UnionPublic { Public = Public };
+    }
+
+    public partial struct TopLevelUnionBool
+    {
+        public double? Double;
+        public UnionBoolBool? UnionBoolBool;
+
+        public static implicit operator TopLevelUnionBool(double Double) => new TopLevelUnionBool { Double = Double };
+        public static implicit operator TopLevelUnionBool(UnionBoolBool UnionBoolBool) => new TopLevelUnionBool { UnionBoolBool = UnionBoolBool };
+    }
+
+    public partial struct UnionQuicktype
+    {
+        public double? Double;
+        public Quicktype? Quicktype;
+
+        public static implicit operator UnionQuicktype(double Double) => new UnionQuicktype { Double = Double };
+        public static implicit operator UnionQuicktype(Quicktype Quicktype) => new UnionQuicktype { Quicktype = Quicktype };
+    }
+
+    public partial struct UnionRaise
+    {
+        public double? Double;
+        public Raise? Raise;
+
+        public static implicit operator UnionRaise(double Double) => new UnionRaise { Double = Double };
+        public static implicit operator UnionRaise(Raise Raise) => new UnionRaise { Raise = Raise };
+    }
+
+    public partial struct UnionRange
+    {
+        public double? Double;
+        public Range? Range;
+
+        public static implicit operator UnionRange(double Double) => new UnionRange { Double = Double };
+        public static implicit operator UnionRange(Range Range) => new UnionRange { Range = Range };
+    }
+
+    public partial struct UnionReadonly
+    {
+        public double? Double;
+        public Readonly? Readonly;
+
+        public static implicit operator UnionReadonly(double Double) => new UnionReadonly { Double = Double };
+        public static implicit operator UnionReadonly(Readonly Readonly) => new UnionReadonly { Readonly = Readonly };
+    }
+
+    public partial struct UnionRef
+    {
+        public double? Double;
+        public Ref? Ref;
+
+        public static implicit operator UnionRef(double Double) => new UnionRef { Double = Double };
+        public static implicit operator UnionRef(Ref Ref) => new UnionRef { Ref = Ref };
+    }
+
+    public partial struct UnionRegister
+    {
+        public double? Double;
+        public Register? Register;
+
+        public static implicit operator UnionRegister(double Double) => new UnionRegister { Double = Double };
+        public static implicit operator UnionRegister(Register Register) => new UnionRegister { Register = Register };
+    }
+
+    public partial struct UnionReinterpretCast
+    {
+        public double? Double;
+        public ReinterpretCast? ReinterpretCast;
+
+        public static implicit operator UnionReinterpretCast(double Double) => new UnionReinterpretCast { Double = Double };
+        public static implicit operator UnionReinterpretCast(ReinterpretCast ReinterpretCast) => new UnionReinterpretCast { ReinterpretCast = ReinterpretCast };
+    }
+
+    public partial struct UnionRepeat
+    {
+        public double? Double;
+        public Repeat? Repeat;
+
+        public static implicit operator UnionRepeat(double Double) => new UnionRepeat { Double = Double };
+        public static implicit operator UnionRepeat(Repeat Repeat) => new UnionRepeat { Repeat = Repeat };
+    }
+
+    public partial struct UnionRequire
+    {
+        public double? Double;
+        public Require? Require;
+
+        public static implicit operator UnionRequire(double Double) => new UnionRequire { Double = Double };
+        public static implicit operator UnionRequire(Require Require) => new UnionRequire { Require = Require };
+    }
+
+    public partial struct UnionRequires
+    {
+        public double? Double;
+        public Requires? Requires;
+
+        public static implicit operator UnionRequires(double Double) => new UnionRequires { Double = Double };
+        public static implicit operator UnionRequires(Requires Requires) => new UnionRequires { Requires = Requires };
+    }
+
+    public partial struct UnionRestrict
+    {
+        public double? Double;
+        public Restrict? Restrict;
+
+        public static implicit operator UnionRestrict(double Double) => new UnionRestrict { Double = Double };
+        public static implicit operator UnionRestrict(Restrict Restrict) => new UnionRestrict { Restrict = Restrict };
+    }
+
+    public partial struct UnionRetain
+    {
+        public double? Double;
+        public Retain? Retain;
+
+        public static implicit operator UnionRetain(double Double) => new UnionRetain { Double = Double };
+        public static implicit operator UnionRetain(Retain Retain) => new UnionRetain { Retain = Retain };
+    }
+
+    public partial struct UnionRethrows
+    {
+        public double? Double;
+        public Rethrows? Rethrows;
+
+        public static implicit operator UnionRethrows(double Double) => new UnionRethrows { Double = Double };
+        public static implicit operator UnionRethrows(Rethrows Rethrows) => new UnionRethrows { Rethrows = Rethrows };
+    }
+
+    public partial struct UnionReturn
+    {
+        public double? Double;
+        public Return? Return;
+
+        public static implicit operator UnionReturn(double Double) => new UnionReturn { Double = Double };
+        public static implicit operator UnionReturn(Return Return) => new UnionReturn { Return = Return };
+    }
+
+    public partial struct UnionRight
+    {
+        public double? Double;
+        public Right? Right;
+
+        public static implicit operator UnionRight(double Double) => new UnionRight { Double = Double };
+        public static implicit operator UnionRight(Right Right) => new UnionRight { Right = Right };
+    }
+
+    public partial struct UnionSbyte
+    {
+        public double? Double;
+        public Sbyte? Sbyte;
+
+        public static implicit operator UnionSbyte(double Double) => new UnionSbyte { Double = Double };
+        public static implicit operator UnionSbyte(Sbyte Sbyte) => new UnionSbyte { Sbyte = Sbyte };
+    }
+
+    public partial struct UnionSealed
+    {
+        public double? Double;
+        public Sealed? Sealed;
+
+        public static implicit operator UnionSealed(double Double) => new UnionSealed { Double = Double };
+        public static implicit operator UnionSealed(Sealed Sealed) => new UnionSealed { Sealed = Sealed };
+    }
+
+    public partial struct UnionSel
+    {
+        public double? Double;
+        public Sel? Sel;
+
+        public static implicit operator UnionSel(double Double) => new UnionSel { Double = Double };
+        public static implicit operator UnionSel(Sel Sel) => new UnionSel { Sel = Sel };
+    }
+
+    public partial struct UnionSelect
+    {
+        public double? Double;
+        public Select? Select;
+
+        public static implicit operator UnionSelect(double Double) => new UnionSelect { Double = Double };
+        public static implicit operator UnionSelect(Select Select) => new UnionSelect { Select = Select };
+    }
+
+    public partial struct UnionSelf
+    {
+        public double? Double;
+        public Self? Self;
+
+        public static implicit operator UnionSelf(double Double) => new UnionSelf { Double = Double };
+        public static implicit operator UnionSelf(Self Self) => new UnionSelf { Self = Self };
+    }
+
+    public partial struct UnionSerialize
+    {
+        public double? Double;
+        public SerializeClass? SerializeClass;
+
+        public static implicit operator UnionSerialize(double Double) => new UnionSerialize { Double = Double };
+        public static implicit operator UnionSerialize(SerializeClass SerializeClass) => new UnionSerialize { SerializeClass = SerializeClass };
+    }
+
+    public partial struct UnionSet
+    {
+        public double? Double;
+        public Set? Set;
+
+        public static implicit operator UnionSet(double Double) => new UnionSet { Double = Double };
+        public static implicit operator UnionSet(Set Set) => new UnionSet { Set = Set };
+    }
+
+    public partial struct UnionShort
+    {
+        public double? Double;
+        public Short? Short;
+
+        public static implicit operator UnionShort(double Double) => new UnionShort { Double = Double };
+        public static implicit operator UnionShort(Short Short) => new UnionShort { Short = Short };
+    }
+
+    public partial struct UnionSigned
+    {
+        public double? Double;
+        public Signed? Signed;
+
+        public static implicit operator UnionSigned(double Double) => new UnionSigned { Double = Double };
+        public static implicit operator UnionSigned(Signed Signed) => new UnionSigned { Signed = Signed };
+    }
+
+    public partial struct UnionSizeof
+    {
+        public double? Double;
+        public Sizeof? Sizeof;
+
+        public static implicit operator UnionSizeof(double Double) => new UnionSizeof { Double = Double };
+        public static implicit operator UnionSizeof(Sizeof Sizeof) => new UnionSizeof { Sizeof = Sizeof };
+    }
+
+    public partial struct UnionStackalloc
+    {
+        public double? Double;
+        public Stackalloc? Stackalloc;
+
+        public static implicit operator UnionStackalloc(double Double) => new UnionStackalloc { Double = Double };
+        public static implicit operator UnionStackalloc(Stackalloc Stackalloc) => new UnionStackalloc { Stackalloc = Stackalloc };
+    }
+
+    public partial struct UnionStatic
+    {
+        public double? Double;
+        public Static? Static;
+
+        public static implicit operator UnionStatic(double Double) => new UnionStatic { Double = Double };
+        public static implicit operator UnionStatic(Static Static) => new UnionStatic { Static = Static };
+    }
+
+    public partial struct UnionStaticAssert
+    {
+        public double? Double;
+        public StaticAssert? StaticAssert;
+
+        public static implicit operator UnionStaticAssert(double Double) => new UnionStaticAssert { Double = Double };
+        public static implicit operator UnionStaticAssert(StaticAssert StaticAssert) => new UnionStaticAssert { StaticAssert = StaticAssert };
+    }
+
+    public partial struct UnionStaticCast
+    {
+        public double? Double;
+        public StaticCast? StaticCast;
+
+        public static implicit operator UnionStaticCast(double Double) => new UnionStaticCast { Double = Double };
+        public static implicit operator UnionStaticCast(StaticCast StaticCast) => new UnionStaticCast { StaticCast = StaticCast };
+    }
+
+    public partial struct UnionStrictfp
+    {
+        public double? Double;
+        public Strictfp? Strictfp;
+
+        public static implicit operator UnionStrictfp(double Double) => new UnionStrictfp { Double = Double };
+        public static implicit operator UnionStrictfp(Strictfp Strictfp) => new UnionStrictfp { Strictfp = Strictfp };
+    }
+
+    public partial struct UnionString
+    {
+        public double? Double;
+        public String? String;
+
+        public static implicit operator UnionString(double Double) => new UnionString { Double = Double };
+        public static implicit operator UnionString(String String) => new UnionString { String = String };
+    }
+
+    public partial struct UnionStruct
+    {
+        public double? Double;
+        public Struct? Struct;
+
+        public static implicit operator UnionStruct(double Double) => new UnionStruct { Double = Double };
+        public static implicit operator UnionStruct(Struct Struct) => new UnionStruct { Struct = Struct };
+    }
+
+    public partial struct UnionSubscript
+    {
+        public double? Double;
+        public Subscript? Subscript;
+
+        public static implicit operator UnionSubscript(double Double) => new UnionSubscript { Double = Double };
+        public static implicit operator UnionSubscript(Subscript Subscript) => new UnionSubscript { Subscript = Subscript };
+    }
+
+    public partial struct UnionSuper
+    {
+        public double? Double;
+        public Super? Super;
+
+        public static implicit operator UnionSuper(double Double) => new UnionSuper { Double = Double };
+        public static implicit operator UnionSuper(Super Super) => new UnionSuper { Super = Super };
+    }
+
+    public partial struct UnionSwitch
+    {
+        public double? Double;
+        public Switch? Switch;
+
+        public static implicit operator UnionSwitch(double Double) => new UnionSwitch { Double = Double };
+        public static implicit operator UnionSwitch(Switch Switch) => new UnionSwitch { Switch = Switch };
+    }
+
+    public partial struct UnionSymbol
+    {
+        public double? Double;
+        public Symbol? Symbol;
+
+        public static implicit operator UnionSymbol(double Double) => new UnionSymbol { Double = Double };
+        public static implicit operator UnionSymbol(Symbol Symbol) => new UnionSymbol { Symbol = Symbol };
+    }
+
+    public partial struct UnionSynchronized
+    {
+        public double? Double;
+        public Synchronized? Synchronized;
+
+        public static implicit operator UnionSynchronized(double Double) => new UnionSynchronized { Double = Double };
+        public static implicit operator UnionSynchronized(Synchronized Synchronized) => new UnionSynchronized { Synchronized = Synchronized };
+    }
+
+    public partial struct UnionSystem
+    {
+        public double? Double;
+        public SystemClass? SystemClass;
+
+        public static implicit operator UnionSystem(double Double) => new UnionSystem { Double = Double };
+        public static implicit operator UnionSystem(SystemClass SystemClass) => new UnionSystem { SystemClass = SystemClass };
+    }
+
+    public partial struct UnionTemplate
+    {
+        public double? Double;
+        public Template? Template;
+
+        public static implicit operator UnionTemplate(double Double) => new UnionTemplate { Double = Double };
+        public static implicit operator UnionTemplate(Template Template) => new UnionTemplate { Template = Template };
+    }
+
+    public partial struct UnionThen
+    {
+        public double? Double;
+        public Then? Then;
+
+        public static implicit operator UnionThen(double Double) => new UnionThen { Double = Double };
+        public static implicit operator UnionThen(Then Then) => new UnionThen { Then = Then };
+    }
+
+    public partial struct UnionThis
+    {
+        public double? Double;
+        public This? This;
+
+        public static implicit operator UnionThis(double Double) => new UnionThis { Double = Double };
+        public static implicit operator UnionThis(This This) => new UnionThis { This = This };
+    }
+
+    public partial struct UnionThreadLocal
+    {
+        public double? Double;
+        public ThreadLocal? ThreadLocal;
+
+        public static implicit operator UnionThreadLocal(double Double) => new UnionThreadLocal { Double = Double };
+        public static implicit operator UnionThreadLocal(ThreadLocal ThreadLocal) => new UnionThreadLocal { ThreadLocal = ThreadLocal };
+    }
+
+    public partial struct UnionThrow
+    {
+        public double? Double;
+        public Throw? Throw;
+
+        public static implicit operator UnionThrow(double Double) => new UnionThrow { Double = Double };
+        public static implicit operator UnionThrow(Throw Throw) => new UnionThrow { Throw = Throw };
+    }
+
+    public partial struct UnionThrows
+    {
+        public double? Double;
+        public Throws? Throws;
+
+        public static implicit operator UnionThrows(double Double) => new UnionThrows { Double = Double };
+        public static implicit operator UnionThrows(Throws Throws) => new UnionThrows { Throws = Throws };
+    }
+
+    public partial struct UnionAnyUnion
+    {
+        public AnyClass? AnyClass;
+        public double? Double;
+
+        public static implicit operator UnionAnyUnion(AnyClass AnyClass) => new UnionAnyUnion { AnyClass = AnyClass };
+        public static implicit operator UnionAnyUnion(double Double) => new UnionAnyUnion { Double = Double };
+    }
+
+    public partial struct UnionBoolUnion
+    {
+        public BoolClass? BoolClass;
+        public double? Double;
+
+        public static implicit operator UnionBoolUnion(BoolClass BoolClass) => new UnionBoolUnion { BoolClass = BoolClass };
+        public static implicit operator UnionBoolUnion(double Double) => new UnionBoolUnion { Double = Double };
+    }
+
+    public partial struct UnionClassUnion
+    {
+        public ClassClass? ClassClass;
+        public double? Double;
+
+        public static implicit operator UnionClassUnion(ClassClass ClassClass) => new UnionClassUnion { ClassClass = ClassClass };
+        public static implicit operator UnionClassUnion(double Double) => new UnionClassUnion { Double = Double };
+    }
+
+    public partial struct UnionFalseUnion
+    {
+        public double? Double;
+        public FalseClass? FalseClass;
+
+        public static implicit operator UnionFalseUnion(double Double) => new UnionFalseUnion { Double = Double };
+        public static implicit operator UnionFalseUnion(FalseClass FalseClass) => new UnionFalseUnion { FalseClass = FalseClass };
+    }
+
+    public partial struct UnionFromJson
+    {
+        public double? Double;
+        public FromJsonClass? FromJsonClass;
+
+        public static implicit operator UnionFromJson(double Double) => new UnionFromJson { Double = Double };
+        public static implicit operator UnionFromJson(FromJsonClass FromJsonClass) => new UnionFromJson { FromJsonClass = FromJsonClass };
+    }
+
+    public partial struct UnionNoneUnion
+    {
+        public double? Double;
+        public NoneClass? NoneClass;
+
+        public static implicit operator UnionNoneUnion(double Double) => new UnionNoneUnion { Double = Double };
+        public static implicit operator UnionNoneUnion(NoneClass NoneClass) => new UnionNoneUnion { NoneClass = NoneClass };
+    }
+
+    public partial struct UnionNullUnion
+    {
+        public double? Double;
+        public NullClass? NullClass;
+
+        public static implicit operator UnionNullUnion(double Double) => new UnionNullUnion { Double = Double };
+        public static implicit operator UnionNullUnion(NullClass NullClass) => new UnionNullUnion { NullClass = NullClass };
+    }
+
+    public partial struct UnionProtocolUnion
+    {
+        public double? Double;
+        public ProtocolClass? ProtocolClass;
+
+        public static implicit operator UnionProtocolUnion(double Double) => new UnionProtocolUnion { Double = Double };
+        public static implicit operator UnionProtocolUnion(ProtocolClass ProtocolClass) => new UnionProtocolUnion { ProtocolClass = ProtocolClass };
+    }
+
+    public partial struct UnionRequired
+    {
+        public double? Double;
+        public RequiredClass? RequiredClass;
+
+        public static implicit operator UnionRequired(double Double) => new UnionRequired { Double = Double };
+        public static implicit operator UnionRequired(RequiredClass RequiredClass) => new UnionRequired { RequiredClass = RequiredClass };
+    }
+
+    public partial struct UnionSelfUnion
+    {
+        public double? Double;
+        public SelfClass? SelfClass;
+
+        public static implicit operator UnionSelfUnion(double Double) => new UnionSelfUnion { Double = Double };
+        public static implicit operator UnionSelfUnion(SelfClass SelfClass) => new UnionSelfUnion { SelfClass = SelfClass };
+    }
+
+    public partial struct UnionToJson
+    {
+        public double? Double;
+        public ToJson? ToJson;
+
+        public static implicit operator UnionToJson(double Double) => new UnionToJson { Double = Double };
+        public static implicit operator UnionToJson(ToJson ToJson) => new UnionToJson { ToJson = ToJson };
+    }
+
+    public partial struct UnionTopLevel
+    {
+        public double? Double;
+        public TopLevelClass? TopLevelClass;
+
+        public static implicit operator UnionTopLevel(double Double) => new UnionTopLevel { Double = Double };
+        public static implicit operator UnionTopLevel(TopLevelClass TopLevelClass) => new UnionTopLevel { TopLevelClass = TopLevelClass };
+    }
+
+    public partial struct UnionTrueUnion
+    {
+        public double? Double;
+        public TrueClass? TrueClass;
+
+        public static implicit operator UnionTrueUnion(double Double) => new UnionTrueUnion { Double = Double };
+        public static implicit operator UnionTrueUnion(TrueClass TrueClass) => new UnionTrueUnion { TrueClass = TrueClass };
+    }
+
+    public partial struct UnionTypeUnion
+    {
+        public double? Double;
+        public UnionTypeType? UnionTypeType;
+
+        public static implicit operator UnionTypeUnion(double Double) => new UnionTypeUnion { Double = Double };
+        public static implicit operator UnionTypeUnion(UnionTypeType UnionTypeType) => new UnionTypeUnion { UnionTypeType = UnionTypeType };
+    }
+
+    public partial struct UnionTransient
+    {
+        public double? Double;
+        public Transient? Transient;
+
+        public static implicit operator UnionTransient(double Double) => new UnionTransient { Double = Double };
+        public static implicit operator UnionTransient(Transient Transient) => new UnionTransient { Transient = Transient };
+    }
+
+    public partial struct UnionTrue
+    {
+        public double? Double;
+        public True? True;
+
+        public static implicit operator UnionTrue(double Double) => new UnionTrue { Double = Double };
+        public static implicit operator UnionTrue(True True) => new UnionTrue { True = True };
+    }
+
+    public partial struct UnionTry
+    {
+        public double? Double;
+        public Try? Try;
+
+        public static implicit operator UnionTry(double Double) => new UnionTry { Double = Double };
+        public static implicit operator UnionTry(Try Try) => new UnionTry { Try = Try };
+    }
+
+    public partial struct UnionType
+    {
+        public double? Double;
+        public TypeClass? TypeClass;
+
+        public static implicit operator UnionType(double Double) => new UnionType { Double = Double };
+        public static implicit operator UnionType(TypeClass TypeClass) => new UnionType { TypeClass = TypeClass };
+    }
+
+    public partial struct UnionTypealias
+    {
+        public double? Double;
+        public Typealias? Typealias;
+
+        public static implicit operator UnionTypealias(double Double) => new UnionTypealias { Double = Double };
+        public static implicit operator UnionTypealias(Typealias Typealias) => new UnionTypealias { Typealias = Typealias };
+    }
+
+    public partial struct UnionTypedef
+    {
+        public double? Double;
+        public Typedef? Typedef;
+
+        public static implicit operator UnionTypedef(double Double) => new UnionTypedef { Double = Double };
+        public static implicit operator UnionTypedef(Typedef Typedef) => new UnionTypedef { Typedef = Typedef };
+    }
+
+    public partial struct UnionTypeid
+    {
+        public double? Double;
+        public Typeid? Typeid;
+
+        public static implicit operator UnionTypeid(double Double) => new UnionTypeid { Double = Double };
+        public static implicit operator UnionTypeid(Typeid Typeid) => new UnionTypeid { Typeid = Typeid };
+    }
+
+    public partial struct UnionTypename
+    {
+        public double? Double;
+        public Typename? Typename;
+
+        public static implicit operator UnionTypename(double Double) => new UnionTypename { Double = Double };
+        public static implicit operator UnionTypename(Typename Typename) => new UnionTypename { Typename = Typename };
+    }
+
+    public partial struct UnionTypeof
+    {
+        public double? Double;
+        public Typeof? Typeof;
+
+        public static implicit operator UnionTypeof(double Double) => new UnionTypeof { Double = Double };
+        public static implicit operator UnionTypeof(Typeof Typeof) => new UnionTypeof { Typeof = Typeof };
+    }
+
+    public partial struct UnionUint
+    {
+        public double? Double;
+        public Uint? Uint;
+
+        public static implicit operator UnionUint(double Double) => new UnionUint { Double = Double };
+        public static implicit operator UnionUint(Uint Uint) => new UnionUint { Uint = Uint };
+    }
+
+    public partial struct UnionUlong
+    {
+        public double? Double;
+        public Ulong? Ulong;
+
+        public static implicit operator UnionUlong(double Double) => new UnionUlong { Double = Double };
+        public static implicit operator UnionUlong(Ulong Ulong) => new UnionUlong { Ulong = Ulong };
+    }
+
+    public partial struct UnionUnchecked
+    {
+        public double? Double;
+        public Unchecked? Unchecked;
+
+        public static implicit operator UnionUnchecked(double Double) => new UnionUnchecked { Double = Double };
+        public static implicit operator UnionUnchecked(Unchecked Unchecked) => new UnionUnchecked { Unchecked = Unchecked };
+    }
+
+    public partial struct UnionUndefined
+    {
+        public double? Double;
+        public Undefined? Undefined;
+
+        public static implicit operator UnionUndefined(double Double) => new UnionUndefined { Double = Double };
+        public static implicit operator UnionUndefined(Undefined Undefined) => new UnionUndefined { Undefined = Undefined };
+    }
+
+    public partial struct UnionUnionUnion
+    {
+        public double? Double;
+        public Union? Union;
+
+        public static implicit operator UnionUnionUnion(double Double) => new UnionUnionUnion { Double = Double };
+        public static implicit operator UnionUnionUnion(Union Union) => new UnionUnionUnion { Union = Union };
+    }
+
+    public partial struct UnionUnowned
+    {
+        public double? Double;
+        public Unowned? Unowned;
+
+        public static implicit operator UnionUnowned(double Double) => new UnionUnowned { Double = Double };
+        public static implicit operator UnionUnowned(Unowned Unowned) => new UnionUnowned { Unowned = Unowned };
+    }
+
+    public partial struct UnionUnsafe
+    {
+        public double? Double;
+        public Unsafe? Unsafe;
+
+        public static implicit operator UnionUnsafe(double Double) => new UnionUnsafe { Double = Double };
+        public static implicit operator UnionUnsafe(Unsafe Unsafe) => new UnionUnsafe { Unsafe = Unsafe };
+    }
+
+    public partial struct UnionUnsigned
+    {
+        public double? Double;
+        public Unsigned? Unsigned;
+
+        public static implicit operator UnionUnsigned(double Double) => new UnionUnsigned { Double = Double };
+        public static implicit operator UnionUnsigned(Unsigned Unsigned) => new UnionUnsigned { Unsigned = Unsigned };
+    }
+
+    public partial struct UnionUshort
+    {
+        public double? Double;
+        public Ushort? Ushort;
+
+        public static implicit operator UnionUshort(double Double) => new UnionUshort { Double = Double };
+        public static implicit operator UnionUshort(Ushort Ushort) => new UnionUshort { Ushort = Ushort };
+    }
+
+    public partial struct UnionUsing
+    {
+        public double? Double;
+        public Using? Using;
+
+        public static implicit operator UnionUsing(double Double) => new UnionUsing { Double = Double };
+        public static implicit operator UnionUsing(Using Using) => new UnionUsing { Using = Using };
+    }
+
+    public partial struct UnionVar
+    {
+        public double? Double;
+        public Var? Var;
+
+        public static implicit operator UnionVar(double Double) => new UnionVar { Double = Double };
+        public static implicit operator UnionVar(Var Var) => new UnionVar { Var = Var };
+    }
+
+    public partial struct UnionVirtual
+    {
+        public double? Double;
+        public Virtual? Virtual;
+
+        public static implicit operator UnionVirtual(double Double) => new UnionVirtual { Double = Double };
+        public static implicit operator UnionVirtual(Virtual Virtual) => new UnionVirtual { Virtual = Virtual };
+    }
+
+    public partial struct UnionVoid
+    {
+        public double? Double;
+        public Void? Void;
+
+        public static implicit operator UnionVoid(double Double) => new UnionVoid { Double = Double };
+        public static implicit operator UnionVoid(Void Void) => new UnionVoid { Void = Void };
+    }
+
+    public partial struct UnionVolatile
+    {
+        public double? Double;
+        public Volatile? Volatile;
+
+        public static implicit operator UnionVolatile(double Double) => new UnionVolatile { Double = Double };
+        public static implicit operator UnionVolatile(Volatile Volatile) => new UnionVolatile { Volatile = Volatile };
+    }
+
+    public partial struct UnionWcharT
+    {
+        public double? Double;
+        public WcharT? WcharT;
+
+        public static implicit operator UnionWcharT(double Double) => new UnionWcharT { Double = Double };
+        public static implicit operator UnionWcharT(WcharT WcharT) => new UnionWcharT { WcharT = WcharT };
+    }
+
+    public partial struct UnionWeak
+    {
+        public double? Double;
+        public Weak? Weak;
+
+        public static implicit operator UnionWeak(double Double) => new UnionWeak { Double = Double };
+        public static implicit operator UnionWeak(Weak Weak) => new UnionWeak { Weak = Weak };
+    }
+
+    public partial struct UnionWhere
+    {
+        public double? Double;
+        public Where? Where;
+
+        public static implicit operator UnionWhere(double Double) => new UnionWhere { Double = Double };
+        public static implicit operator UnionWhere(Where Where) => new UnionWhere { Where = Where };
+    }
+
+    public partial struct UnionWhile
+    {
+        public double? Double;
+        public While? While;
+
+        public static implicit operator UnionWhile(double Double) => new UnionWhile { Double = Double };
+        public static implicit operator UnionWhile(While While) => new UnionWhile { While = While };
+    }
+
+    public partial struct UnionWillSet
+    {
+        public double? Double;
+        public WillSet? WillSet;
+
+        public static implicit operator UnionWillSet(double Double) => new UnionWillSet { Double = Double };
+        public static implicit operator UnionWillSet(WillSet WillSet) => new UnionWillSet { WillSet = WillSet };
+    }
+
+    public partial struct UnionWith
+    {
+        public double? Double;
+        public With? With;
+
+        public static implicit operator UnionWith(double Double) => new UnionWith { Double = Double };
+        public static implicit operator UnionWith(With With) => new UnionWith { With = With };
+    }
+
+    public partial struct UnionXor
+    {
+        public double? Double;
+        public Xor? Xor;
+
+        public static implicit operator UnionXor(double Double) => new UnionXor { Double = Double };
+        public static implicit operator UnionXor(Xor Xor) => new UnionXor { Xor = Xor };
+    }
+
+    public partial struct UnionXorEq
+    {
+        public double? Double;
+        public XorEq? XorEq;
+
+        public static implicit operator UnionXorEq(double Double) => new UnionXorEq { Double = Double };
+        public static implicit operator UnionXorEq(XorEq XorEq) => new UnionXorEq { XorEq = XorEq };
+    }
+
+    public partial struct UnionYes
+    {
+        public double? Double;
+        public Yes? Yes;
+
+        public static implicit operator UnionYes(double Double) => new UnionYes { Double = Double };
+        public static implicit operator UnionYes(Yes Yes) => new UnionYes { Yes = Yes };
+    }
+
+    public partial struct UnionYield
+    {
+        public double? Double;
+        public Yield? Yield;
+
+        public static implicit operator UnionYield(double Double) => new UnionYield { Double = Double };
+        public static implicit operator UnionYield(Yield Yield) => new UnionYield { Yield = Yield };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                UnionAnyConverter.Singleton,
+                UnionBoolConverter.Singleton,
+                UnionClassConverter.Singleton,
+                UnionFalseConverter.Singleton,
+                UnionImpConverter.Singleton,
+                UnionNoConverter.Singleton,
+                UnionNsStringConverter.Singleton,
+                UnionNullConverter.Singleton,
+                UnionNoneConverter.Singleton,
+                UnionProtocolConverter.Singleton,
+                UnionSelConverter.Singleton,
+                UnionSelfConverter.Singleton,
+                UnionTrueConverter.Singleton,
+                UnionTypeConverter.Singleton,
+                UnionYesConverter.Singleton,
+                UnionUnionConverter.Singleton,
+                UnionBoolUnionConverter.Singleton,
+                UnionComplexConverter.Singleton,
+                UnionImagineryConverter.Singleton,
+                UnionAbstractConverter.Singleton,
+                UnionAlignasConverter.Singleton,
+                UnionAlignofConverter.Singleton,
+                UnionAndConverter.Singleton,
+                UnionAndEqConverter.Singleton,
+                UnionAnyUnionConverter.Singleton,
+                UnionArrayConverter.Singleton,
+                UnionAsConverter.Singleton,
+                UnionAsmConverter.Singleton,
+                UnionAssertConverter.Singleton,
+                UnionAssociatedtypeConverter.Singleton,
+                UnionAssociativityConverter.Singleton,
+                UnionAsyncConverter.Singleton,
+                UnionAtomicConverter.Singleton,
+                UnionAtomicCancelConverter.Singleton,
+                UnionAtomicCommitConverter.Singleton,
+                UnionAtomicNoexceptConverter.Singleton,
+                UnionAutoConverter.Singleton,
+                UnionAwaitConverter.Singleton,
+                UnionBaseConverter.Singleton,
+                UnionBitandConverter.Singleton,
+                UnionBitorConverter.Singleton,
+                TopLevelUnionBoolConverter.Singleton,
+                UnionBooleanConverter.Singleton,
+                UnionBreakConverter.Singleton,
+                UnionBycopyConverter.Singleton,
+                UnionByrefConverter.Singleton,
+                UnionByteConverter.Singleton,
+                UnionCaseConverter.Singleton,
+                UnionCatchConverter.Singleton,
+                UnionChanConverter.Singleton,
+                UnionCharConverter.Singleton,
+                UnionChar16TConverter.Singleton,
+                UnionChar32TConverter.Singleton,
+                UnionCheckedConverter.Singleton,
+                UnionClassUnionConverter.Singleton,
+                UnionCoAwaitConverter.Singleton,
+                UnionCoReturnConverter.Singleton,
+                UnionCoYieldConverter.Singleton,
+                UnionComplConverter.Singleton,
+                UnionConceptConverter.Singleton,
+                UnionConsoleConverter.Singleton,
+                UnionConstConverter.Singleton,
+                UnionConstCastConverter.Singleton,
+                UnionConstexprConverter.Singleton,
+                UnionConstructorConverter.Singleton,
+                UnionContinueConverter.Singleton,
+                UnionConvenienceConverter.Singleton,
+                UnionConvertConverter.Singleton,
+                UnionConverterConverter.Singleton,
+                UnionDateConverter.Singleton,
+                UnionDateParseHandlingConverter.Singleton,
+                UnionDebuggerConverter.Singleton,
+                UnionDecimalConverter.Singleton,
+                UnionDeclareConverter.Singleton,
+                UnionDecltypeConverter.Singleton,
+                UnionDecodeStringConverter.Singleton,
+                UnionDefConverter.Singleton,
+                UnionDefaultConverter.Singleton,
+                UnionDeferConverter.Singleton,
+                UnionDeinitConverter.Singleton,
+                UnionDelConverter.Singleton,
+                UnionDelegateConverter.Singleton,
+                UnionDeleteConverter.Singleton,
+                UnionDictConverter.Singleton,
+                UnionDictionaryConverter.Singleton,
+                UnionDidSetConverter.Singleton,
+                UnionDoConverter.Singleton,
+                UnionDoubleConverter.Singleton,
+                UnionDynamicConverter.Singleton,
+                UnionDynamicCastConverter.Singleton,
+                UnionElifConverter.Singleton,
+                UnionElseConverter.Singleton,
+                UnionEncodeQuickTypeConverter.Singleton,
+                UnionEnumConverter.Singleton,
+                UnionEventConverter.Singleton,
+                UnionExceptConverter.Singleton,
+                UnionExceptionConverter.Singleton,
+                UnionExplicitConverter.Singleton,
+                UnionExportConverter.Singleton,
+                UnionExposingConverter.Singleton,
+                UnionExtendsConverter.Singleton,
+                UnionExtensionConverter.Singleton,
+                UnionExternConverter.Singleton,
+                UnionFallthroughConverter.Singleton,
+                UnionFalseUnionConverter.Singleton,
+                UnionFileprivateConverter.Singleton,
+                UnionFinalConverter.Singleton,
+                UnionFinallyConverter.Singleton,
+                UnionFixedConverter.Singleton,
+                UnionFloatConverter.Singleton,
+                UnionForConverter.Singleton,
+                UnionForeachConverter.Singleton,
+                UnionFriendConverter.Singleton,
+                UnionFromConverter.Singleton,
+                UnionFromJsonConverter.Singleton,
+                UnionFuncConverter.Singleton,
+                UnionFunctionConverter.Singleton,
+                UnionGetConverter.Singleton,
+                UnionGlobalConverter.Singleton,
+                UnionGoConverter.Singleton,
+                UnionGotoConverter.Singleton,
+                UnionGuardConverter.Singleton,
+                UnionHasOwnPropertyConverter.Singleton,
+                UnionIdConverter.Singleton,
+                UnionIfConverter.Singleton,
+                UnionImplementsConverter.Singleton,
+                UnionImplicitConverter.Singleton,
+                UnionImportConverter.Singleton,
+                UnionInConverter.Singleton,
+                UnionIndirectConverter.Singleton,
+                UnionInfixConverter.Singleton,
+                UnionInitConverter.Singleton,
+                UnionInlineConverter.Singleton,
+                UnionInoutConverter.Singleton,
+                UnionInstanceofConverter.Singleton,
+                UnionIntConverter.Singleton,
+                UnionInterfaceConverter.Singleton,
+                UnionInternalConverter.Singleton,
+                UnionIsConverter.Singleton,
+                UnionIterableConverter.Singleton,
+                UnionJdecConverter.Singleton,
+                UnionJencConverter.Singleton,
+                UnionJpipeConverter.Singleton,
+                PurpleUnionJsonConverter.Singleton,
+                UnionJsonConverterConverter.Singleton,
+                UnionJsonSerializerConverter.Singleton,
+                UnionJsonTokenConverter.Singleton,
+                UnionJsonWriterConverter.Singleton,
+                UnionLambdaConverter.Singleton,
+                UnionLazyConverter.Singleton,
+                UnionLeftConverter.Singleton,
+                UnionLetConverter.Singleton,
+                UnionListConverter.Singleton,
+                UnionLockConverter.Singleton,
+                UnionLongConverter.Singleton,
+                UnionMapConverter.Singleton,
+                UnionMetadataPropertyHandlingConverter.Singleton,
+                UnionModuleConverter.Singleton,
+                UnionMutableConverter.Singleton,
+                UnionMutatingConverter.Singleton,
+                UnionNamespaceConverter.Singleton,
+                UnionNativeConverter.Singleton,
+                UnionNewConverter.Singleton,
+                UnionNewtonsoftConverter.Singleton,
+                UnionNilConverter.Singleton,
+                UnionNoexceptConverter.Singleton,
+                UnionNonatomicConverter.Singleton,
+                UnionNoneUnionConverter.Singleton,
+                UnionNonlocalConverter.Singleton,
+                UnionNonmutatingConverter.Singleton,
+                UnionNotConverter.Singleton,
+                UnionNotEqConverter.Singleton,
+                UnionNullUnionConverter.Singleton,
+                UnionNullptrConverter.Singleton,
+                UnionNumberConverter.Singleton,
+                UnionObjectConverter.Singleton,
+                UnionOfConverter.Singleton,
+                UnionOnewayConverter.Singleton,
+                UnionOpenConverter.Singleton,
+                UnionOperatorConverter.Singleton,
+                UnionOptionalConverter.Singleton,
+                UnionOrConverter.Singleton,
+                UnionOrEqConverter.Singleton,
+                UnionOutConverter.Singleton,
+                UnionOverrideConverter.Singleton,
+                UnionPackageConverter.Singleton,
+                UnionParamsConverter.Singleton,
+                UnionPassConverter.Singleton,
+                UnionPortConverter.Singleton,
+                UnionPostfixConverter.Singleton,
+                UnionPrecedenceConverter.Singleton,
+                UnionPrefixConverter.Singleton,
+                UnionPrintConverter.Singleton,
+                UnionPrintfConverter.Singleton,
+                UnionPrivateConverter.Singleton,
+                UnionProtectedConverter.Singleton,
+                UnionProtocolUnionConverter.Singleton,
+                UnionPublicConverter.Singleton,
+                UnionQuicktypeConverter.Singleton,
+                UnionRaiseConverter.Singleton,
+                UnionRangeConverter.Singleton,
+                UnionReadonlyConverter.Singleton,
+                UnionRefConverter.Singleton,
+                UnionRegisterConverter.Singleton,
+                UnionReinterpretCastConverter.Singleton,
+                UnionRepeatConverter.Singleton,
+                UnionRequireConverter.Singleton,
+                UnionRequiredConverter.Singleton,
+                UnionRequiresConverter.Singleton,
+                UnionRestrictConverter.Singleton,
+                UnionRetainConverter.Singleton,
+                UnionRethrowsConverter.Singleton,
+                UnionReturnConverter.Singleton,
+                UnionRightConverter.Singleton,
+                UnionSbyteConverter.Singleton,
+                UnionSealedConverter.Singleton,
+                UnionSelectConverter.Singleton,
+                UnionSelfUnionConverter.Singleton,
+                UnionSerializeConverter.Singleton,
+                UnionSetConverter.Singleton,
+                UnionShortConverter.Singleton,
+                UnionSignedConverter.Singleton,
+                UnionSizeofConverter.Singleton,
+                UnionStackallocConverter.Singleton,
+                UnionStaticConverter.Singleton,
+                UnionStaticAssertConverter.Singleton,
+                UnionStaticCastConverter.Singleton,
+                UnionStrictfpConverter.Singleton,
+                UnionStringConverter.Singleton,
+                UnionStructConverter.Singleton,
+                UnionSubscriptConverter.Singleton,
+                UnionSuperConverter.Singleton,
+                UnionSwitchConverter.Singleton,
+                UnionSymbolConverter.Singleton,
+                UnionSynchronizedConverter.Singleton,
+                UnionSystemConverter.Singleton,
+                UnionTemplateConverter.Singleton,
+                UnionThenConverter.Singleton,
+                UnionThisConverter.Singleton,
+                UnionThreadLocalConverter.Singleton,
+                UnionThrowConverter.Singleton,
+                UnionThrowsConverter.Singleton,
+                UnionToJsonConverter.Singleton,
+                UnionTopLevelConverter.Singleton,
+                UnionTransientConverter.Singleton,
+                UnionTrueUnionConverter.Singleton,
+                UnionTryConverter.Singleton,
+                UnionTypeUnionConverter.Singleton,
+                UnionTypealiasConverter.Singleton,
+                UnionTypedefConverter.Singleton,
+                UnionTypeidConverter.Singleton,
+                UnionTypenameConverter.Singleton,
+                UnionTypeofConverter.Singleton,
+                UnionUintConverter.Singleton,
+                UnionUlongConverter.Singleton,
+                UnionUncheckedConverter.Singleton,
+                UnionUndefinedConverter.Singleton,
+                UnionUnionUnionConverter.Singleton,
+                UnionUnownedConverter.Singleton,
+                UnionUnsafeConverter.Singleton,
+                UnionUnsignedConverter.Singleton,
+                UnionUshortConverter.Singleton,
+                UnionUsingConverter.Singleton,
+                UnionVarConverter.Singleton,
+                UnionVirtualConverter.Singleton,
+                UnionVoidConverter.Singleton,
+                UnionVolatileConverter.Singleton,
+                UnionWcharTConverter.Singleton,
+                UnionWeakConverter.Singleton,
+                UnionWhereConverter.Singleton,
+                UnionWhileConverter.Singleton,
+                UnionWillSetConverter.Singleton,
+                UnionWithConverter.Singleton,
+                UnionXorConverter.Singleton,
+                UnionXorEqConverter.Singleton,
+                UnionYieldConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class UnionAnyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAny) || t == typeof(UnionAny?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAny { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Any>(reader);
+                    return new UnionAny { Any = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAny");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAny)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Any != null)
+            {
+                serializer.Serialize(writer, value.Any);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAny");
+        }
+
+        public static readonly UnionAnyConverter Singleton = new UnionAnyConverter();
+    }
+
+    internal class UnionBoolConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionBool) || t == typeof(UnionBool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionBool { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Bool>(reader);
+                    return new UnionBool { Bool = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionBool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionBool)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionBool");
+        }
+
+        public static readonly UnionBoolConverter Singleton = new UnionBoolConverter();
+    }
+
+    internal class UnionClassConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionClass) || t == typeof(UnionClass?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionClass { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Class>(reader);
+                    return new UnionClass { Class = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionClass");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionClass)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Class != null)
+            {
+                serializer.Serialize(writer, value.Class);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionClass");
+        }
+
+        public static readonly UnionClassConverter Singleton = new UnionClassConverter();
+    }
+
+    internal class UnionFalseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFalse) || t == typeof(UnionFalse?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFalse { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<False>(reader);
+                    return new UnionFalse { False = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFalse");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFalse)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.False != null)
+            {
+                serializer.Serialize(writer, value.False);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFalse");
+        }
+
+        public static readonly UnionFalseConverter Singleton = new UnionFalseConverter();
+    }
+
+    internal class UnionImpConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionImp) || t == typeof(UnionImp?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionImp { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Imp>(reader);
+                    return new UnionImp { Imp = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionImp");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionImp)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Imp != null)
+            {
+                serializer.Serialize(writer, value.Imp);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionImp");
+        }
+
+        public static readonly UnionImpConverter Singleton = new UnionImpConverter();
+    }
+
+    internal class UnionNoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNo) || t == typeof(UnionNo?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNo { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<No>(reader);
+                    return new UnionNo { No = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNo)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.No != null)
+            {
+                serializer.Serialize(writer, value.No);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNo");
+        }
+
+        public static readonly UnionNoConverter Singleton = new UnionNoConverter();
+    }
+
+    internal class UnionNsStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNsString) || t == typeof(UnionNsString?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNsString { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<NsString>(reader);
+                    return new UnionNsString { NsString = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNsString");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNsString)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NsString != null)
+            {
+                serializer.Serialize(writer, value.NsString);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNsString");
+        }
+
+        public static readonly UnionNsStringConverter Singleton = new UnionNsStringConverter();
+    }
+
+    internal class UnionNullConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNull) || t == typeof(UnionNull?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNull { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Null>(reader);
+                    return new UnionNull { Null = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNull");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNull)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Null != null)
+            {
+                serializer.Serialize(writer, value.Null);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNull");
+        }
+
+        public static readonly UnionNullConverter Singleton = new UnionNullConverter();
+    }
+
+    internal class UnionNoneConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNone) || t == typeof(UnionNone?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNone { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<None>(reader);
+                    return new UnionNone { None = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNone");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNone)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.None != null)
+            {
+                serializer.Serialize(writer, value.None);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNone");
+        }
+
+        public static readonly UnionNoneConverter Singleton = new UnionNoneConverter();
+    }
+
+    internal class UnionProtocolConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionProtocol) || t == typeof(UnionProtocol?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionProtocol { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Protocol>(reader);
+                    return new UnionProtocol { Protocol = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionProtocol");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionProtocol)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Protocol != null)
+            {
+                serializer.Serialize(writer, value.Protocol);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionProtocol");
+        }
+
+        public static readonly UnionProtocolConverter Singleton = new UnionProtocolConverter();
+    }
+
+    internal class UnionSelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSel) || t == typeof(UnionSel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSel { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Sel>(reader);
+                    return new UnionSel { Sel = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSel)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Sel != null)
+            {
+                serializer.Serialize(writer, value.Sel);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSel");
+        }
+
+        public static readonly UnionSelConverter Singleton = new UnionSelConverter();
+    }
+
+    internal class UnionSelfConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSelf) || t == typeof(UnionSelf?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSelf { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Self>(reader);
+                    return new UnionSelf { Self = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSelf");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSelf)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Self != null)
+            {
+                serializer.Serialize(writer, value.Self);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSelf");
+        }
+
+        public static readonly UnionSelfConverter Singleton = new UnionSelfConverter();
+    }
+
+    internal class UnionTrueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTrue) || t == typeof(UnionTrue?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTrue { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<True>(reader);
+                    return new UnionTrue { True = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTrue");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTrue)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.True != null)
+            {
+                serializer.Serialize(writer, value.True);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTrue");
+        }
+
+        public static readonly UnionTrueConverter Singleton = new UnionTrueConverter();
+    }
+
+    internal class UnionTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionType) || t == typeof(UnionType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionType { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TypeClass>(reader);
+                    return new UnionType { TypeClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionType)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.TypeClass != null)
+            {
+                serializer.Serialize(writer, value.TypeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionType");
+        }
+
+        public static readonly UnionTypeConverter Singleton = new UnionTypeConverter();
+    }
+
+    internal class UnionYesConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionYes) || t == typeof(UnionYes?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionYes { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Yes>(reader);
+                    return new UnionYes { Yes = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionYes");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionYes)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Yes != null)
+            {
+                serializer.Serialize(writer, value.Yes);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionYes");
+        }
+
+        public static readonly UnionYesConverter Singleton = new UnionYesConverter();
+    }
+
+    internal class UnionUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUnion) || t == typeof(UnionUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Empty>(reader);
+                    return new UnionUnion { Empty = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Empty != null)
+            {
+                serializer.Serialize(writer, value.Empty);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUnion");
+        }
+
+        public static readonly UnionUnionConverter Singleton = new UnionUnionConverter();
+    }
+
+    internal class UnionBoolUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionBoolUnion) || t == typeof(UnionBoolUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionBoolUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<BoolClass>(reader);
+                    return new UnionBoolUnion { BoolClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionBoolUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionBoolUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.BoolClass != null)
+            {
+                serializer.Serialize(writer, value.BoolClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionBoolUnion");
+        }
+
+        public static readonly UnionBoolUnionConverter Singleton = new UnionBoolUnionConverter();
+    }
+
+    internal class UnionComplexConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionComplex) || t == typeof(UnionComplex?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionComplex { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Complex>(reader);
+                    return new UnionComplex { Complex = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionComplex");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionComplex)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Complex != null)
+            {
+                serializer.Serialize(writer, value.Complex);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionComplex");
+        }
+
+        public static readonly UnionComplexConverter Singleton = new UnionComplexConverter();
+    }
+
+    internal class UnionImagineryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionImaginery) || t == typeof(UnionImaginery?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionImaginery { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Imaginery>(reader);
+                    return new UnionImaginery { Imaginery = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionImaginery");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionImaginery)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Imaginery != null)
+            {
+                serializer.Serialize(writer, value.Imaginery);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionImaginery");
+        }
+
+        public static readonly UnionImagineryConverter Singleton = new UnionImagineryConverter();
+    }
+
+    internal class UnionAbstractConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAbstract) || t == typeof(UnionAbstract?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAbstract { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Abstract>(reader);
+                    return new UnionAbstract { Abstract = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAbstract");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAbstract)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Abstract != null)
+            {
+                serializer.Serialize(writer, value.Abstract);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAbstract");
+        }
+
+        public static readonly UnionAbstractConverter Singleton = new UnionAbstractConverter();
+    }
+
+    internal class UnionAlignasConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAlignas) || t == typeof(UnionAlignas?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAlignas { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Alignas>(reader);
+                    return new UnionAlignas { Alignas = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAlignas");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAlignas)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Alignas != null)
+            {
+                serializer.Serialize(writer, value.Alignas);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAlignas");
+        }
+
+        public static readonly UnionAlignasConverter Singleton = new UnionAlignasConverter();
+    }
+
+    internal class UnionAlignofConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAlignof) || t == typeof(UnionAlignof?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAlignof { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Alignof>(reader);
+                    return new UnionAlignof { Alignof = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAlignof");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAlignof)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Alignof != null)
+            {
+                serializer.Serialize(writer, value.Alignof);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAlignof");
+        }
+
+        public static readonly UnionAlignofConverter Singleton = new UnionAlignofConverter();
+    }
+
+    internal class UnionAndConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAnd) || t == typeof(UnionAnd?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAnd { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<And>(reader);
+                    return new UnionAnd { And = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAnd");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAnd)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.And != null)
+            {
+                serializer.Serialize(writer, value.And);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAnd");
+        }
+
+        public static readonly UnionAndConverter Singleton = new UnionAndConverter();
+    }
+
+    internal class UnionAndEqConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAndEq) || t == typeof(UnionAndEq?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAndEq { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AndEq>(reader);
+                    return new UnionAndEq { AndEq = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAndEq");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAndEq)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.AndEq != null)
+            {
+                serializer.Serialize(writer, value.AndEq);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAndEq");
+        }
+
+        public static readonly UnionAndEqConverter Singleton = new UnionAndEqConverter();
+    }
+
+    internal class UnionAnyUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAnyUnion) || t == typeof(UnionAnyUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAnyUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AnyClass>(reader);
+                    return new UnionAnyUnion { AnyClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAnyUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAnyUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.AnyClass != null)
+            {
+                serializer.Serialize(writer, value.AnyClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAnyUnion");
+        }
+
+        public static readonly UnionAnyUnionConverter Singleton = new UnionAnyUnionConverter();
+    }
+
+    internal class UnionArrayConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionArray) || t == typeof(UnionArray?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionArray { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Array>(reader);
+                    return new UnionArray { Array = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionArray");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionArray)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Array != null)
+            {
+                serializer.Serialize(writer, value.Array);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionArray");
+        }
+
+        public static readonly UnionArrayConverter Singleton = new UnionArrayConverter();
+    }
+
+    internal class UnionAsConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAs) || t == typeof(UnionAs?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAs { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<As>(reader);
+                    return new UnionAs { As = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAs");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAs)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.As != null)
+            {
+                serializer.Serialize(writer, value.As);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAs");
+        }
+
+        public static readonly UnionAsConverter Singleton = new UnionAsConverter();
+    }
+
+    internal class UnionAsmConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAsm) || t == typeof(UnionAsm?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAsm { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Asm>(reader);
+                    return new UnionAsm { Asm = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAsm");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAsm)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Asm != null)
+            {
+                serializer.Serialize(writer, value.Asm);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAsm");
+        }
+
+        public static readonly UnionAsmConverter Singleton = new UnionAsmConverter();
+    }
+
+    internal class UnionAssertConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAssert) || t == typeof(UnionAssert?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAssert { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Assert>(reader);
+                    return new UnionAssert { Assert = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAssert");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAssert)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Assert != null)
+            {
+                serializer.Serialize(writer, value.Assert);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAssert");
+        }
+
+        public static readonly UnionAssertConverter Singleton = new UnionAssertConverter();
+    }
+
+    internal class UnionAssociatedtypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAssociatedtype) || t == typeof(UnionAssociatedtype?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAssociatedtype { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Associatedtype>(reader);
+                    return new UnionAssociatedtype { Associatedtype = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAssociatedtype");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAssociatedtype)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Associatedtype != null)
+            {
+                serializer.Serialize(writer, value.Associatedtype);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAssociatedtype");
+        }
+
+        public static readonly UnionAssociatedtypeConverter Singleton = new UnionAssociatedtypeConverter();
+    }
+
+    internal class UnionAssociativityConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAssociativity) || t == typeof(UnionAssociativity?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAssociativity { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Associativity>(reader);
+                    return new UnionAssociativity { Associativity = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAssociativity");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAssociativity)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Associativity != null)
+            {
+                serializer.Serialize(writer, value.Associativity);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAssociativity");
+        }
+
+        public static readonly UnionAssociativityConverter Singleton = new UnionAssociativityConverter();
+    }
+
+    internal class UnionAsyncConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAsync) || t == typeof(UnionAsync?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAsync { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Async>(reader);
+                    return new UnionAsync { Async = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAsync");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAsync)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Async != null)
+            {
+                serializer.Serialize(writer, value.Async);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAsync");
+        }
+
+        public static readonly UnionAsyncConverter Singleton = new UnionAsyncConverter();
+    }
+
+    internal class UnionAtomicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAtomic) || t == typeof(UnionAtomic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAtomic { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Atomic>(reader);
+                    return new UnionAtomic { Atomic = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAtomic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAtomic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Atomic != null)
+            {
+                serializer.Serialize(writer, value.Atomic);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAtomic");
+        }
+
+        public static readonly UnionAtomicConverter Singleton = new UnionAtomicConverter();
+    }
+
+    internal class UnionAtomicCancelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAtomicCancel) || t == typeof(UnionAtomicCancel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAtomicCancel { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AtomicCancel>(reader);
+                    return new UnionAtomicCancel { AtomicCancel = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAtomicCancel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAtomicCancel)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.AtomicCancel != null)
+            {
+                serializer.Serialize(writer, value.AtomicCancel);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAtomicCancel");
+        }
+
+        public static readonly UnionAtomicCancelConverter Singleton = new UnionAtomicCancelConverter();
+    }
+
+    internal class UnionAtomicCommitConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAtomicCommit) || t == typeof(UnionAtomicCommit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAtomicCommit { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AtomicCommit>(reader);
+                    return new UnionAtomicCommit { AtomicCommit = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAtomicCommit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAtomicCommit)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.AtomicCommit != null)
+            {
+                serializer.Serialize(writer, value.AtomicCommit);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAtomicCommit");
+        }
+
+        public static readonly UnionAtomicCommitConverter Singleton = new UnionAtomicCommitConverter();
+    }
+
+    internal class UnionAtomicNoexceptConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAtomicNoexcept) || t == typeof(UnionAtomicNoexcept?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAtomicNoexcept { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AtomicNoexcept>(reader);
+                    return new UnionAtomicNoexcept { AtomicNoexcept = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAtomicNoexcept");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAtomicNoexcept)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.AtomicNoexcept != null)
+            {
+                serializer.Serialize(writer, value.AtomicNoexcept);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAtomicNoexcept");
+        }
+
+        public static readonly UnionAtomicNoexceptConverter Singleton = new UnionAtomicNoexceptConverter();
+    }
+
+    internal class UnionAutoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAuto) || t == typeof(UnionAuto?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAuto { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Auto>(reader);
+                    return new UnionAuto { Auto = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAuto");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAuto)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Auto != null)
+            {
+                serializer.Serialize(writer, value.Auto);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAuto");
+        }
+
+        public static readonly UnionAutoConverter Singleton = new UnionAutoConverter();
+    }
+
+    internal class UnionAwaitConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionAwait) || t == typeof(UnionAwait?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionAwait { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Await>(reader);
+                    return new UnionAwait { Await = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionAwait");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionAwait)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Await != null)
+            {
+                serializer.Serialize(writer, value.Await);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionAwait");
+        }
+
+        public static readonly UnionAwaitConverter Singleton = new UnionAwaitConverter();
+    }
+
+    internal class UnionBaseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionBase) || t == typeof(UnionBase?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionBase { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Base>(reader);
+                    return new UnionBase { Base = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionBase");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionBase)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Base != null)
+            {
+                serializer.Serialize(writer, value.Base);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionBase");
+        }
+
+        public static readonly UnionBaseConverter Singleton = new UnionBaseConverter();
+    }
+
+    internal class UnionBitandConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionBitand) || t == typeof(UnionBitand?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionBitand { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Bitand>(reader);
+                    return new UnionBitand { Bitand = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionBitand");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionBitand)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bitand != null)
+            {
+                serializer.Serialize(writer, value.Bitand);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionBitand");
+        }
+
+        public static readonly UnionBitandConverter Singleton = new UnionBitandConverter();
+    }
+
+    internal class UnionBitorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionBitor) || t == typeof(UnionBitor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionBitor { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Bitor>(reader);
+                    return new UnionBitor { Bitor = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionBitor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionBitor)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bitor != null)
+            {
+                serializer.Serialize(writer, value.Bitor);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionBitor");
+        }
+
+        public static readonly UnionBitorConverter Singleton = new UnionBitorConverter();
+    }
+
+    internal class TopLevelUnionBoolConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TopLevelUnionBool) || t == typeof(TopLevelUnionBool?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new TopLevelUnionBool { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnionBoolBool>(reader);
+                    return new TopLevelUnionBool { UnionBoolBool = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type TopLevelUnionBool");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TopLevelUnionBool)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionBoolBool != null)
+            {
+                serializer.Serialize(writer, value.UnionBoolBool);
+                return;
+            }
+            throw new Exception("Cannot marshal type TopLevelUnionBool");
+        }
+
+        public static readonly TopLevelUnionBoolConverter Singleton = new TopLevelUnionBoolConverter();
+    }
+
+    internal class UnionBooleanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionBoolean) || t == typeof(UnionBoolean?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionBoolean { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Boolean>(reader);
+                    return new UnionBoolean { Boolean = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionBoolean");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionBoolean)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Boolean != null)
+            {
+                serializer.Serialize(writer, value.Boolean);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionBoolean");
+        }
+
+        public static readonly UnionBooleanConverter Singleton = new UnionBooleanConverter();
+    }
+
+    internal class UnionBreakConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionBreak) || t == typeof(UnionBreak?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionBreak { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Break>(reader);
+                    return new UnionBreak { Break = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionBreak");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionBreak)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Break != null)
+            {
+                serializer.Serialize(writer, value.Break);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionBreak");
+        }
+
+        public static readonly UnionBreakConverter Singleton = new UnionBreakConverter();
+    }
+
+    internal class UnionBycopyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionBycopy) || t == typeof(UnionBycopy?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionBycopy { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Bycopy>(reader);
+                    return new UnionBycopy { Bycopy = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionBycopy");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionBycopy)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bycopy != null)
+            {
+                serializer.Serialize(writer, value.Bycopy);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionBycopy");
+        }
+
+        public static readonly UnionBycopyConverter Singleton = new UnionBycopyConverter();
+    }
+
+    internal class UnionByrefConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionByref) || t == typeof(UnionByref?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionByref { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Byref>(reader);
+                    return new UnionByref { Byref = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionByref");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionByref)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Byref != null)
+            {
+                serializer.Serialize(writer, value.Byref);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionByref");
+        }
+
+        public static readonly UnionByrefConverter Singleton = new UnionByrefConverter();
+    }
+
+    internal class UnionByteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionByte) || t == typeof(UnionByte?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionByte { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Byte>(reader);
+                    return new UnionByte { Byte = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionByte");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionByte)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Byte != null)
+            {
+                serializer.Serialize(writer, value.Byte);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionByte");
+        }
+
+        public static readonly UnionByteConverter Singleton = new UnionByteConverter();
+    }
+
+    internal class UnionCaseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionCase) || t == typeof(UnionCase?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionCase { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Case>(reader);
+                    return new UnionCase { Case = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionCase");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionCase)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Case != null)
+            {
+                serializer.Serialize(writer, value.Case);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionCase");
+        }
+
+        public static readonly UnionCaseConverter Singleton = new UnionCaseConverter();
+    }
+
+    internal class UnionCatchConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionCatch) || t == typeof(UnionCatch?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionCatch { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Catch>(reader);
+                    return new UnionCatch { Catch = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionCatch");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionCatch)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Catch != null)
+            {
+                serializer.Serialize(writer, value.Catch);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionCatch");
+        }
+
+        public static readonly UnionCatchConverter Singleton = new UnionCatchConverter();
+    }
+
+    internal class UnionChanConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionChan) || t == typeof(UnionChan?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionChan { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Chan>(reader);
+                    return new UnionChan { Chan = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionChan");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionChan)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Chan != null)
+            {
+                serializer.Serialize(writer, value.Chan);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionChan");
+        }
+
+        public static readonly UnionChanConverter Singleton = new UnionChanConverter();
+    }
+
+    internal class UnionCharConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionChar) || t == typeof(UnionChar?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionChar { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Char>(reader);
+                    return new UnionChar { Char = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionChar");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionChar)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Char != null)
+            {
+                serializer.Serialize(writer, value.Char);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionChar");
+        }
+
+        public static readonly UnionCharConverter Singleton = new UnionCharConverter();
+    }
+
+    internal class UnionChar16TConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionChar16T) || t == typeof(UnionChar16T?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionChar16T { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Char16T>(reader);
+                    return new UnionChar16T { Char16T = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionChar16T");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionChar16T)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Char16T != null)
+            {
+                serializer.Serialize(writer, value.Char16T);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionChar16T");
+        }
+
+        public static readonly UnionChar16TConverter Singleton = new UnionChar16TConverter();
+    }
+
+    internal class UnionChar32TConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionChar32T) || t == typeof(UnionChar32T?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionChar32T { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Char32T>(reader);
+                    return new UnionChar32T { Char32T = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionChar32T");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionChar32T)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Char32T != null)
+            {
+                serializer.Serialize(writer, value.Char32T);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionChar32T");
+        }
+
+        public static readonly UnionChar32TConverter Singleton = new UnionChar32TConverter();
+    }
+
+    internal class UnionCheckedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionChecked) || t == typeof(UnionChecked?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionChecked { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Checked>(reader);
+                    return new UnionChecked { Checked = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionChecked");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionChecked)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Checked != null)
+            {
+                serializer.Serialize(writer, value.Checked);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionChecked");
+        }
+
+        public static readonly UnionCheckedConverter Singleton = new UnionCheckedConverter();
+    }
+
+    internal class UnionClassUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionClassUnion) || t == typeof(UnionClassUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionClassUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ClassClass>(reader);
+                    return new UnionClassUnion { ClassClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionClassUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionClassUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.ClassClass != null)
+            {
+                serializer.Serialize(writer, value.ClassClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionClassUnion");
+        }
+
+        public static readonly UnionClassUnionConverter Singleton = new UnionClassUnionConverter();
+    }
+
+    internal class UnionCoAwaitConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionCoAwait) || t == typeof(UnionCoAwait?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionCoAwait { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CoAwait>(reader);
+                    return new UnionCoAwait { CoAwait = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionCoAwait");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionCoAwait)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.CoAwait != null)
+            {
+                serializer.Serialize(writer, value.CoAwait);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionCoAwait");
+        }
+
+        public static readonly UnionCoAwaitConverter Singleton = new UnionCoAwaitConverter();
+    }
+
+    internal class UnionCoReturnConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionCoReturn) || t == typeof(UnionCoReturn?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionCoReturn { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CoReturn>(reader);
+                    return new UnionCoReturn { CoReturn = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionCoReturn");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionCoReturn)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.CoReturn != null)
+            {
+                serializer.Serialize(writer, value.CoReturn);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionCoReturn");
+        }
+
+        public static readonly UnionCoReturnConverter Singleton = new UnionCoReturnConverter();
+    }
+
+    internal class UnionCoYieldConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionCoYield) || t == typeof(UnionCoYield?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionCoYield { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<CoYield>(reader);
+                    return new UnionCoYield { CoYield = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionCoYield");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionCoYield)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.CoYield != null)
+            {
+                serializer.Serialize(writer, value.CoYield);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionCoYield");
+        }
+
+        public static readonly UnionCoYieldConverter Singleton = new UnionCoYieldConverter();
+    }
+
+    internal class UnionComplConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionCompl) || t == typeof(UnionCompl?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionCompl { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Compl>(reader);
+                    return new UnionCompl { Compl = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionCompl");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionCompl)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Compl != null)
+            {
+                serializer.Serialize(writer, value.Compl);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionCompl");
+        }
+
+        public static readonly UnionComplConverter Singleton = new UnionComplConverter();
+    }
+
+    internal class UnionConceptConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionConcept) || t == typeof(UnionConcept?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionConcept { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Concept>(reader);
+                    return new UnionConcept { Concept = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionConcept");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionConcept)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Concept != null)
+            {
+                serializer.Serialize(writer, value.Concept);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionConcept");
+        }
+
+        public static readonly UnionConceptConverter Singleton = new UnionConceptConverter();
+    }
+
+    internal class UnionConsoleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionConsole) || t == typeof(UnionConsole?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionConsole { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ConsoleClass>(reader);
+                    return new UnionConsole { ConsoleClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionConsole");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionConsole)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.ConsoleClass != null)
+            {
+                serializer.Serialize(writer, value.ConsoleClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionConsole");
+        }
+
+        public static readonly UnionConsoleConverter Singleton = new UnionConsoleConverter();
+    }
+
+    internal class UnionConstConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionConst) || t == typeof(UnionConst?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionConst { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Const>(reader);
+                    return new UnionConst { Const = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionConst");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionConst)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Const != null)
+            {
+                serializer.Serialize(writer, value.Const);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionConst");
+        }
+
+        public static readonly UnionConstConverter Singleton = new UnionConstConverter();
+    }
+
+    internal class UnionConstCastConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionConstCast) || t == typeof(UnionConstCast?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionConstCast { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ConstCast>(reader);
+                    return new UnionConstCast { ConstCast = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionConstCast");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionConstCast)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.ConstCast != null)
+            {
+                serializer.Serialize(writer, value.ConstCast);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionConstCast");
+        }
+
+        public static readonly UnionConstCastConverter Singleton = new UnionConstCastConverter();
+    }
+
+    internal class UnionConstexprConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionConstexpr) || t == typeof(UnionConstexpr?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionConstexpr { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Constexpr>(reader);
+                    return new UnionConstexpr { Constexpr = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionConstexpr");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionConstexpr)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Constexpr != null)
+            {
+                serializer.Serialize(writer, value.Constexpr);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionConstexpr");
+        }
+
+        public static readonly UnionConstexprConverter Singleton = new UnionConstexprConverter();
+    }
+
+    internal class UnionConstructorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionConstructor) || t == typeof(UnionConstructor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionConstructor { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Constructor>(reader);
+                    return new UnionConstructor { Constructor = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionConstructor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionConstructor)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Constructor != null)
+            {
+                serializer.Serialize(writer, value.Constructor);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionConstructor");
+        }
+
+        public static readonly UnionConstructorConverter Singleton = new UnionConstructorConverter();
+    }
+
+    internal class UnionContinueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionContinue) || t == typeof(UnionContinue?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionContinue { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Continue>(reader);
+                    return new UnionContinue { Continue = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionContinue");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionContinue)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Continue != null)
+            {
+                serializer.Serialize(writer, value.Continue);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionContinue");
+        }
+
+        public static readonly UnionContinueConverter Singleton = new UnionContinueConverter();
+    }
+
+    internal class UnionConvenienceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionConvenience) || t == typeof(UnionConvenience?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionConvenience { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Convenience>(reader);
+                    return new UnionConvenience { Convenience = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionConvenience");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionConvenience)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Convenience != null)
+            {
+                serializer.Serialize(writer, value.Convenience);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionConvenience");
+        }
+
+        public static readonly UnionConvenienceConverter Singleton = new UnionConvenienceConverter();
+    }
+
+    internal class UnionConvertConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionConvert) || t == typeof(UnionConvert?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionConvert { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Convert>(reader);
+                    return new UnionConvert { Convert = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionConvert");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionConvert)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Convert != null)
+            {
+                serializer.Serialize(writer, value.Convert);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionConvert");
+        }
+
+        public static readonly UnionConvertConverter Singleton = new UnionConvertConverter();
+    }
+
+    internal class UnionConverterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionConverter) || t == typeof(UnionConverter?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionConverter { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ConverterClass>(reader);
+                    return new UnionConverter { ConverterClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionConverter");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionConverter)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.ConverterClass != null)
+            {
+                serializer.Serialize(writer, value.ConverterClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionConverter");
+        }
+
+        public static readonly UnionConverterConverter Singleton = new UnionConverterConverter();
+    }
+
+    internal class UnionDateConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDate) || t == typeof(UnionDate?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDate { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Date>(reader);
+                    return new UnionDate { Date = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDate");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDate)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Date != null)
+            {
+                serializer.Serialize(writer, value.Date);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDate");
+        }
+
+        public static readonly UnionDateConverter Singleton = new UnionDateConverter();
+    }
+
+    internal class UnionDateParseHandlingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDateParseHandling) || t == typeof(UnionDateParseHandling?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDateParseHandling { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DateParseHandlingClass>(reader);
+                    return new UnionDateParseHandling { DateParseHandlingClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDateParseHandling");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDateParseHandling)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.DateParseHandlingClass != null)
+            {
+                serializer.Serialize(writer, value.DateParseHandlingClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDateParseHandling");
+        }
+
+        public static readonly UnionDateParseHandlingConverter Singleton = new UnionDateParseHandlingConverter();
+    }
+
+    internal class UnionDebuggerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDebugger) || t == typeof(UnionDebugger?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDebugger { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Debugger>(reader);
+                    return new UnionDebugger { Debugger = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDebugger");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDebugger)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Debugger != null)
+            {
+                serializer.Serialize(writer, value.Debugger);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDebugger");
+        }
+
+        public static readonly UnionDebuggerConverter Singleton = new UnionDebuggerConverter();
+    }
+
+    internal class UnionDecimalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDecimal) || t == typeof(UnionDecimal?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDecimal { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Decimal>(reader);
+                    return new UnionDecimal { Decimal = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDecimal");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDecimal)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Decimal != null)
+            {
+                serializer.Serialize(writer, value.Decimal);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDecimal");
+        }
+
+        public static readonly UnionDecimalConverter Singleton = new UnionDecimalConverter();
+    }
+
+    internal class UnionDeclareConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDeclare) || t == typeof(UnionDeclare?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDeclare { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Declare>(reader);
+                    return new UnionDeclare { Declare = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDeclare");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDeclare)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Declare != null)
+            {
+                serializer.Serialize(writer, value.Declare);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDeclare");
+        }
+
+        public static readonly UnionDeclareConverter Singleton = new UnionDeclareConverter();
+    }
+
+    internal class UnionDecltypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDecltype) || t == typeof(UnionDecltype?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDecltype { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Decltype>(reader);
+                    return new UnionDecltype { Decltype = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDecltype");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDecltype)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Decltype != null)
+            {
+                serializer.Serialize(writer, value.Decltype);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDecltype");
+        }
+
+        public static readonly UnionDecltypeConverter Singleton = new UnionDecltypeConverter();
+    }
+
+    internal class UnionDecodeStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDecodeString) || t == typeof(UnionDecodeString?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDecodeString { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DecodeString>(reader);
+                    return new UnionDecodeString { DecodeString = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDecodeString");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDecodeString)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.DecodeString != null)
+            {
+                serializer.Serialize(writer, value.DecodeString);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDecodeString");
+        }
+
+        public static readonly UnionDecodeStringConverter Singleton = new UnionDecodeStringConverter();
+    }
+
+    internal class UnionDefConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDef) || t == typeof(UnionDef?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDef { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Def>(reader);
+                    return new UnionDef { Def = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDef");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDef)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Def != null)
+            {
+                serializer.Serialize(writer, value.Def);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDef");
+        }
+
+        public static readonly UnionDefConverter Singleton = new UnionDefConverter();
+    }
+
+    internal class UnionDefaultConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDefault) || t == typeof(UnionDefault?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDefault { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Default>(reader);
+                    return new UnionDefault { Default = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDefault");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDefault)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Default != null)
+            {
+                serializer.Serialize(writer, value.Default);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDefault");
+        }
+
+        public static readonly UnionDefaultConverter Singleton = new UnionDefaultConverter();
+    }
+
+    internal class UnionDeferConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDefer) || t == typeof(UnionDefer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDefer { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Defer>(reader);
+                    return new UnionDefer { Defer = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDefer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDefer)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Defer != null)
+            {
+                serializer.Serialize(writer, value.Defer);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDefer");
+        }
+
+        public static readonly UnionDeferConverter Singleton = new UnionDeferConverter();
+    }
+
+    internal class UnionDeinitConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDeinit) || t == typeof(UnionDeinit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDeinit { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Deinit>(reader);
+                    return new UnionDeinit { Deinit = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDeinit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDeinit)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Deinit != null)
+            {
+                serializer.Serialize(writer, value.Deinit);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDeinit");
+        }
+
+        public static readonly UnionDeinitConverter Singleton = new UnionDeinitConverter();
+    }
+
+    internal class UnionDelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDel) || t == typeof(UnionDel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDel { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Del>(reader);
+                    return new UnionDel { Del = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDel)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Del != null)
+            {
+                serializer.Serialize(writer, value.Del);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDel");
+        }
+
+        public static readonly UnionDelConverter Singleton = new UnionDelConverter();
+    }
+
+    internal class UnionDelegateConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDelegate) || t == typeof(UnionDelegate?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDelegate { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Delegate>(reader);
+                    return new UnionDelegate { Delegate = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDelegate");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDelegate)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Delegate != null)
+            {
+                serializer.Serialize(writer, value.Delegate);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDelegate");
+        }
+
+        public static readonly UnionDelegateConverter Singleton = new UnionDelegateConverter();
+    }
+
+    internal class UnionDeleteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDelete) || t == typeof(UnionDelete?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDelete { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Delete>(reader);
+                    return new UnionDelete { Delete = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDelete");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDelete)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Delete != null)
+            {
+                serializer.Serialize(writer, value.Delete);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDelete");
+        }
+
+        public static readonly UnionDeleteConverter Singleton = new UnionDeleteConverter();
+    }
+
+    internal class UnionDictConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDict) || t == typeof(UnionDict?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDict { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dict>(reader);
+                    return new UnionDict { Dict = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDict");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDict)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Dict != null)
+            {
+                serializer.Serialize(writer, value.Dict);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDict");
+        }
+
+        public static readonly UnionDictConverter Singleton = new UnionDictConverter();
+    }
+
+    internal class UnionDictionaryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDictionary) || t == typeof(UnionDictionary?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDictionary { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary>(reader);
+                    return new UnionDictionary { Dictionary = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDictionary");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDictionary)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Dictionary != null)
+            {
+                serializer.Serialize(writer, value.Dictionary);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDictionary");
+        }
+
+        public static readonly UnionDictionaryConverter Singleton = new UnionDictionaryConverter();
+    }
+
+    internal class UnionDidSetConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDidSet) || t == typeof(UnionDidSet?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDidSet { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DidSet>(reader);
+                    return new UnionDidSet { DidSet = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDidSet");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDidSet)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.DidSet != null)
+            {
+                serializer.Serialize(writer, value.DidSet);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDidSet");
+        }
+
+        public static readonly UnionDidSetConverter Singleton = new UnionDidSetConverter();
+    }
+
+    internal class UnionDoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDo) || t == typeof(UnionDo?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDo { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Do>(reader);
+                    return new UnionDo { Do = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDo)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Do != null)
+            {
+                serializer.Serialize(writer, value.Do);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDo");
+        }
+
+        public static readonly UnionDoConverter Singleton = new UnionDoConverter();
+    }
+
+    internal class UnionDoubleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDouble) || t == typeof(UnionDouble?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDouble { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Double>(reader);
+                    return new UnionDouble { PurpleDouble = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDouble");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDouble)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.PurpleDouble != null)
+            {
+                serializer.Serialize(writer, value.PurpleDouble);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDouble");
+        }
+
+        public static readonly UnionDoubleConverter Singleton = new UnionDoubleConverter();
+    }
+
+    internal class UnionDynamicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDynamic) || t == typeof(UnionDynamic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDynamic { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dynamic>(reader);
+                    return new UnionDynamic { Dynamic = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDynamic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDynamic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Dynamic != null)
+            {
+                serializer.Serialize(writer, value.Dynamic);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDynamic");
+        }
+
+        public static readonly UnionDynamicConverter Singleton = new UnionDynamicConverter();
+    }
+
+    internal class UnionDynamicCastConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionDynamicCast) || t == typeof(UnionDynamicCast?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionDynamicCast { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DynamicCast>(reader);
+                    return new UnionDynamicCast { DynamicCast = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionDynamicCast");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionDynamicCast)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.DynamicCast != null)
+            {
+                serializer.Serialize(writer, value.DynamicCast);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionDynamicCast");
+        }
+
+        public static readonly UnionDynamicCastConverter Singleton = new UnionDynamicCastConverter();
+    }
+
+    internal class UnionElifConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionElif) || t == typeof(UnionElif?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionElif { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Elif>(reader);
+                    return new UnionElif { Elif = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionElif");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionElif)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Elif != null)
+            {
+                serializer.Serialize(writer, value.Elif);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionElif");
+        }
+
+        public static readonly UnionElifConverter Singleton = new UnionElifConverter();
+    }
+
+    internal class UnionElseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionElse) || t == typeof(UnionElse?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionElse { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Else>(reader);
+                    return new UnionElse { Else = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionElse");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionElse)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Else != null)
+            {
+                serializer.Serialize(writer, value.Else);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionElse");
+        }
+
+        public static readonly UnionElseConverter Singleton = new UnionElseConverter();
+    }
+
+    internal class UnionEncodeQuickTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionEncodeQuickType) || t == typeof(UnionEncodeQuickType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionEncodeQuickType { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<EncodeQuickType>(reader);
+                    return new UnionEncodeQuickType { EncodeQuickType = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionEncodeQuickType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionEncodeQuickType)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.EncodeQuickType != null)
+            {
+                serializer.Serialize(writer, value.EncodeQuickType);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionEncodeQuickType");
+        }
+
+        public static readonly UnionEncodeQuickTypeConverter Singleton = new UnionEncodeQuickTypeConverter();
+    }
+
+    internal class UnionEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionEnum) || t == typeof(UnionEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionEnum { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Enum>(reader);
+                    return new UnionEnum { Enum = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionEnum)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Enum != null)
+            {
+                serializer.Serialize(writer, value.Enum);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionEnum");
+        }
+
+        public static readonly UnionEnumConverter Singleton = new UnionEnumConverter();
+    }
+
+    internal class UnionEventConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionEvent) || t == typeof(UnionEvent?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionEvent { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Event>(reader);
+                    return new UnionEvent { Event = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionEvent");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionEvent)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Event != null)
+            {
+                serializer.Serialize(writer, value.Event);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionEvent");
+        }
+
+        public static readonly UnionEventConverter Singleton = new UnionEventConverter();
+    }
+
+    internal class UnionExceptConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionExcept) || t == typeof(UnionExcept?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionExcept { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Except>(reader);
+                    return new UnionExcept { Except = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionExcept");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionExcept)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Except != null)
+            {
+                serializer.Serialize(writer, value.Except);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionExcept");
+        }
+
+        public static readonly UnionExceptConverter Singleton = new UnionExceptConverter();
+    }
+
+    internal class UnionExceptionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionException) || t == typeof(UnionException?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionException { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ExceptionClass>(reader);
+                    return new UnionException { ExceptionClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionException");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionException)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.ExceptionClass != null)
+            {
+                serializer.Serialize(writer, value.ExceptionClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionException");
+        }
+
+        public static readonly UnionExceptionConverter Singleton = new UnionExceptionConverter();
+    }
+
+    internal class UnionExplicitConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionExplicit) || t == typeof(UnionExplicit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionExplicit { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Explicit>(reader);
+                    return new UnionExplicit { Explicit = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionExplicit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionExplicit)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Explicit != null)
+            {
+                serializer.Serialize(writer, value.Explicit);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionExplicit");
+        }
+
+        public static readonly UnionExplicitConverter Singleton = new UnionExplicitConverter();
+    }
+
+    internal class UnionExportConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionExport) || t == typeof(UnionExport?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionExport { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Export>(reader);
+                    return new UnionExport { Export = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionExport");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionExport)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Export != null)
+            {
+                serializer.Serialize(writer, value.Export);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionExport");
+        }
+
+        public static readonly UnionExportConverter Singleton = new UnionExportConverter();
+    }
+
+    internal class UnionExposingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionExposing) || t == typeof(UnionExposing?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionExposing { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Exposing>(reader);
+                    return new UnionExposing { Exposing = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionExposing");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionExposing)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Exposing != null)
+            {
+                serializer.Serialize(writer, value.Exposing);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionExposing");
+        }
+
+        public static readonly UnionExposingConverter Singleton = new UnionExposingConverter();
+    }
+
+    internal class UnionExtendsConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionExtends) || t == typeof(UnionExtends?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionExtends { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Extends>(reader);
+                    return new UnionExtends { Extends = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionExtends");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionExtends)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Extends != null)
+            {
+                serializer.Serialize(writer, value.Extends);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionExtends");
+        }
+
+        public static readonly UnionExtendsConverter Singleton = new UnionExtendsConverter();
+    }
+
+    internal class UnionExtensionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionExtension) || t == typeof(UnionExtension?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionExtension { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Extension>(reader);
+                    return new UnionExtension { Extension = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionExtension");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionExtension)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Extension != null)
+            {
+                serializer.Serialize(writer, value.Extension);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionExtension");
+        }
+
+        public static readonly UnionExtensionConverter Singleton = new UnionExtensionConverter();
+    }
+
+    internal class UnionExternConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionExtern) || t == typeof(UnionExtern?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionExtern { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Extern>(reader);
+                    return new UnionExtern { Extern = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionExtern");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionExtern)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Extern != null)
+            {
+                serializer.Serialize(writer, value.Extern);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionExtern");
+        }
+
+        public static readonly UnionExternConverter Singleton = new UnionExternConverter();
+    }
+
+    internal class UnionFallthroughConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFallthrough) || t == typeof(UnionFallthrough?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFallthrough { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Fallthrough>(reader);
+                    return new UnionFallthrough { Fallthrough = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFallthrough");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFallthrough)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Fallthrough != null)
+            {
+                serializer.Serialize(writer, value.Fallthrough);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFallthrough");
+        }
+
+        public static readonly UnionFallthroughConverter Singleton = new UnionFallthroughConverter();
+    }
+
+    internal class UnionFalseUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFalseUnion) || t == typeof(UnionFalseUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFalseUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FalseClass>(reader);
+                    return new UnionFalseUnion { FalseClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFalseUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFalseUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.FalseClass != null)
+            {
+                serializer.Serialize(writer, value.FalseClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFalseUnion");
+        }
+
+        public static readonly UnionFalseUnionConverter Singleton = new UnionFalseUnionConverter();
+    }
+
+    internal class UnionFileprivateConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFileprivate) || t == typeof(UnionFileprivate?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFileprivate { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Fileprivate>(reader);
+                    return new UnionFileprivate { Fileprivate = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFileprivate");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFileprivate)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Fileprivate != null)
+            {
+                serializer.Serialize(writer, value.Fileprivate);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFileprivate");
+        }
+
+        public static readonly UnionFileprivateConverter Singleton = new UnionFileprivateConverter();
+    }
+
+    internal class UnionFinalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFinal) || t == typeof(UnionFinal?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFinal { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Final>(reader);
+                    return new UnionFinal { Final = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFinal");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFinal)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Final != null)
+            {
+                serializer.Serialize(writer, value.Final);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFinal");
+        }
+
+        public static readonly UnionFinalConverter Singleton = new UnionFinalConverter();
+    }
+
+    internal class UnionFinallyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFinally) || t == typeof(UnionFinally?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFinally { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Finally>(reader);
+                    return new UnionFinally { Finally = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFinally");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFinally)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Finally != null)
+            {
+                serializer.Serialize(writer, value.Finally);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFinally");
+        }
+
+        public static readonly UnionFinallyConverter Singleton = new UnionFinallyConverter();
+    }
+
+    internal class UnionFixedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFixed) || t == typeof(UnionFixed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFixed { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Fixed>(reader);
+                    return new UnionFixed { Fixed = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFixed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFixed)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Fixed != null)
+            {
+                serializer.Serialize(writer, value.Fixed);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFixed");
+        }
+
+        public static readonly UnionFixedConverter Singleton = new UnionFixedConverter();
+    }
+
+    internal class UnionFloatConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFloat) || t == typeof(UnionFloat?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFloat { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Float>(reader);
+                    return new UnionFloat { Float = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFloat");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFloat)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Float != null)
+            {
+                serializer.Serialize(writer, value.Float);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFloat");
+        }
+
+        public static readonly UnionFloatConverter Singleton = new UnionFloatConverter();
+    }
+
+    internal class UnionForConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFor) || t == typeof(UnionFor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFor { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<For>(reader);
+                    return new UnionFor { For = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFor)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.For != null)
+            {
+                serializer.Serialize(writer, value.For);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFor");
+        }
+
+        public static readonly UnionForConverter Singleton = new UnionForConverter();
+    }
+
+    internal class UnionForeachConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionForeach) || t == typeof(UnionForeach?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionForeach { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Foreach>(reader);
+                    return new UnionForeach { Foreach = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionForeach");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionForeach)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Foreach != null)
+            {
+                serializer.Serialize(writer, value.Foreach);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionForeach");
+        }
+
+        public static readonly UnionForeachConverter Singleton = new UnionForeachConverter();
+    }
+
+    internal class UnionFriendConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFriend) || t == typeof(UnionFriend?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFriend { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Friend>(reader);
+                    return new UnionFriend { Friend = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFriend");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFriend)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Friend != null)
+            {
+                serializer.Serialize(writer, value.Friend);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFriend");
+        }
+
+        public static readonly UnionFriendConverter Singleton = new UnionFriendConverter();
+    }
+
+    internal class UnionFromConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFrom) || t == typeof(UnionFrom?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFrom { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<From>(reader);
+                    return new UnionFrom { From = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFrom");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFrom)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.From != null)
+            {
+                serializer.Serialize(writer, value.From);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFrom");
+        }
+
+        public static readonly UnionFromConverter Singleton = new UnionFromConverter();
+    }
+
+    internal class UnionFromJsonConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFromJson) || t == typeof(UnionFromJson?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFromJson { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FromJsonClass>(reader);
+                    return new UnionFromJson { FromJsonClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFromJson");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFromJson)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.FromJsonClass != null)
+            {
+                serializer.Serialize(writer, value.FromJsonClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFromJson");
+        }
+
+        public static readonly UnionFromJsonConverter Singleton = new UnionFromJsonConverter();
+    }
+
+    internal class UnionFuncConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFunc) || t == typeof(UnionFunc?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFunc { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Func>(reader);
+                    return new UnionFunc { Func = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFunc");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFunc)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Func != null)
+            {
+                serializer.Serialize(writer, value.Func);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFunc");
+        }
+
+        public static readonly UnionFuncConverter Singleton = new UnionFuncConverter();
+    }
+
+    internal class UnionFunctionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFunction) || t == typeof(UnionFunction?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFunction { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Function>(reader);
+                    return new UnionFunction { Function = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFunction");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFunction)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Function != null)
+            {
+                serializer.Serialize(writer, value.Function);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFunction");
+        }
+
+        public static readonly UnionFunctionConverter Singleton = new UnionFunctionConverter();
+    }
+
+    internal class UnionGetConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionGet) || t == typeof(UnionGet?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionGet { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Get>(reader);
+                    return new UnionGet { Get = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionGet");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionGet)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Get != null)
+            {
+                serializer.Serialize(writer, value.Get);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionGet");
+        }
+
+        public static readonly UnionGetConverter Singleton = new UnionGetConverter();
+    }
+
+    internal class UnionGlobalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionGlobal) || t == typeof(UnionGlobal?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionGlobal { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Global>(reader);
+                    return new UnionGlobal { Global = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionGlobal");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionGlobal)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Global != null)
+            {
+                serializer.Serialize(writer, value.Global);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionGlobal");
+        }
+
+        public static readonly UnionGlobalConverter Singleton = new UnionGlobalConverter();
+    }
+
+    internal class UnionGoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionGo) || t == typeof(UnionGo?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionGo { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Go>(reader);
+                    return new UnionGo { Go = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionGo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionGo)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Go != null)
+            {
+                serializer.Serialize(writer, value.Go);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionGo");
+        }
+
+        public static readonly UnionGoConverter Singleton = new UnionGoConverter();
+    }
+
+    internal class UnionGotoConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionGoto) || t == typeof(UnionGoto?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionGoto { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Goto>(reader);
+                    return new UnionGoto { Goto = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionGoto");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionGoto)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Goto != null)
+            {
+                serializer.Serialize(writer, value.Goto);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionGoto");
+        }
+
+        public static readonly UnionGotoConverter Singleton = new UnionGotoConverter();
+    }
+
+    internal class UnionGuardConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionGuard) || t == typeof(UnionGuard?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionGuard { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Guard>(reader);
+                    return new UnionGuard { Guard = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionGuard");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionGuard)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Guard != null)
+            {
+                serializer.Serialize(writer, value.Guard);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionGuard");
+        }
+
+        public static readonly UnionGuardConverter Singleton = new UnionGuardConverter();
+    }
+
+    internal class UnionHasOwnPropertyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionHasOwnProperty) || t == typeof(UnionHasOwnProperty?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionHasOwnProperty { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<HasOwnProperty>(reader);
+                    return new UnionHasOwnProperty { HasOwnProperty = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionHasOwnProperty");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionHasOwnProperty)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.HasOwnProperty != null)
+            {
+                serializer.Serialize(writer, value.HasOwnProperty);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionHasOwnProperty");
+        }
+
+        public static readonly UnionHasOwnPropertyConverter Singleton = new UnionHasOwnPropertyConverter();
+    }
+
+    internal class UnionIdConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionId) || t == typeof(UnionId?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionId { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Id>(reader);
+                    return new UnionId { Id = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionId");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionId)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Id != null)
+            {
+                serializer.Serialize(writer, value.Id);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionId");
+        }
+
+        public static readonly UnionIdConverter Singleton = new UnionIdConverter();
+    }
+
+    internal class UnionIfConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionIf) || t == typeof(UnionIf?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionIf { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<If>(reader);
+                    return new UnionIf { If = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionIf");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionIf)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.If != null)
+            {
+                serializer.Serialize(writer, value.If);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionIf");
+        }
+
+        public static readonly UnionIfConverter Singleton = new UnionIfConverter();
+    }
+
+    internal class UnionImplementsConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionImplements) || t == typeof(UnionImplements?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionImplements { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Implements>(reader);
+                    return new UnionImplements { Implements = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionImplements");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionImplements)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Implements != null)
+            {
+                serializer.Serialize(writer, value.Implements);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionImplements");
+        }
+
+        public static readonly UnionImplementsConverter Singleton = new UnionImplementsConverter();
+    }
+
+    internal class UnionImplicitConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionImplicit) || t == typeof(UnionImplicit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionImplicit { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Implicit>(reader);
+                    return new UnionImplicit { Implicit = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionImplicit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionImplicit)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Implicit != null)
+            {
+                serializer.Serialize(writer, value.Implicit);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionImplicit");
+        }
+
+        public static readonly UnionImplicitConverter Singleton = new UnionImplicitConverter();
+    }
+
+    internal class UnionImportConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionImport) || t == typeof(UnionImport?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionImport { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Import>(reader);
+                    return new UnionImport { Import = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionImport");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionImport)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Import != null)
+            {
+                serializer.Serialize(writer, value.Import);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionImport");
+        }
+
+        public static readonly UnionImportConverter Singleton = new UnionImportConverter();
+    }
+
+    internal class UnionInConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionIn) || t == typeof(UnionIn?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionIn { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<In>(reader);
+                    return new UnionIn { In = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionIn");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionIn)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.In != null)
+            {
+                serializer.Serialize(writer, value.In);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionIn");
+        }
+
+        public static readonly UnionInConverter Singleton = new UnionInConverter();
+    }
+
+    internal class UnionIndirectConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionIndirect) || t == typeof(UnionIndirect?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionIndirect { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Indirect>(reader);
+                    return new UnionIndirect { Indirect = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionIndirect");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionIndirect)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Indirect != null)
+            {
+                serializer.Serialize(writer, value.Indirect);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionIndirect");
+        }
+
+        public static readonly UnionIndirectConverter Singleton = new UnionIndirectConverter();
+    }
+
+    internal class UnionInfixConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionInfix) || t == typeof(UnionInfix?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionInfix { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Infix>(reader);
+                    return new UnionInfix { Infix = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionInfix");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionInfix)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Infix != null)
+            {
+                serializer.Serialize(writer, value.Infix);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionInfix");
+        }
+
+        public static readonly UnionInfixConverter Singleton = new UnionInfixConverter();
+    }
+
+    internal class UnionInitConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionInit) || t == typeof(UnionInit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionInit { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Init>(reader);
+                    return new UnionInit { Init = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionInit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionInit)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Init != null)
+            {
+                serializer.Serialize(writer, value.Init);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionInit");
+        }
+
+        public static readonly UnionInitConverter Singleton = new UnionInitConverter();
+    }
+
+    internal class UnionInlineConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionInline) || t == typeof(UnionInline?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionInline { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Inline>(reader);
+                    return new UnionInline { Inline = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionInline");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionInline)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Inline != null)
+            {
+                serializer.Serialize(writer, value.Inline);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionInline");
+        }
+
+        public static readonly UnionInlineConverter Singleton = new UnionInlineConverter();
+    }
+
+    internal class UnionInoutConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionInout) || t == typeof(UnionInout?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionInout { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Inout>(reader);
+                    return new UnionInout { Inout = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionInout");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionInout)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Inout != null)
+            {
+                serializer.Serialize(writer, value.Inout);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionInout");
+        }
+
+        public static readonly UnionInoutConverter Singleton = new UnionInoutConverter();
+    }
+
+    internal class UnionInstanceofConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionInstanceof) || t == typeof(UnionInstanceof?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionInstanceof { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Instanceof>(reader);
+                    return new UnionInstanceof { Instanceof = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionInstanceof");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionInstanceof)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Instanceof != null)
+            {
+                serializer.Serialize(writer, value.Instanceof);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionInstanceof");
+        }
+
+        public static readonly UnionInstanceofConverter Singleton = new UnionInstanceofConverter();
+    }
+
+    internal class UnionIntConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionInt) || t == typeof(UnionInt?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionInt { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Int>(reader);
+                    return new UnionInt { Int = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionInt");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionInt)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Int != null)
+            {
+                serializer.Serialize(writer, value.Int);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionInt");
+        }
+
+        public static readonly UnionIntConverter Singleton = new UnionIntConverter();
+    }
+
+    internal class UnionInterfaceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionInterface) || t == typeof(UnionInterface?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionInterface { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Interface>(reader);
+                    return new UnionInterface { Interface = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionInterface");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionInterface)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Interface != null)
+            {
+                serializer.Serialize(writer, value.Interface);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionInterface");
+        }
+
+        public static readonly UnionInterfaceConverter Singleton = new UnionInterfaceConverter();
+    }
+
+    internal class UnionInternalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionInternal) || t == typeof(UnionInternal?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionInternal { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Internal>(reader);
+                    return new UnionInternal { Internal = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionInternal");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionInternal)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Internal != null)
+            {
+                serializer.Serialize(writer, value.Internal);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionInternal");
+        }
+
+        public static readonly UnionInternalConverter Singleton = new UnionInternalConverter();
+    }
+
+    internal class UnionIsConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionIs) || t == typeof(UnionIs?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionIs { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Is>(reader);
+                    return new UnionIs { Is = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionIs");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionIs)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Is != null)
+            {
+                serializer.Serialize(writer, value.Is);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionIs");
+        }
+
+        public static readonly UnionIsConverter Singleton = new UnionIsConverter();
+    }
+
+    internal class UnionIterableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionIterable) || t == typeof(UnionIterable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionIterable { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Iterable>(reader);
+                    return new UnionIterable { Iterable = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionIterable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionIterable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Iterable != null)
+            {
+                serializer.Serialize(writer, value.Iterable);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionIterable");
+        }
+
+        public static readonly UnionIterableConverter Singleton = new UnionIterableConverter();
+    }
+
+    internal class UnionJdecConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionJdec) || t == typeof(UnionJdec?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionJdec { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Jdec>(reader);
+                    return new UnionJdec { Jdec = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionJdec");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionJdec)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Jdec != null)
+            {
+                serializer.Serialize(writer, value.Jdec);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionJdec");
+        }
+
+        public static readonly UnionJdecConverter Singleton = new UnionJdecConverter();
+    }
+
+    internal class UnionJencConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionJenc) || t == typeof(UnionJenc?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionJenc { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Jenc>(reader);
+                    return new UnionJenc { Jenc = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionJenc");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionJenc)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Jenc != null)
+            {
+                serializer.Serialize(writer, value.Jenc);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionJenc");
+        }
+
+        public static readonly UnionJencConverter Singleton = new UnionJencConverter();
+    }
+
+    internal class UnionJpipeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionJpipe) || t == typeof(UnionJpipe?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionJpipe { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Jpipe>(reader);
+                    return new UnionJpipe { Jpipe = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionJpipe");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionJpipe)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Jpipe != null)
+            {
+                serializer.Serialize(writer, value.Jpipe);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionJpipe");
+        }
+
+        public static readonly UnionJpipeConverter Singleton = new UnionJpipeConverter();
+    }
+
+    internal class PurpleUnionJsonConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionJson) || t == typeof(UnionJson?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionJson { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Json>(reader);
+                    return new UnionJson { Json = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionJson");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionJson)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Json != null)
+            {
+                serializer.Serialize(writer, value.Json);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionJson");
+        }
+
+        public static readonly PurpleUnionJsonConverter Singleton = new PurpleUnionJsonConverter();
+    }
+
+    internal class UnionJsonConverterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionJsonConverter) || t == typeof(UnionJsonConverter?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionJsonConverter { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<JsonConverterClass>(reader);
+                    return new UnionJsonConverter { JsonConverterClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionJsonConverter");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionJsonConverter)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.JsonConverterClass != null)
+            {
+                serializer.Serialize(writer, value.JsonConverterClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionJsonConverter");
+        }
+
+        public static readonly UnionJsonConverterConverter Singleton = new UnionJsonConverterConverter();
+    }
+
+    internal class UnionJsonSerializerConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionJsonSerializer) || t == typeof(UnionJsonSerializer?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionJsonSerializer { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<JsonSerializerClass>(reader);
+                    return new UnionJsonSerializer { JsonSerializerClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionJsonSerializer");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionJsonSerializer)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.JsonSerializerClass != null)
+            {
+                serializer.Serialize(writer, value.JsonSerializerClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionJsonSerializer");
+        }
+
+        public static readonly UnionJsonSerializerConverter Singleton = new UnionJsonSerializerConverter();
+    }
+
+    internal class UnionJsonTokenConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionJsonToken) || t == typeof(UnionJsonToken?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionJsonToken { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<JsonTokenClass>(reader);
+                    return new UnionJsonToken { JsonTokenClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionJsonToken");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionJsonToken)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.JsonTokenClass != null)
+            {
+                serializer.Serialize(writer, value.JsonTokenClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionJsonToken");
+        }
+
+        public static readonly UnionJsonTokenConverter Singleton = new UnionJsonTokenConverter();
+    }
+
+    internal class UnionJsonWriterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionJsonWriter) || t == typeof(UnionJsonWriter?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionJsonWriter { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<JsonWriterClass>(reader);
+                    return new UnionJsonWriter { JsonWriterClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionJsonWriter");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionJsonWriter)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.JsonWriterClass != null)
+            {
+                serializer.Serialize(writer, value.JsonWriterClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionJsonWriter");
+        }
+
+        public static readonly UnionJsonWriterConverter Singleton = new UnionJsonWriterConverter();
+    }
+
+    internal class UnionLambdaConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionLambda) || t == typeof(UnionLambda?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionLambda { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Lambda>(reader);
+                    return new UnionLambda { Lambda = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionLambda");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionLambda)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Lambda != null)
+            {
+                serializer.Serialize(writer, value.Lambda);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionLambda");
+        }
+
+        public static readonly UnionLambdaConverter Singleton = new UnionLambdaConverter();
+    }
+
+    internal class UnionLazyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionLazy) || t == typeof(UnionLazy?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionLazy { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Lazy>(reader);
+                    return new UnionLazy { Lazy = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionLazy");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionLazy)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Lazy != null)
+            {
+                serializer.Serialize(writer, value.Lazy);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionLazy");
+        }
+
+        public static readonly UnionLazyConverter Singleton = new UnionLazyConverter();
+    }
+
+    internal class UnionLeftConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionLeft) || t == typeof(UnionLeft?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionLeft { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Left>(reader);
+                    return new UnionLeft { Left = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionLeft");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionLeft)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Left != null)
+            {
+                serializer.Serialize(writer, value.Left);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionLeft");
+        }
+
+        public static readonly UnionLeftConverter Singleton = new UnionLeftConverter();
+    }
+
+    internal class UnionLetConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionLet) || t == typeof(UnionLet?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionLet { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Let>(reader);
+                    return new UnionLet { Let = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionLet");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionLet)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Let != null)
+            {
+                serializer.Serialize(writer, value.Let);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionLet");
+        }
+
+        public static readonly UnionLetConverter Singleton = new UnionLetConverter();
+    }
+
+    internal class UnionListConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionList) || t == typeof(UnionList?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionList { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<List>(reader);
+                    return new UnionList { List = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionList");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionList)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.List != null)
+            {
+                serializer.Serialize(writer, value.List);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionList");
+        }
+
+        public static readonly UnionListConverter Singleton = new UnionListConverter();
+    }
+
+    internal class UnionLockConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionLock) || t == typeof(UnionLock?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionLock { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Lock>(reader);
+                    return new UnionLock { Lock = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionLock");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionLock)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Lock != null)
+            {
+                serializer.Serialize(writer, value.Lock);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionLock");
+        }
+
+        public static readonly UnionLockConverter Singleton = new UnionLockConverter();
+    }
+
+    internal class UnionLongConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionLong) || t == typeof(UnionLong?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionLong { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Long>(reader);
+                    return new UnionLong { Long = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionLong");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionLong)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Long != null)
+            {
+                serializer.Serialize(writer, value.Long);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionLong");
+        }
+
+        public static readonly UnionLongConverter Singleton = new UnionLongConverter();
+    }
+
+    internal class UnionMapConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionMap) || t == typeof(UnionMap?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionMap { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Map>(reader);
+                    return new UnionMap { Map = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionMap");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionMap)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Map != null)
+            {
+                serializer.Serialize(writer, value.Map);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionMap");
+        }
+
+        public static readonly UnionMapConverter Singleton = new UnionMapConverter();
+    }
+
+    internal class UnionMetadataPropertyHandlingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionMetadataPropertyHandling) || t == typeof(UnionMetadataPropertyHandling?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionMetadataPropertyHandling { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MetadataPropertyHandlingClass>(reader);
+                    return new UnionMetadataPropertyHandling { MetadataPropertyHandlingClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionMetadataPropertyHandling");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionMetadataPropertyHandling)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.MetadataPropertyHandlingClass != null)
+            {
+                serializer.Serialize(writer, value.MetadataPropertyHandlingClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionMetadataPropertyHandling");
+        }
+
+        public static readonly UnionMetadataPropertyHandlingConverter Singleton = new UnionMetadataPropertyHandlingConverter();
+    }
+
+    internal class UnionModuleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionModule) || t == typeof(UnionModule?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionModule { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Module>(reader);
+                    return new UnionModule { Module = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionModule");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionModule)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Module != null)
+            {
+                serializer.Serialize(writer, value.Module);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionModule");
+        }
+
+        public static readonly UnionModuleConverter Singleton = new UnionModuleConverter();
+    }
+
+    internal class UnionMutableConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionMutable) || t == typeof(UnionMutable?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionMutable { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Mutable>(reader);
+                    return new UnionMutable { Mutable = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionMutable");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionMutable)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Mutable != null)
+            {
+                serializer.Serialize(writer, value.Mutable);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionMutable");
+        }
+
+        public static readonly UnionMutableConverter Singleton = new UnionMutableConverter();
+    }
+
+    internal class UnionMutatingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionMutating) || t == typeof(UnionMutating?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionMutating { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Mutating>(reader);
+                    return new UnionMutating { Mutating = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionMutating");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionMutating)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Mutating != null)
+            {
+                serializer.Serialize(writer, value.Mutating);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionMutating");
+        }
+
+        public static readonly UnionMutatingConverter Singleton = new UnionMutatingConverter();
+    }
+
+    internal class UnionNamespaceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNamespace) || t == typeof(UnionNamespace?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNamespace { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Namespace>(reader);
+                    return new UnionNamespace { Namespace = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNamespace");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNamespace)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Namespace != null)
+            {
+                serializer.Serialize(writer, value.Namespace);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNamespace");
+        }
+
+        public static readonly UnionNamespaceConverter Singleton = new UnionNamespaceConverter();
+    }
+
+    internal class UnionNativeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNative) || t == typeof(UnionNative?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNative { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Native>(reader);
+                    return new UnionNative { Native = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNative");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNative)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Native != null)
+            {
+                serializer.Serialize(writer, value.Native);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNative");
+        }
+
+        public static readonly UnionNativeConverter Singleton = new UnionNativeConverter();
+    }
+
+    internal class UnionNewConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNew) || t == typeof(UnionNew?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNew { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<New>(reader);
+                    return new UnionNew { New = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNew");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNew)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.New != null)
+            {
+                serializer.Serialize(writer, value.New);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNew");
+        }
+
+        public static readonly UnionNewConverter Singleton = new UnionNewConverter();
+    }
+
+    internal class UnionNewtonsoftConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNewtonsoft) || t == typeof(UnionNewtonsoft?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNewtonsoft { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<NewtonsoftClass>(reader);
+                    return new UnionNewtonsoft { NewtonsoftClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNewtonsoft");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNewtonsoft)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NewtonsoftClass != null)
+            {
+                serializer.Serialize(writer, value.NewtonsoftClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNewtonsoft");
+        }
+
+        public static readonly UnionNewtonsoftConverter Singleton = new UnionNewtonsoftConverter();
+    }
+
+    internal class UnionNilConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNil) || t == typeof(UnionNil?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNil { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Nil>(reader);
+                    return new UnionNil { Nil = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNil");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNil)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Nil != null)
+            {
+                serializer.Serialize(writer, value.Nil);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNil");
+        }
+
+        public static readonly UnionNilConverter Singleton = new UnionNilConverter();
+    }
+
+    internal class UnionNoexceptConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNoexcept) || t == typeof(UnionNoexcept?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNoexcept { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Noexcept>(reader);
+                    return new UnionNoexcept { Noexcept = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNoexcept");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNoexcept)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Noexcept != null)
+            {
+                serializer.Serialize(writer, value.Noexcept);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNoexcept");
+        }
+
+        public static readonly UnionNoexceptConverter Singleton = new UnionNoexceptConverter();
+    }
+
+    internal class UnionNonatomicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNonatomic) || t == typeof(UnionNonatomic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNonatomic { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Nonatomic>(reader);
+                    return new UnionNonatomic { Nonatomic = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNonatomic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNonatomic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Nonatomic != null)
+            {
+                serializer.Serialize(writer, value.Nonatomic);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNonatomic");
+        }
+
+        public static readonly UnionNonatomicConverter Singleton = new UnionNonatomicConverter();
+    }
+
+    internal class UnionNoneUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNoneUnion) || t == typeof(UnionNoneUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNoneUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<NoneClass>(reader);
+                    return new UnionNoneUnion { NoneClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNoneUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNoneUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NoneClass != null)
+            {
+                serializer.Serialize(writer, value.NoneClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNoneUnion");
+        }
+
+        public static readonly UnionNoneUnionConverter Singleton = new UnionNoneUnionConverter();
+    }
+
+    internal class UnionNonlocalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNonlocal) || t == typeof(UnionNonlocal?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNonlocal { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Nonlocal>(reader);
+                    return new UnionNonlocal { Nonlocal = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNonlocal");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNonlocal)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Nonlocal != null)
+            {
+                serializer.Serialize(writer, value.Nonlocal);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNonlocal");
+        }
+
+        public static readonly UnionNonlocalConverter Singleton = new UnionNonlocalConverter();
+    }
+
+    internal class UnionNonmutatingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNonmutating) || t == typeof(UnionNonmutating?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNonmutating { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Nonmutating>(reader);
+                    return new UnionNonmutating { Nonmutating = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNonmutating");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNonmutating)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Nonmutating != null)
+            {
+                serializer.Serialize(writer, value.Nonmutating);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNonmutating");
+        }
+
+        public static readonly UnionNonmutatingConverter Singleton = new UnionNonmutatingConverter();
+    }
+
+    internal class UnionNotConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNot) || t == typeof(UnionNot?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNot { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Not>(reader);
+                    return new UnionNot { Not = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNot");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNot)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Not != null)
+            {
+                serializer.Serialize(writer, value.Not);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNot");
+        }
+
+        public static readonly UnionNotConverter Singleton = new UnionNotConverter();
+    }
+
+    internal class UnionNotEqConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNotEq) || t == typeof(UnionNotEq?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNotEq { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<NotEq>(reader);
+                    return new UnionNotEq { NotEq = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNotEq");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNotEq)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NotEq != null)
+            {
+                serializer.Serialize(writer, value.NotEq);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNotEq");
+        }
+
+        public static readonly UnionNotEqConverter Singleton = new UnionNotEqConverter();
+    }
+
+    internal class UnionNullUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNullUnion) || t == typeof(UnionNullUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNullUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<NullClass>(reader);
+                    return new UnionNullUnion { NullClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNullUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNullUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.NullClass != null)
+            {
+                serializer.Serialize(writer, value.NullClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNullUnion");
+        }
+
+        public static readonly UnionNullUnionConverter Singleton = new UnionNullUnionConverter();
+    }
+
+    internal class UnionNullptrConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNullptr) || t == typeof(UnionNullptr?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNullptr { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Nullptr>(reader);
+                    return new UnionNullptr { Nullptr = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNullptr");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNullptr)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Nullptr != null)
+            {
+                serializer.Serialize(writer, value.Nullptr);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNullptr");
+        }
+
+        public static readonly UnionNullptrConverter Singleton = new UnionNullptrConverter();
+    }
+
+    internal class UnionNumberConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionNumber) || t == typeof(UnionNumber?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionNumber { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Number>(reader);
+                    return new UnionNumber { Number = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionNumber");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionNumber)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Number != null)
+            {
+                serializer.Serialize(writer, value.Number);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionNumber");
+        }
+
+        public static readonly UnionNumberConverter Singleton = new UnionNumberConverter();
+    }
+
+    internal class UnionObjectConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionObject) || t == typeof(UnionObject?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionObject { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Object>(reader);
+                    return new UnionObject { Object = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionObject");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionObject)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Object != null)
+            {
+                serializer.Serialize(writer, value.Object);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionObject");
+        }
+
+        public static readonly UnionObjectConverter Singleton = new UnionObjectConverter();
+    }
+
+    internal class UnionOfConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOf) || t == typeof(UnionOf?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOf { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Of>(reader);
+                    return new UnionOf { Of = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOf");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOf)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Of != null)
+            {
+                serializer.Serialize(writer, value.Of);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOf");
+        }
+
+        public static readonly UnionOfConverter Singleton = new UnionOfConverter();
+    }
+
+    internal class UnionOnewayConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOneway) || t == typeof(UnionOneway?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOneway { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Oneway>(reader);
+                    return new UnionOneway { Oneway = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOneway");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOneway)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Oneway != null)
+            {
+                serializer.Serialize(writer, value.Oneway);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOneway");
+        }
+
+        public static readonly UnionOnewayConverter Singleton = new UnionOnewayConverter();
+    }
+
+    internal class UnionOpenConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOpen) || t == typeof(UnionOpen?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOpen { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Open>(reader);
+                    return new UnionOpen { Open = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOpen");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOpen)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Open != null)
+            {
+                serializer.Serialize(writer, value.Open);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOpen");
+        }
+
+        public static readonly UnionOpenConverter Singleton = new UnionOpenConverter();
+    }
+
+    internal class UnionOperatorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOperator) || t == typeof(UnionOperator?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOperator { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Operator>(reader);
+                    return new UnionOperator { Operator = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOperator");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOperator)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Operator != null)
+            {
+                serializer.Serialize(writer, value.Operator);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOperator");
+        }
+
+        public static readonly UnionOperatorConverter Singleton = new UnionOperatorConverter();
+    }
+
+    internal class UnionOptionalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOptional) || t == typeof(UnionOptional?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOptional { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Optional>(reader);
+                    return new UnionOptional { Optional = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOptional");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOptional)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Optional != null)
+            {
+                serializer.Serialize(writer, value.Optional);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOptional");
+        }
+
+        public static readonly UnionOptionalConverter Singleton = new UnionOptionalConverter();
+    }
+
+    internal class UnionOrConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOr) || t == typeof(UnionOr?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOr { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Or>(reader);
+                    return new UnionOr { Or = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOr");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOr)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Or != null)
+            {
+                serializer.Serialize(writer, value.Or);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOr");
+        }
+
+        public static readonly UnionOrConverter Singleton = new UnionOrConverter();
+    }
+
+    internal class UnionOrEqConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOrEq) || t == typeof(UnionOrEq?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOrEq { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OrEq>(reader);
+                    return new UnionOrEq { OrEq = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOrEq");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOrEq)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OrEq != null)
+            {
+                serializer.Serialize(writer, value.OrEq);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOrEq");
+        }
+
+        public static readonly UnionOrEqConverter Singleton = new UnionOrEqConverter();
+    }
+
+    internal class UnionOutConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOut) || t == typeof(UnionOut?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOut { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Out>(reader);
+                    return new UnionOut { Out = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOut");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOut)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Out != null)
+            {
+                serializer.Serialize(writer, value.Out);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOut");
+        }
+
+        public static readonly UnionOutConverter Singleton = new UnionOutConverter();
+    }
+
+    internal class UnionOverrideConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOverride) || t == typeof(UnionOverride?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOverride { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Override>(reader);
+                    return new UnionOverride { Override = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOverride");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOverride)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Override != null)
+            {
+                serializer.Serialize(writer, value.Override);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOverride");
+        }
+
+        public static readonly UnionOverrideConverter Singleton = new UnionOverrideConverter();
+    }
+
+    internal class UnionPackageConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionPackage) || t == typeof(UnionPackage?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionPackage { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Package>(reader);
+                    return new UnionPackage { Package = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionPackage");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionPackage)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Package != null)
+            {
+                serializer.Serialize(writer, value.Package);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionPackage");
+        }
+
+        public static readonly UnionPackageConverter Singleton = new UnionPackageConverter();
+    }
+
+    internal class UnionParamsConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionParams) || t == typeof(UnionParams?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionParams { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Params>(reader);
+                    return new UnionParams { Params = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionParams");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionParams)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Params != null)
+            {
+                serializer.Serialize(writer, value.Params);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionParams");
+        }
+
+        public static readonly UnionParamsConverter Singleton = new UnionParamsConverter();
+    }
+
+    internal class UnionPassConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionPass) || t == typeof(UnionPass?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionPass { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Pass>(reader);
+                    return new UnionPass { Pass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionPass");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionPass)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Pass != null)
+            {
+                serializer.Serialize(writer, value.Pass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionPass");
+        }
+
+        public static readonly UnionPassConverter Singleton = new UnionPassConverter();
+    }
+
+    internal class UnionPortConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionPort) || t == typeof(UnionPort?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionPort { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Port>(reader);
+                    return new UnionPort { Port = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionPort");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionPort)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Port != null)
+            {
+                serializer.Serialize(writer, value.Port);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionPort");
+        }
+
+        public static readonly UnionPortConverter Singleton = new UnionPortConverter();
+    }
+
+    internal class UnionPostfixConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionPostfix) || t == typeof(UnionPostfix?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionPostfix { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Postfix>(reader);
+                    return new UnionPostfix { Postfix = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionPostfix");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionPostfix)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Postfix != null)
+            {
+                serializer.Serialize(writer, value.Postfix);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionPostfix");
+        }
+
+        public static readonly UnionPostfixConverter Singleton = new UnionPostfixConverter();
+    }
+
+    internal class UnionPrecedenceConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionPrecedence) || t == typeof(UnionPrecedence?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionPrecedence { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Precedence>(reader);
+                    return new UnionPrecedence { Precedence = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionPrecedence");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionPrecedence)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Precedence != null)
+            {
+                serializer.Serialize(writer, value.Precedence);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionPrecedence");
+        }
+
+        public static readonly UnionPrecedenceConverter Singleton = new UnionPrecedenceConverter();
+    }
+
+    internal class UnionPrefixConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionPrefix) || t == typeof(UnionPrefix?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionPrefix { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Prefix>(reader);
+                    return new UnionPrefix { Prefix = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionPrefix");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionPrefix)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Prefix != null)
+            {
+                serializer.Serialize(writer, value.Prefix);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionPrefix");
+        }
+
+        public static readonly UnionPrefixConverter Singleton = new UnionPrefixConverter();
+    }
+
+    internal class UnionPrintConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionPrint) || t == typeof(UnionPrint?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionPrint { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Print>(reader);
+                    return new UnionPrint { Print = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionPrint");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionPrint)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Print != null)
+            {
+                serializer.Serialize(writer, value.Print);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionPrint");
+        }
+
+        public static readonly UnionPrintConverter Singleton = new UnionPrintConverter();
+    }
+
+    internal class UnionPrintfConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionPrintf) || t == typeof(UnionPrintf?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionPrintf { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Printf>(reader);
+                    return new UnionPrintf { Printf = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionPrintf");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionPrintf)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Printf != null)
+            {
+                serializer.Serialize(writer, value.Printf);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionPrintf");
+        }
+
+        public static readonly UnionPrintfConverter Singleton = new UnionPrintfConverter();
+    }
+
+    internal class UnionPrivateConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionPrivate) || t == typeof(UnionPrivate?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionPrivate { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Private>(reader);
+                    return new UnionPrivate { Private = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionPrivate");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionPrivate)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Private != null)
+            {
+                serializer.Serialize(writer, value.Private);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionPrivate");
+        }
+
+        public static readonly UnionPrivateConverter Singleton = new UnionPrivateConverter();
+    }
+
+    internal class UnionProtectedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionProtected) || t == typeof(UnionProtected?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionProtected { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Protected>(reader);
+                    return new UnionProtected { Protected = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionProtected");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionProtected)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Protected != null)
+            {
+                serializer.Serialize(writer, value.Protected);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionProtected");
+        }
+
+        public static readonly UnionProtectedConverter Singleton = new UnionProtectedConverter();
+    }
+
+    internal class UnionProtocolUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionProtocolUnion) || t == typeof(UnionProtocolUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionProtocolUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ProtocolClass>(reader);
+                    return new UnionProtocolUnion { ProtocolClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionProtocolUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionProtocolUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.ProtocolClass != null)
+            {
+                serializer.Serialize(writer, value.ProtocolClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionProtocolUnion");
+        }
+
+        public static readonly UnionProtocolUnionConverter Singleton = new UnionProtocolUnionConverter();
+    }
+
+    internal class UnionPublicConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionPublic) || t == typeof(UnionPublic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionPublic { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Public>(reader);
+                    return new UnionPublic { Public = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionPublic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionPublic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Public != null)
+            {
+                serializer.Serialize(writer, value.Public);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionPublic");
+        }
+
+        public static readonly UnionPublicConverter Singleton = new UnionPublicConverter();
+    }
+
+    internal class UnionQuicktypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionQuicktype) || t == typeof(UnionQuicktype?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionQuicktype { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Quicktype>(reader);
+                    return new UnionQuicktype { Quicktype = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionQuicktype");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionQuicktype)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Quicktype != null)
+            {
+                serializer.Serialize(writer, value.Quicktype);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionQuicktype");
+        }
+
+        public static readonly UnionQuicktypeConverter Singleton = new UnionQuicktypeConverter();
+    }
+
+    internal class UnionRaiseConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRaise) || t == typeof(UnionRaise?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRaise { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Raise>(reader);
+                    return new UnionRaise { Raise = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRaise");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRaise)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Raise != null)
+            {
+                serializer.Serialize(writer, value.Raise);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRaise");
+        }
+
+        public static readonly UnionRaiseConverter Singleton = new UnionRaiseConverter();
+    }
+
+    internal class UnionRangeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRange) || t == typeof(UnionRange?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRange { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Range>(reader);
+                    return new UnionRange { Range = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRange");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRange)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Range != null)
+            {
+                serializer.Serialize(writer, value.Range);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRange");
+        }
+
+        public static readonly UnionRangeConverter Singleton = new UnionRangeConverter();
+    }
+
+    internal class UnionReadonlyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionReadonly) || t == typeof(UnionReadonly?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionReadonly { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Readonly>(reader);
+                    return new UnionReadonly { Readonly = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionReadonly");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionReadonly)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Readonly != null)
+            {
+                serializer.Serialize(writer, value.Readonly);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionReadonly");
+        }
+
+        public static readonly UnionReadonlyConverter Singleton = new UnionReadonlyConverter();
+    }
+
+    internal class UnionRefConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRef) || t == typeof(UnionRef?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRef { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Ref>(reader);
+                    return new UnionRef { Ref = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRef");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRef)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Ref != null)
+            {
+                serializer.Serialize(writer, value.Ref);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRef");
+        }
+
+        public static readonly UnionRefConverter Singleton = new UnionRefConverter();
+    }
+
+    internal class UnionRegisterConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRegister) || t == typeof(UnionRegister?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRegister { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Register>(reader);
+                    return new UnionRegister { Register = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRegister");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRegister)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Register != null)
+            {
+                serializer.Serialize(writer, value.Register);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRegister");
+        }
+
+        public static readonly UnionRegisterConverter Singleton = new UnionRegisterConverter();
+    }
+
+    internal class UnionReinterpretCastConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionReinterpretCast) || t == typeof(UnionReinterpretCast?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionReinterpretCast { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ReinterpretCast>(reader);
+                    return new UnionReinterpretCast { ReinterpretCast = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionReinterpretCast");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionReinterpretCast)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.ReinterpretCast != null)
+            {
+                serializer.Serialize(writer, value.ReinterpretCast);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionReinterpretCast");
+        }
+
+        public static readonly UnionReinterpretCastConverter Singleton = new UnionReinterpretCastConverter();
+    }
+
+    internal class UnionRepeatConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRepeat) || t == typeof(UnionRepeat?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRepeat { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Repeat>(reader);
+                    return new UnionRepeat { Repeat = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRepeat");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRepeat)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Repeat != null)
+            {
+                serializer.Serialize(writer, value.Repeat);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRepeat");
+        }
+
+        public static readonly UnionRepeatConverter Singleton = new UnionRepeatConverter();
+    }
+
+    internal class UnionRequireConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRequire) || t == typeof(UnionRequire?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRequire { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Require>(reader);
+                    return new UnionRequire { Require = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRequire");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRequire)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Require != null)
+            {
+                serializer.Serialize(writer, value.Require);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRequire");
+        }
+
+        public static readonly UnionRequireConverter Singleton = new UnionRequireConverter();
+    }
+
+    internal class UnionRequiredConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRequired) || t == typeof(UnionRequired?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRequired { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<RequiredClass>(reader);
+                    return new UnionRequired { RequiredClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRequired");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRequired)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.RequiredClass != null)
+            {
+                serializer.Serialize(writer, value.RequiredClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRequired");
+        }
+
+        public static readonly UnionRequiredConverter Singleton = new UnionRequiredConverter();
+    }
+
+    internal class UnionRequiresConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRequires) || t == typeof(UnionRequires?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRequires { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Requires>(reader);
+                    return new UnionRequires { Requires = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRequires");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRequires)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Requires != null)
+            {
+                serializer.Serialize(writer, value.Requires);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRequires");
+        }
+
+        public static readonly UnionRequiresConverter Singleton = new UnionRequiresConverter();
+    }
+
+    internal class UnionRestrictConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRestrict) || t == typeof(UnionRestrict?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRestrict { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Restrict>(reader);
+                    return new UnionRestrict { Restrict = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRestrict");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRestrict)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Restrict != null)
+            {
+                serializer.Serialize(writer, value.Restrict);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRestrict");
+        }
+
+        public static readonly UnionRestrictConverter Singleton = new UnionRestrictConverter();
+    }
+
+    internal class UnionRetainConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRetain) || t == typeof(UnionRetain?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRetain { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Retain>(reader);
+                    return new UnionRetain { Retain = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRetain");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRetain)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Retain != null)
+            {
+                serializer.Serialize(writer, value.Retain);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRetain");
+        }
+
+        public static readonly UnionRetainConverter Singleton = new UnionRetainConverter();
+    }
+
+    internal class UnionRethrowsConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRethrows) || t == typeof(UnionRethrows?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRethrows { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Rethrows>(reader);
+                    return new UnionRethrows { Rethrows = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRethrows");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRethrows)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Rethrows != null)
+            {
+                serializer.Serialize(writer, value.Rethrows);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRethrows");
+        }
+
+        public static readonly UnionRethrowsConverter Singleton = new UnionRethrowsConverter();
+    }
+
+    internal class UnionReturnConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionReturn) || t == typeof(UnionReturn?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionReturn { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Return>(reader);
+                    return new UnionReturn { Return = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionReturn");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionReturn)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Return != null)
+            {
+                serializer.Serialize(writer, value.Return);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionReturn");
+        }
+
+        public static readonly UnionReturnConverter Singleton = new UnionReturnConverter();
+    }
+
+    internal class UnionRightConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionRight) || t == typeof(UnionRight?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionRight { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Right>(reader);
+                    return new UnionRight { Right = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionRight");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionRight)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Right != null)
+            {
+                serializer.Serialize(writer, value.Right);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionRight");
+        }
+
+        public static readonly UnionRightConverter Singleton = new UnionRightConverter();
+    }
+
+    internal class UnionSbyteConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSbyte) || t == typeof(UnionSbyte?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSbyte { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Sbyte>(reader);
+                    return new UnionSbyte { Sbyte = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSbyte");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSbyte)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Sbyte != null)
+            {
+                serializer.Serialize(writer, value.Sbyte);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSbyte");
+        }
+
+        public static readonly UnionSbyteConverter Singleton = new UnionSbyteConverter();
+    }
+
+    internal class UnionSealedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSealed) || t == typeof(UnionSealed?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSealed { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Sealed>(reader);
+                    return new UnionSealed { Sealed = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSealed");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSealed)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Sealed != null)
+            {
+                serializer.Serialize(writer, value.Sealed);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSealed");
+        }
+
+        public static readonly UnionSealedConverter Singleton = new UnionSealedConverter();
+    }
+
+    internal class UnionSelectConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSelect) || t == typeof(UnionSelect?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSelect { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Select>(reader);
+                    return new UnionSelect { Select = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSelect");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSelect)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Select != null)
+            {
+                serializer.Serialize(writer, value.Select);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSelect");
+        }
+
+        public static readonly UnionSelectConverter Singleton = new UnionSelectConverter();
+    }
+
+    internal class UnionSelfUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSelfUnion) || t == typeof(UnionSelfUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSelfUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SelfClass>(reader);
+                    return new UnionSelfUnion { SelfClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSelfUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSelfUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.SelfClass != null)
+            {
+                serializer.Serialize(writer, value.SelfClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSelfUnion");
+        }
+
+        public static readonly UnionSelfUnionConverter Singleton = new UnionSelfUnionConverter();
+    }
+
+    internal class UnionSerializeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSerialize) || t == typeof(UnionSerialize?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSerialize { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SerializeClass>(reader);
+                    return new UnionSerialize { SerializeClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSerialize");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSerialize)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.SerializeClass != null)
+            {
+                serializer.Serialize(writer, value.SerializeClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSerialize");
+        }
+
+        public static readonly UnionSerializeConverter Singleton = new UnionSerializeConverter();
+    }
+
+    internal class UnionSetConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSet) || t == typeof(UnionSet?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSet { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Set>(reader);
+                    return new UnionSet { Set = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSet");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSet)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Set != null)
+            {
+                serializer.Serialize(writer, value.Set);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSet");
+        }
+
+        public static readonly UnionSetConverter Singleton = new UnionSetConverter();
+    }
+
+    internal class UnionShortConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionShort) || t == typeof(UnionShort?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionShort { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Short>(reader);
+                    return new UnionShort { Short = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionShort");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionShort)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Short != null)
+            {
+                serializer.Serialize(writer, value.Short);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionShort");
+        }
+
+        public static readonly UnionShortConverter Singleton = new UnionShortConverter();
+    }
+
+    internal class UnionSignedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSigned) || t == typeof(UnionSigned?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSigned { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Signed>(reader);
+                    return new UnionSigned { Signed = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSigned");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSigned)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Signed != null)
+            {
+                serializer.Serialize(writer, value.Signed);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSigned");
+        }
+
+        public static readonly UnionSignedConverter Singleton = new UnionSignedConverter();
+    }
+
+    internal class UnionSizeofConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSizeof) || t == typeof(UnionSizeof?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSizeof { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Sizeof>(reader);
+                    return new UnionSizeof { Sizeof = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSizeof");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSizeof)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Sizeof != null)
+            {
+                serializer.Serialize(writer, value.Sizeof);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSizeof");
+        }
+
+        public static readonly UnionSizeofConverter Singleton = new UnionSizeofConverter();
+    }
+
+    internal class UnionStackallocConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionStackalloc) || t == typeof(UnionStackalloc?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionStackalloc { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Stackalloc>(reader);
+                    return new UnionStackalloc { Stackalloc = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionStackalloc");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionStackalloc)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Stackalloc != null)
+            {
+                serializer.Serialize(writer, value.Stackalloc);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionStackalloc");
+        }
+
+        public static readonly UnionStackallocConverter Singleton = new UnionStackallocConverter();
+    }
+
+    internal class UnionStaticConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionStatic) || t == typeof(UnionStatic?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionStatic { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Static>(reader);
+                    return new UnionStatic { Static = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionStatic");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionStatic)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Static != null)
+            {
+                serializer.Serialize(writer, value.Static);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionStatic");
+        }
+
+        public static readonly UnionStaticConverter Singleton = new UnionStaticConverter();
+    }
+
+    internal class UnionStaticAssertConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionStaticAssert) || t == typeof(UnionStaticAssert?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionStaticAssert { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<StaticAssert>(reader);
+                    return new UnionStaticAssert { StaticAssert = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionStaticAssert");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionStaticAssert)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.StaticAssert != null)
+            {
+                serializer.Serialize(writer, value.StaticAssert);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionStaticAssert");
+        }
+
+        public static readonly UnionStaticAssertConverter Singleton = new UnionStaticAssertConverter();
+    }
+
+    internal class UnionStaticCastConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionStaticCast) || t == typeof(UnionStaticCast?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionStaticCast { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<StaticCast>(reader);
+                    return new UnionStaticCast { StaticCast = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionStaticCast");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionStaticCast)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.StaticCast != null)
+            {
+                serializer.Serialize(writer, value.StaticCast);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionStaticCast");
+        }
+
+        public static readonly UnionStaticCastConverter Singleton = new UnionStaticCastConverter();
+    }
+
+    internal class UnionStrictfpConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionStrictfp) || t == typeof(UnionStrictfp?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionStrictfp { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Strictfp>(reader);
+                    return new UnionStrictfp { Strictfp = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionStrictfp");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionStrictfp)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Strictfp != null)
+            {
+                serializer.Serialize(writer, value.Strictfp);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionStrictfp");
+        }
+
+        public static readonly UnionStrictfpConverter Singleton = new UnionStrictfpConverter();
+    }
+
+    internal class UnionStringConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionString) || t == typeof(UnionString?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionString { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<String>(reader);
+                    return new UnionString { String = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionString");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionString)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionString");
+        }
+
+        public static readonly UnionStringConverter Singleton = new UnionStringConverter();
+    }
+
+    internal class UnionStructConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionStruct) || t == typeof(UnionStruct?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionStruct { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Struct>(reader);
+                    return new UnionStruct { Struct = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionStruct");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionStruct)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Struct != null)
+            {
+                serializer.Serialize(writer, value.Struct);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionStruct");
+        }
+
+        public static readonly UnionStructConverter Singleton = new UnionStructConverter();
+    }
+
+    internal class UnionSubscriptConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSubscript) || t == typeof(UnionSubscript?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSubscript { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Subscript>(reader);
+                    return new UnionSubscript { Subscript = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSubscript");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSubscript)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Subscript != null)
+            {
+                serializer.Serialize(writer, value.Subscript);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSubscript");
+        }
+
+        public static readonly UnionSubscriptConverter Singleton = new UnionSubscriptConverter();
+    }
+
+    internal class UnionSuperConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSuper) || t == typeof(UnionSuper?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSuper { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Super>(reader);
+                    return new UnionSuper { Super = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSuper");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSuper)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Super != null)
+            {
+                serializer.Serialize(writer, value.Super);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSuper");
+        }
+
+        public static readonly UnionSuperConverter Singleton = new UnionSuperConverter();
+    }
+
+    internal class UnionSwitchConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSwitch) || t == typeof(UnionSwitch?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSwitch { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Switch>(reader);
+                    return new UnionSwitch { Switch = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSwitch");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSwitch)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Switch != null)
+            {
+                serializer.Serialize(writer, value.Switch);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSwitch");
+        }
+
+        public static readonly UnionSwitchConverter Singleton = new UnionSwitchConverter();
+    }
+
+    internal class UnionSymbolConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSymbol) || t == typeof(UnionSymbol?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSymbol { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Symbol>(reader);
+                    return new UnionSymbol { Symbol = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSymbol");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSymbol)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Symbol != null)
+            {
+                serializer.Serialize(writer, value.Symbol);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSymbol");
+        }
+
+        public static readonly UnionSymbolConverter Singleton = new UnionSymbolConverter();
+    }
+
+    internal class UnionSynchronizedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSynchronized) || t == typeof(UnionSynchronized?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSynchronized { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Synchronized>(reader);
+                    return new UnionSynchronized { Synchronized = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSynchronized");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSynchronized)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Synchronized != null)
+            {
+                serializer.Serialize(writer, value.Synchronized);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSynchronized");
+        }
+
+        public static readonly UnionSynchronizedConverter Singleton = new UnionSynchronizedConverter();
+    }
+
+    internal class UnionSystemConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionSystem) || t == typeof(UnionSystem?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionSystem { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SystemClass>(reader);
+                    return new UnionSystem { SystemClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionSystem");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionSystem)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.SystemClass != null)
+            {
+                serializer.Serialize(writer, value.SystemClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionSystem");
+        }
+
+        public static readonly UnionSystemConverter Singleton = new UnionSystemConverter();
+    }
+
+    internal class UnionTemplateConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTemplate) || t == typeof(UnionTemplate?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTemplate { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Template>(reader);
+                    return new UnionTemplate { Template = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTemplate");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTemplate)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Template != null)
+            {
+                serializer.Serialize(writer, value.Template);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTemplate");
+        }
+
+        public static readonly UnionTemplateConverter Singleton = new UnionTemplateConverter();
+    }
+
+    internal class UnionThenConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionThen) || t == typeof(UnionThen?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionThen { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Then>(reader);
+                    return new UnionThen { Then = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionThen");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionThen)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Then != null)
+            {
+                serializer.Serialize(writer, value.Then);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionThen");
+        }
+
+        public static readonly UnionThenConverter Singleton = new UnionThenConverter();
+    }
+
+    internal class UnionThisConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionThis) || t == typeof(UnionThis?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionThis { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<This>(reader);
+                    return new UnionThis { This = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionThis");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionThis)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.This != null)
+            {
+                serializer.Serialize(writer, value.This);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionThis");
+        }
+
+        public static readonly UnionThisConverter Singleton = new UnionThisConverter();
+    }
+
+    internal class UnionThreadLocalConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionThreadLocal) || t == typeof(UnionThreadLocal?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionThreadLocal { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ThreadLocal>(reader);
+                    return new UnionThreadLocal { ThreadLocal = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionThreadLocal");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionThreadLocal)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.ThreadLocal != null)
+            {
+                serializer.Serialize(writer, value.ThreadLocal);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionThreadLocal");
+        }
+
+        public static readonly UnionThreadLocalConverter Singleton = new UnionThreadLocalConverter();
+    }
+
+    internal class UnionThrowConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionThrow) || t == typeof(UnionThrow?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionThrow { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Throw>(reader);
+                    return new UnionThrow { Throw = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionThrow");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionThrow)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Throw != null)
+            {
+                serializer.Serialize(writer, value.Throw);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionThrow");
+        }
+
+        public static readonly UnionThrowConverter Singleton = new UnionThrowConverter();
+    }
+
+    internal class UnionThrowsConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionThrows) || t == typeof(UnionThrows?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionThrows { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Throws>(reader);
+                    return new UnionThrows { Throws = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionThrows");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionThrows)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Throws != null)
+            {
+                serializer.Serialize(writer, value.Throws);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionThrows");
+        }
+
+        public static readonly UnionThrowsConverter Singleton = new UnionThrowsConverter();
+    }
+
+    internal class UnionToJsonConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionToJson) || t == typeof(UnionToJson?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionToJson { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ToJson>(reader);
+                    return new UnionToJson { ToJson = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionToJson");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionToJson)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.ToJson != null)
+            {
+                serializer.Serialize(writer, value.ToJson);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionToJson");
+        }
+
+        public static readonly UnionToJsonConverter Singleton = new UnionToJsonConverter();
+    }
+
+    internal class UnionTopLevelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTopLevel) || t == typeof(UnionTopLevel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTopLevel { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TopLevelClass>(reader);
+                    return new UnionTopLevel { TopLevelClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTopLevel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTopLevel)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.TopLevelClass != null)
+            {
+                serializer.Serialize(writer, value.TopLevelClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTopLevel");
+        }
+
+        public static readonly UnionTopLevelConverter Singleton = new UnionTopLevelConverter();
+    }
+
+    internal class UnionTransientConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTransient) || t == typeof(UnionTransient?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTransient { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Transient>(reader);
+                    return new UnionTransient { Transient = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTransient");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTransient)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Transient != null)
+            {
+                serializer.Serialize(writer, value.Transient);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTransient");
+        }
+
+        public static readonly UnionTransientConverter Singleton = new UnionTransientConverter();
+    }
+
+    internal class UnionTrueUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTrueUnion) || t == typeof(UnionTrueUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTrueUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TrueClass>(reader);
+                    return new UnionTrueUnion { TrueClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTrueUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTrueUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.TrueClass != null)
+            {
+                serializer.Serialize(writer, value.TrueClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTrueUnion");
+        }
+
+        public static readonly UnionTrueUnionConverter Singleton = new UnionTrueUnionConverter();
+    }
+
+    internal class UnionTryConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTry) || t == typeof(UnionTry?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTry { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Try>(reader);
+                    return new UnionTry { Try = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTry");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTry)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Try != null)
+            {
+                serializer.Serialize(writer, value.Try);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTry");
+        }
+
+        public static readonly UnionTryConverter Singleton = new UnionTryConverter();
+    }
+
+    internal class UnionTypeUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTypeUnion) || t == typeof(UnionTypeUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTypeUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnionTypeType>(reader);
+                    return new UnionTypeUnion { UnionTypeType = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTypeUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTypeUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionTypeType != null)
+            {
+                serializer.Serialize(writer, value.UnionTypeType);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTypeUnion");
+        }
+
+        public static readonly UnionTypeUnionConverter Singleton = new UnionTypeUnionConverter();
+    }
+
+    internal class UnionTypealiasConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTypealias) || t == typeof(UnionTypealias?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTypealias { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Typealias>(reader);
+                    return new UnionTypealias { Typealias = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTypealias");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTypealias)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Typealias != null)
+            {
+                serializer.Serialize(writer, value.Typealias);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTypealias");
+        }
+
+        public static readonly UnionTypealiasConverter Singleton = new UnionTypealiasConverter();
+    }
+
+    internal class UnionTypedefConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTypedef) || t == typeof(UnionTypedef?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTypedef { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Typedef>(reader);
+                    return new UnionTypedef { Typedef = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTypedef");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTypedef)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Typedef != null)
+            {
+                serializer.Serialize(writer, value.Typedef);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTypedef");
+        }
+
+        public static readonly UnionTypedefConverter Singleton = new UnionTypedefConverter();
+    }
+
+    internal class UnionTypeidConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTypeid) || t == typeof(UnionTypeid?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTypeid { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Typeid>(reader);
+                    return new UnionTypeid { Typeid = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTypeid");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTypeid)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Typeid != null)
+            {
+                serializer.Serialize(writer, value.Typeid);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTypeid");
+        }
+
+        public static readonly UnionTypeidConverter Singleton = new UnionTypeidConverter();
+    }
+
+    internal class UnionTypenameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTypename) || t == typeof(UnionTypename?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTypename { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Typename>(reader);
+                    return new UnionTypename { Typename = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTypename");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTypename)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Typename != null)
+            {
+                serializer.Serialize(writer, value.Typename);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTypename");
+        }
+
+        public static readonly UnionTypenameConverter Singleton = new UnionTypenameConverter();
+    }
+
+    internal class UnionTypeofConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionTypeof) || t == typeof(UnionTypeof?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionTypeof { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Typeof>(reader);
+                    return new UnionTypeof { Typeof = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionTypeof");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionTypeof)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Typeof != null)
+            {
+                serializer.Serialize(writer, value.Typeof);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionTypeof");
+        }
+
+        public static readonly UnionTypeofConverter Singleton = new UnionTypeofConverter();
+    }
+
+    internal class UnionUintConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUint) || t == typeof(UnionUint?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUint { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Uint>(reader);
+                    return new UnionUint { Uint = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUint");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUint)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Uint != null)
+            {
+                serializer.Serialize(writer, value.Uint);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUint");
+        }
+
+        public static readonly UnionUintConverter Singleton = new UnionUintConverter();
+    }
+
+    internal class UnionUlongConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUlong) || t == typeof(UnionUlong?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUlong { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Ulong>(reader);
+                    return new UnionUlong { Ulong = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUlong");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUlong)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Ulong != null)
+            {
+                serializer.Serialize(writer, value.Ulong);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUlong");
+        }
+
+        public static readonly UnionUlongConverter Singleton = new UnionUlongConverter();
+    }
+
+    internal class UnionUncheckedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUnchecked) || t == typeof(UnionUnchecked?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUnchecked { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Unchecked>(reader);
+                    return new UnionUnchecked { Unchecked = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUnchecked");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUnchecked)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Unchecked != null)
+            {
+                serializer.Serialize(writer, value.Unchecked);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUnchecked");
+        }
+
+        public static readonly UnionUncheckedConverter Singleton = new UnionUncheckedConverter();
+    }
+
+    internal class UnionUndefinedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUndefined) || t == typeof(UnionUndefined?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUndefined { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Undefined>(reader);
+                    return new UnionUndefined { Undefined = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUndefined");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUndefined)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Undefined != null)
+            {
+                serializer.Serialize(writer, value.Undefined);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUndefined");
+        }
+
+        public static readonly UnionUndefinedConverter Singleton = new UnionUndefinedConverter();
+    }
+
+    internal class UnionUnionUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUnionUnion) || t == typeof(UnionUnionUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUnionUnion { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Union>(reader);
+                    return new UnionUnionUnion { Union = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUnionUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUnionUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Union != null)
+            {
+                serializer.Serialize(writer, value.Union);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUnionUnion");
+        }
+
+        public static readonly UnionUnionUnionConverter Singleton = new UnionUnionUnionConverter();
+    }
+
+    internal class UnionUnownedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUnowned) || t == typeof(UnionUnowned?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUnowned { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Unowned>(reader);
+                    return new UnionUnowned { Unowned = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUnowned");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUnowned)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Unowned != null)
+            {
+                serializer.Serialize(writer, value.Unowned);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUnowned");
+        }
+
+        public static readonly UnionUnownedConverter Singleton = new UnionUnownedConverter();
+    }
+
+    internal class UnionUnsafeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUnsafe) || t == typeof(UnionUnsafe?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUnsafe { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Unsafe>(reader);
+                    return new UnionUnsafe { Unsafe = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUnsafe");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUnsafe)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Unsafe != null)
+            {
+                serializer.Serialize(writer, value.Unsafe);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUnsafe");
+        }
+
+        public static readonly UnionUnsafeConverter Singleton = new UnionUnsafeConverter();
+    }
+
+    internal class UnionUnsignedConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUnsigned) || t == typeof(UnionUnsigned?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUnsigned { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Unsigned>(reader);
+                    return new UnionUnsigned { Unsigned = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUnsigned");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUnsigned)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Unsigned != null)
+            {
+                serializer.Serialize(writer, value.Unsigned);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUnsigned");
+        }
+
+        public static readonly UnionUnsignedConverter Singleton = new UnionUnsignedConverter();
+    }
+
+    internal class UnionUshortConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUshort) || t == typeof(UnionUshort?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUshort { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Ushort>(reader);
+                    return new UnionUshort { Ushort = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUshort");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUshort)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Ushort != null)
+            {
+                serializer.Serialize(writer, value.Ushort);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUshort");
+        }
+
+        public static readonly UnionUshortConverter Singleton = new UnionUshortConverter();
+    }
+
+    internal class UnionUsingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUsing) || t == typeof(UnionUsing?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUsing { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Using>(reader);
+                    return new UnionUsing { Using = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUsing");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUsing)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Using != null)
+            {
+                serializer.Serialize(writer, value.Using);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUsing");
+        }
+
+        public static readonly UnionUsingConverter Singleton = new UnionUsingConverter();
+    }
+
+    internal class UnionVarConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionVar) || t == typeof(UnionVar?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionVar { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Var>(reader);
+                    return new UnionVar { Var = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionVar");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionVar)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Var != null)
+            {
+                serializer.Serialize(writer, value.Var);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionVar");
+        }
+
+        public static readonly UnionVarConverter Singleton = new UnionVarConverter();
+    }
+
+    internal class UnionVirtualConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionVirtual) || t == typeof(UnionVirtual?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionVirtual { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Virtual>(reader);
+                    return new UnionVirtual { Virtual = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionVirtual");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionVirtual)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Virtual != null)
+            {
+                serializer.Serialize(writer, value.Virtual);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionVirtual");
+        }
+
+        public static readonly UnionVirtualConverter Singleton = new UnionVirtualConverter();
+    }
+
+    internal class UnionVoidConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionVoid) || t == typeof(UnionVoid?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionVoid { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Void>(reader);
+                    return new UnionVoid { Void = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionVoid");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionVoid)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Void != null)
+            {
+                serializer.Serialize(writer, value.Void);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionVoid");
+        }
+
+        public static readonly UnionVoidConverter Singleton = new UnionVoidConverter();
+    }
+
+    internal class UnionVolatileConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionVolatile) || t == typeof(UnionVolatile?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionVolatile { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Volatile>(reader);
+                    return new UnionVolatile { Volatile = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionVolatile");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionVolatile)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Volatile != null)
+            {
+                serializer.Serialize(writer, value.Volatile);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionVolatile");
+        }
+
+        public static readonly UnionVolatileConverter Singleton = new UnionVolatileConverter();
+    }
+
+    internal class UnionWcharTConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWcharT) || t == typeof(UnionWcharT?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionWcharT { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<WcharT>(reader);
+                    return new UnionWcharT { WcharT = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionWcharT");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionWcharT)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.WcharT != null)
+            {
+                serializer.Serialize(writer, value.WcharT);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionWcharT");
+        }
+
+        public static readonly UnionWcharTConverter Singleton = new UnionWcharTConverter();
+    }
+
+    internal class UnionWeakConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWeak) || t == typeof(UnionWeak?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionWeak { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Weak>(reader);
+                    return new UnionWeak { Weak = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionWeak");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionWeak)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Weak != null)
+            {
+                serializer.Serialize(writer, value.Weak);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionWeak");
+        }
+
+        public static readonly UnionWeakConverter Singleton = new UnionWeakConverter();
+    }
+
+    internal class UnionWhereConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWhere) || t == typeof(UnionWhere?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionWhere { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Where>(reader);
+                    return new UnionWhere { Where = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionWhere");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionWhere)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Where != null)
+            {
+                serializer.Serialize(writer, value.Where);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionWhere");
+        }
+
+        public static readonly UnionWhereConverter Singleton = new UnionWhereConverter();
+    }
+
+    internal class UnionWhileConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWhile) || t == typeof(UnionWhile?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionWhile { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<While>(reader);
+                    return new UnionWhile { While = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionWhile");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionWhile)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.While != null)
+            {
+                serializer.Serialize(writer, value.While);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionWhile");
+        }
+
+        public static readonly UnionWhileConverter Singleton = new UnionWhileConverter();
+    }
+
+    internal class UnionWillSetConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWillSet) || t == typeof(UnionWillSet?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionWillSet { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<WillSet>(reader);
+                    return new UnionWillSet { WillSet = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionWillSet");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionWillSet)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.WillSet != null)
+            {
+                serializer.Serialize(writer, value.WillSet);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionWillSet");
+        }
+
+        public static readonly UnionWillSetConverter Singleton = new UnionWillSetConverter();
+    }
+
+    internal class UnionWithConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWith) || t == typeof(UnionWith?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionWith { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<With>(reader);
+                    return new UnionWith { With = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionWith");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionWith)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.With != null)
+            {
+                serializer.Serialize(writer, value.With);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionWith");
+        }
+
+        public static readonly UnionWithConverter Singleton = new UnionWithConverter();
+    }
+
+    internal class UnionXorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionXor) || t == typeof(UnionXor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionXor { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Xor>(reader);
+                    return new UnionXor { Xor = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionXor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionXor)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Xor != null)
+            {
+                serializer.Serialize(writer, value.Xor);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionXor");
+        }
+
+        public static readonly UnionXorConverter Singleton = new UnionXorConverter();
+    }
+
+    internal class UnionXorEqConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionXorEq) || t == typeof(UnionXorEq?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionXorEq { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<XorEq>(reader);
+                    return new UnionXorEq { XorEq = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionXorEq");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionXorEq)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.XorEq != null)
+            {
+                serializer.Serialize(writer, value.XorEq);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionXorEq");
+        }
+
+        public static readonly UnionXorEqConverter Singleton = new UnionXorEqConverter();
+    }
+
+    internal class UnionYieldConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionYield) || t == typeof(UnionYield?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionYield { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Yield>(reader);
+                    return new UnionYield { Yield = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionYield");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionYield)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Yield != null)
+            {
+                serializer.Serialize(writer, value.Yield);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionYield");
+        }
+
+        public static readonly UnionYieldConverter Singleton = new UnionYieldConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/light.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/light.schema/default/QuickType.cs
new file mode 100644
index 0000000..2be6542
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/light.schema/default/QuickType.cs
@@ -0,0 +1,73 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("LightParams", Required = Required.Always)]
+        public LightParams LightParams { get; set; }
+    }
+
+    public partial record LightParams
+    {
+        [JsonProperty("app_id", Required = Required.Always)]
+        public string AppId { get; set; }
+
+        [JsonProperty("outlet_id", Required = Required.Always)]
+        public string OutletId { get; set; }
+
+        [JsonProperty("rgba", Required = Required.Always)]
+        public string Rgba { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/list.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/list.schema/default/QuickType.cs
new file mode 100644
index 0000000..d2421e5
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/list.schema/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    /// <summary>
+    /// A recursive class type
+    /// </summary>
+    public partial record TopLevel
+    {
+        [JsonProperty("next", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TopLevel? Next { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/min-max-items.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/min-max-items.schema/default/QuickType.cs
new file mode 100644
index 0000000..07180cd
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/min-max-items.schema/default/QuickType.cs
@@ -0,0 +1,121 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("maxOnly", Required = Required.Always)]
+        public long[] MaxOnly { get; set; }
+
+        [JsonProperty("minAndMax", Required = Required.Always)]
+        public double[] MinAndMax { get; set; }
+
+        [JsonProperty("minOnly", Required = Required.Always)]
+        public string[] MinOnly { get; set; }
+
+        [JsonProperty("plain", Required = Required.Always)]
+        public string[] Plain { get; set; }
+
+        [JsonProperty("unionItems", Required = Required.Always)]
+        public UnionItem[] UnionItems { get; set; }
+    }
+
+    public partial struct UnionItem
+    {
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator UnionItem(long Integer) => new UnionItem { Integer = Integer };
+        public static implicit operator UnionItem(string String) => new UnionItem { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                UnionItemConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class UnionItemConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionItem) || t == typeof(UnionItem?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new UnionItem { Integer = integerValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new UnionItem { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionItem");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionItem)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionItem");
+        }
+
+        public static readonly UnionItemConverter Singleton = new UnionItemConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/minmax-integer.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/minmax-integer.schema/default/QuickType.cs
new file mode 100644
index 0000000..ca81abc
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/minmax-integer.schema/default/QuickType.cs
@@ -0,0 +1,82 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("free", Required = Required.Always)]
+        public long Free { get; set; }
+
+        [JsonProperty("intersection", Required = Required.Always)]
+        public long Intersection { get; set; }
+
+        [JsonProperty("max", Required = Required.Always)]
+        public long Max { get; set; }
+
+        [JsonProperty("min", Required = Required.Always)]
+        public long Min { get; set; }
+
+        [JsonProperty("minmax", Required = Required.Always)]
+        public long Minmax { get; set; }
+
+        [JsonProperty("minMaxIntersection", Required = Required.Always)]
+        public long MinMaxIntersection { get; set; }
+
+        [JsonProperty("minMaxUnion", Required = Required.Always)]
+        public long MinMaxUnion { get; set; }
+
+        [JsonProperty("union", Required = Required.Always)]
+        public long Union { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/minmax.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/minmax.schema/default/QuickType.cs
new file mode 100644
index 0000000..9b21e00
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/minmax.schema/default/QuickType.cs
@@ -0,0 +1,258 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("free", Required = Required.Always)]
+        public double Free { get; set; }
+
+        [JsonProperty("intersection", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
+        public double Intersection { get; set; }
+
+        [JsonProperty("max", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double Max { get; set; }
+
+        [JsonProperty("min", Required = Required.Always)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double Min { get; set; }
+
+        [JsonProperty("minmax", Required = Required.Always)]
+        [JsonConverter(typeof(StickyMinMaxValueCheckConverter))]
+        public double Minmax { get; set; }
+
+        [JsonProperty("minMaxIntersection", Required = Required.Always)]
+        [JsonConverter(typeof(StickyMinMaxValueCheckConverter))]
+        public double MinMaxIntersection { get; set; }
+
+        [JsonProperty("minMaxUnion", Required = Required.Always)]
+        public double MinMaxUnion { get; set; }
+
+        [JsonProperty("union", Required = Required.Always)]
+        [JsonConverter(typeof(IndigoMinMaxValueCheckConverter))]
+        public double Union { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 4 && value <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 4 && value <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
+    }
+
+    internal class TentacledMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 3)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 3)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly TentacledMinMaxValueCheckConverter Singleton = new TentacledMinMaxValueCheckConverter();
+    }
+
+    internal class StickyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 3 && value <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 3 && value <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly StickyMinMaxValueCheckConverter Singleton = new StickyMinMaxValueCheckConverter();
+    }
+
+    internal class IndigoMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 3 && value <= 6)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 3 && value <= 6)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly IndigoMinMaxValueCheckConverter Singleton = new IndigoMinMaxValueCheckConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/minmaxlength.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/minmaxlength.schema/default/QuickType.cs
new file mode 100644
index 0000000..5e70500
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/minmaxlength.schema/default/QuickType.cs
@@ -0,0 +1,284 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("intersection", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyMinMaxLengthCheckConverter))]
+        public string Intersection { get; set; }
+
+        [JsonProperty("inUnion", Required = Required.Always)]
+        public InUnion InUnion { get; set; }
+
+        [JsonProperty("maxlength", Required = Required.Always)]
+        [JsonConverter(typeof(TentacledMinMaxLengthCheckConverter))]
+        public string Maxlength { get; set; }
+
+        [JsonProperty("minlength", Required = Required.Always)]
+        [JsonConverter(typeof(StickyMinMaxLengthCheckConverter))]
+        public string Minlength { get; set; }
+
+        [JsonProperty("minMaxIntersection", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleMinMaxLengthCheckConverter))]
+        public string MinMaxIntersection { get; set; }
+
+        [JsonProperty("minmaxlength", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleMinMaxLengthCheckConverter))]
+        public string Minmaxlength { get; set; }
+
+        [JsonProperty("minMaxUnion", Required = Required.Always)]
+        public string MinMaxUnion { get; set; }
+
+        [JsonProperty("union", Required = Required.Always)]
+        [JsonConverter(typeof(IndigoMinMaxLengthCheckConverter))]
+        public string Union { get; set; }
+    }
+
+    public partial struct InUnion
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator InUnion(double Double) => new InUnion { Double = Double };
+        public static implicit operator InUnion(string String) => new InUnion { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                InUnionConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class InUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(InUnion) || t == typeof(InUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new InUnion { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    if (stringValue.Length >= 3 && stringValue.Length <= 5)
+                    {
+                        return new InUnion { String = stringValue };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type InUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (InUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                if (value.String.Length >= 3 && value.String.Length <= 5)
+                {
+                    serializer.Serialize(writer, value.String);
+                    return;
+                }
+            }
+            throw new Exception("Cannot marshal type InUnion");
+        }
+
+        public static readonly InUnionConverter Singleton = new InUnionConverter();
+    }
+
+    internal class PurpleMinMaxLengthCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(string);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            var value = serializer.Deserialize<string>(reader);
+            if (value.Length >= 3 && value.Length <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type string");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (string)untypedValue;
+            if (value.Length >= 3 && value.Length <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type string");
+        }
+
+        public static readonly PurpleMinMaxLengthCheckConverter Singleton = new PurpleMinMaxLengthCheckConverter();
+    }
+
+    internal class FluffyMinMaxLengthCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(string);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            var value = serializer.Deserialize<string>(reader);
+            if (value.Length >= 4 && value.Length <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type string");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (string)untypedValue;
+            if (value.Length >= 4 && value.Length <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type string");
+        }
+
+        public static readonly FluffyMinMaxLengthCheckConverter Singleton = new FluffyMinMaxLengthCheckConverter();
+    }
+
+    internal class TentacledMinMaxLengthCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(string);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            var value = serializer.Deserialize<string>(reader);
+            if (value.Length <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type string");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (string)untypedValue;
+            if (value.Length <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type string");
+        }
+
+        public static readonly TentacledMinMaxLengthCheckConverter Singleton = new TentacledMinMaxLengthCheckConverter();
+    }
+
+    internal class StickyMinMaxLengthCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(string);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            var value = serializer.Deserialize<string>(reader);
+            if (value.Length >= 3)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type string");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (string)untypedValue;
+            if (value.Length >= 3)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type string");
+        }
+
+        public static readonly StickyMinMaxLengthCheckConverter Singleton = new StickyMinMaxLengthCheckConverter();
+    }
+
+    internal class IndigoMinMaxLengthCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(string);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            var value = serializer.Deserialize<string>(reader);
+            if (value.Length >= 3 && value.Length <= 6)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type string");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (string)untypedValue;
+            if (value.Length >= 3 && value.Length <= 6)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type string");
+        }
+
+        public static readonly IndigoMinMaxLengthCheckConverter Singleton = new IndigoMinMaxLengthCheckConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/multi-type-enum.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/multi-type-enum.schema/default/QuickType.cs
new file mode 100644
index 0000000..98da722
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/multi-type-enum.schema/default/QuickType.cs
@@ -0,0 +1,197 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.Always)]
+        public FooUnion Foo { get; set; }
+    }
+
+    public enum FooEnum { A, B, C };
+
+    public partial struct FooUnion
+    {
+        public bool? Bool;
+        public double? Double;
+        public FooEnum? Enum;
+        public long? Integer;
+
+        public static implicit operator FooUnion(bool Bool) => new FooUnion { Bool = Bool };
+        public static implicit operator FooUnion(double Double) => new FooUnion { Double = Double };
+        public static implicit operator FooUnion(FooEnum Enum) => new FooUnion { Enum = Enum };
+        public static implicit operator FooUnion(long Integer) => new FooUnion { Integer = Integer };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                FooUnionConverter.Singleton,
+                FooEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class FooUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FooUnion) || t == typeof(FooUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new FooUnion { Integer = integerValue };
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FooUnion { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new FooUnion { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    switch (stringValue)
+                    {
+                        case "a":
+                            return new FooUnion { Enum = FooEnum.A };
+                        case "b":
+                            return new FooUnion { Enum = FooEnum.B };
+                        case "c":
+                            return new FooUnion { Enum = FooEnum.C };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type FooUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FooUnion)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case FooEnum.A:
+                        serializer.Serialize(writer, "a");
+                        return;
+                    case FooEnum.B:
+                        serializer.Serialize(writer, "b");
+                        return;
+                    case FooEnum.C:
+                        serializer.Serialize(writer, "c");
+                        return;
+                }
+            }
+            throw new Exception("Cannot marshal type FooUnion");
+        }
+
+        public static readonly FooUnionConverter Singleton = new FooUnionConverter();
+    }
+
+    internal class FooEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FooEnum) || t == typeof(FooEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "a":
+                    return FooEnum.A;
+                case "b":
+                    return FooEnum.B;
+                case "c":
+                    return FooEnum.C;
+            }
+            throw new Exception("Cannot unmarshal type FooEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FooEnum)untypedValue;
+            switch (value)
+            {
+                case FooEnum.A:
+                    serializer.Serialize(writer, "a");
+                    return;
+                case FooEnum.B:
+                    serializer.Serialize(writer, "b");
+                    return;
+                case FooEnum.C:
+                    serializer.Serialize(writer, "c");
+                    return;
+            }
+            throw new Exception("Cannot marshal type FooEnum");
+        }
+
+        public static readonly FooEnumConverter Singleton = new FooEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/mutually-recursive.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/mutually-recursive.schema/default/QuickType.cs
new file mode 100644
index 0000000..af54d91
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/mutually-recursive.schema/default/QuickType.cs
@@ -0,0 +1,114 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record Bar
+    {
+        [JsonProperty("foo", Required = Required.Always)]
+        public Foo Foo { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        [JsonProperty("bar", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bar? Bar { get; set; }
+    }
+
+    public partial struct Foo
+    {
+        public TopLevel? TopLevel;
+        public TopLevel[]? TopLevelArray;
+
+        public static implicit operator Foo(TopLevel TopLevel) => new Foo { TopLevel = TopLevel };
+        public static implicit operator Foo(TopLevel[] TopLevelArray) => new Foo { TopLevelArray = TopLevelArray };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                FooConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class FooConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Foo) || t == typeof(Foo?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TopLevel>(reader);
+                    return new Foo { TopLevel = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<TopLevel[]>(reader);
+                    return new Foo { TopLevelArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Foo");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Foo)untypedValue;
+            if (value.TopLevelArray != null)
+            {
+                serializer.Serialize(writer, value.TopLevelArray);
+                return;
+            }
+            if (value.TopLevel != null)
+            {
+                serializer.Serialize(writer, value.TopLevel);
+                return;
+            }
+            throw new Exception("Cannot marshal type Foo");
+        }
+
+        public static readonly FooConverter Singleton = new FooConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/nested-intersection-union.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/nested-intersection-union.schema/default/QuickType.cs
new file mode 100644
index 0000000..cc89742
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/nested-intersection-union.schema/default/QuickType.cs
@@ -0,0 +1,76 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("input", Required = Required.Always)]
+        public Item[] Input { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("content", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Content { get; set; }
+
+        [JsonProperty("id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Id { get; set; }
+
+        [JsonProperty("output", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Output { get; set; }
+
+        [JsonProperty("summary", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Summary { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/non-standard-ref.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/non-standard-ref.schema/default/QuickType.cs
new file mode 100644
index 0000000..e801a76
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/non-standard-ref.schema/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("bar", Required = Required.Always)]
+        public long Bar { get; set; }
+
+        [JsonProperty("foo", Required = Required.Always)]
+        public long Foo { get; set; }
+
+        [JsonProperty("quux", Required = Required.Always)]
+        public bool Quux { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/nullable-optional-one-of.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/nullable-optional-one-of.schema/default/QuickType.cs
new file mode 100644
index 0000000..6e0b680
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/nullable-optional-one-of.schema/default/QuickType.cs
@@ -0,0 +1,108 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("b")]
+        public string? B { get; set; }
+
+        [JsonProperty("kind", Required = Required.Always)]
+        public Kind Kind { get; set; }
+    }
+
+    public enum Kind { One, Two };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                KindConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class KindConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Kind) || t == typeof(Kind?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "one":
+                    return Kind.One;
+                case "two":
+                    return Kind.Two;
+            }
+            throw new Exception("Cannot unmarshal type Kind");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Kind)untypedValue;
+            switch (value)
+            {
+                case Kind.One:
+                    serializer.Serialize(writer, "one");
+                    return;
+                case Kind.Two:
+                    serializer.Serialize(writer, "two");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Kind");
+        }
+
+        public static readonly KindConverter Singleton = new KindConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/object-type-required.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/object-type-required.schema/default/QuickType.cs
new file mode 100644
index 0000000..340ada8
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/object-type-required.schema/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.Always)]
+        public string Foo { get; set; }
+
+        [JsonProperty("bar", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Bar { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/optional-any.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/optional-any.schema/default/QuickType.cs
new file mode 100644
index 0000000..7ba508f
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/optional-any.schema/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("bar", Required = Required.Always)]
+        public bool Bar { get; set; }
+
+        [JsonProperty("foo")]
+        public object? Foo { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs
new file mode 100644
index 0000000..4e6ea38
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs
@@ -0,0 +1,153 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("coordinates", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Coordinate[]? Coordinates { get; set; }
+
+        [JsonProperty("count", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? Count { get; set; }
+
+        [JsonProperty("label", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(MinMaxLengthCheckConverter))]
+        public string? Label { get; set; }
+
+        [JsonProperty("requiredCoordinates", Required = Required.Always)]
+        public Coordinate[] RequiredCoordinates { get; set; }
+
+        [JsonProperty("requiredCount", Required = Required.Always)]
+        public long RequiredCount { get; set; }
+
+        [JsonProperty("requiredLabel", Required = Required.Always)]
+        [JsonConverter(typeof(MinMaxLengthCheckConverter))]
+        public string RequiredLabel { get; set; }
+
+        [JsonProperty("weight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        public double? Weight { get; set; }
+    }
+
+    public partial record Coordinate
+    {
+        [JsonProperty("latitude", Required = Required.Always)]
+        public double Latitude { get; set; }
+
+        [JsonProperty("longitude", Required = Required.Always)]
+        public double Longitude { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class MinMaxLengthCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(string);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            var value = serializer.Deserialize<string>(reader);
+            if (value.Length >= 2 && value.Length <= 16)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type string");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (string)untypedValue;
+            if (value.Length >= 2 && value.Length <= 16)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type string");
+        }
+
+        public static readonly MinMaxLengthCheckConverter Singleton = new MinMaxLengthCheckConverter();
+    }
+
+    internal class MinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 0.5 && value <= 99.5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 0.5 && value <= 99.5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/optional-constraints.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/optional-constraints.schema/default/QuickType.cs
new file mode 100644
index 0000000..7a92f3f
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/optional-constraints.schema/default/QuickType.cs
@@ -0,0 +1,137 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("optDouble", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        public double? OptDouble { get; set; }
+
+        [JsonProperty("optInt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? OptInt { get; set; }
+
+        [JsonProperty("optPattern", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? OptPattern { get; set; }
+
+        [JsonProperty("optString", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(MinMaxLengthCheckConverter))]
+        public string? OptString { get; set; }
+
+        [JsonProperty("reqZeroMin", Required = Required.Always)]
+        public long ReqZeroMin { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class MinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 0.5 && value <= 99.5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 0.5 && value <= 99.5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+    }
+
+    internal class MinMaxLengthCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(string);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            var value = serializer.Deserialize<string>(reader);
+            if (value.Length >= 3 && value.Length <= 10)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type string");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (string)untypedValue;
+            if (value.Length >= 3 && value.Length <= 10)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type string");
+        }
+
+        public static readonly MinMaxLengthCheckConverter Singleton = new MinMaxLengthCheckConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/optional-date-time.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/optional-date-time.schema/default/QuickType.cs
new file mode 100644
index 0000000..a3a6376
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/optional-date-time.schema/default/QuickType.cs
@@ -0,0 +1,76 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("optional-date", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DateTimeOffset? OptionalDate { get; set; }
+
+        [JsonProperty("optional-date-time", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DateTimeOffset? OptionalDateTime { get; set; }
+
+        [JsonProperty("optional-time", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DateTimeOffset? OptionalTime { get; set; }
+
+        [JsonProperty("required-date", Required = Required.Always)]
+        public DateTimeOffset RequiredDate { get; set; }
+
+        [JsonProperty("required-date-time", Required = Required.Always)]
+        public DateTimeOffset RequiredDateTime { get; set; }
+
+        [JsonProperty("required-time", Required = Required.Always)]
+        public DateTimeOffset RequiredTime { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/optional-enum.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/optional-enum.schema/default/QuickType.cs
new file mode 100644
index 0000000..9f42460
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/optional-enum.schema/default/QuickType.cs
@@ -0,0 +1,108 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+
+        [JsonProperty("shortcut", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Shortcut? Shortcut { get; set; }
+    }
+
+    public enum Shortcut { Hidden, Visible };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ShortcutConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ShortcutConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Shortcut) || t == typeof(Shortcut?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "hidden":
+                    return Shortcut.Hidden;
+                case "visible":
+                    return Shortcut.Visible;
+            }
+            throw new Exception("Cannot unmarshal type Shortcut");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Shortcut)untypedValue;
+            switch (value)
+            {
+                case Shortcut.Hidden:
+                    serializer.Serialize(writer, "hidden");
+                    return;
+                case Shortcut.Visible:
+                    serializer.Serialize(writer, "visible");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Shortcut");
+        }
+
+        public static readonly ShortcutConverter Singleton = new ShortcutConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/pattern.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/pattern.schema/default/QuickType.cs
new file mode 100644
index 0000000..2f8ac46
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/pattern.schema/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("pattern1", Required = Required.Always)]
+        public string Pattern1 { get; set; }
+
+        [JsonProperty("pattern2", Required = Required.Always)]
+        public string Pattern2 { get; set; }
+
+        [JsonProperty("union", Required = Required.Always)]
+        public string Union { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/postman-collection.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/postman-collection.schema/default/QuickType.cs
new file mode 100644
index 0000000..dff15cf
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/postman-collection.schema/default/QuickType.cs
@@ -0,0 +1,76 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    /// <summary>
+    /// Postman collection
+    /// </summary>
+    public partial record TopLevel
+    {
+        [JsonProperty("item", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TopLevel[]? Item { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Name { get; set; }
+
+        [JsonProperty("response", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Response[]? Response { get; set; }
+    }
+
+    public partial record Response
+    {
+        [JsonProperty("body", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Body { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/prefix-items.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/prefix-items.schema/default/QuickType.cs
new file mode 100644
index 0000000..d569477
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/prefix-items.schema/default/QuickType.cs
@@ -0,0 +1,111 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("open", Required = Required.Always)]
+        public Open[] Open { get; set; }
+
+        [JsonProperty("tuple", Required = Required.Always)]
+        public Open[] Tuple { get; set; }
+    }
+
+    public partial struct Open
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Open(bool Bool) => new Open { Bool = Bool };
+        public static implicit operator Open(long Integer) => new Open { Integer = Integer };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                OpenConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class OpenConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Open) || t == typeof(Open?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Open { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Open { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Open");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Open)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Open");
+        }
+
+        public static readonly OpenConverter Singleton = new OpenConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/recursive-union-flattening.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/recursive-union-flattening.schema/default/QuickType.cs
new file mode 100644
index 0000000..0283afa
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/recursive-union-flattening.schema/default/QuickType.cs
@@ -0,0 +1,451 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevelClass
+    {
+        [JsonProperty("x")]
+        public X? X { get; set; }
+    }
+
+    public partial record XClass
+    {
+        [JsonProperty("x")]
+        public X? X { get; set; }
+    }
+
+    public partial struct X
+    {
+        public XElement[]? AnythingArray;
+        public Dictionary<string, object>? AnythingMap;
+        public bool? Bool;
+        public double? Double;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator X(XElement[] AnythingArray) => new X { AnythingArray = AnythingArray };
+        public static implicit operator X(Dictionary<string, object> AnythingMap) => new X { AnythingMap = AnythingMap };
+        public static implicit operator X(bool Bool) => new X { Bool = Bool };
+        public static implicit operator X(double Double) => new X { Double = Double };
+        public static implicit operator X(long Integer) => new X { Integer = Integer };
+        public static implicit operator X(string String) => new X { String = String };
+        public bool IsNull => AnythingArray == null && Bool == null && Double == null && Integer == null && AnythingMap == null && String == null;
+    }
+
+    public partial struct XElement
+    {
+        public object[]? AnythingArray;
+        public bool? Bool;
+        public double? Double;
+        public long? Integer;
+        public string? String;
+        public XClass? XClass;
+
+        public static implicit operator XElement(object[] AnythingArray) => new XElement { AnythingArray = AnythingArray };
+        public static implicit operator XElement(bool Bool) => new XElement { Bool = Bool };
+        public static implicit operator XElement(double Double) => new XElement { Double = Double };
+        public static implicit operator XElement(long Integer) => new XElement { Integer = Integer };
+        public static implicit operator XElement(string String) => new XElement { String = String };
+        public static implicit operator XElement(XClass XClass) => new XElement { XClass = XClass };
+        public bool IsNull => AnythingArray == null && Bool == null && XClass == null && Double == null && Integer == null && String == null;
+    }
+
+    public partial struct TopLevelElement
+    {
+        public object[]? AnythingArray;
+        public bool? Bool;
+        public double? Double;
+        public long? Integer;
+        public string? String;
+        public TopLevelClass? TopLevelClass;
+
+        public static implicit operator TopLevelElement(object[] AnythingArray) => new TopLevelElement { AnythingArray = AnythingArray };
+        public static implicit operator TopLevelElement(bool Bool) => new TopLevelElement { Bool = Bool };
+        public static implicit operator TopLevelElement(double Double) => new TopLevelElement { Double = Double };
+        public static implicit operator TopLevelElement(long Integer) => new TopLevelElement { Integer = Integer };
+        public static implicit operator TopLevelElement(string String) => new TopLevelElement { String = String };
+        public static implicit operator TopLevelElement(TopLevelClass TopLevelClass) => new TopLevelElement { TopLevelClass = TopLevelClass };
+        public bool IsNull => AnythingArray == null && Bool == null && TopLevelClass == null && Double == null && Integer == null && String == null;
+    }
+
+    public partial struct TopLevelUnion
+    {
+        public TopLevelElement[]? AnythingArray;
+        public Dictionary<string, object>? AnythingMap;
+        public bool? Bool;
+        public double? Double;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator TopLevelUnion(TopLevelElement[] AnythingArray) => new TopLevelUnion { AnythingArray = AnythingArray };
+        public static implicit operator TopLevelUnion(Dictionary<string, object> AnythingMap) => new TopLevelUnion { AnythingMap = AnythingMap };
+        public static implicit operator TopLevelUnion(bool Bool) => new TopLevelUnion { Bool = Bool };
+        public static implicit operator TopLevelUnion(double Double) => new TopLevelUnion { Double = Double };
+        public static implicit operator TopLevelUnion(long Integer) => new TopLevelUnion { Integer = Integer };
+        public static implicit operator TopLevelUnion(string String) => new TopLevelUnion { String = String };
+        public bool IsNull => AnythingArray == null && Bool == null && Double == null && Integer == null && AnythingMap == null && String == null;
+    }
+
+    public class TopLevel
+    {
+        public static object FromJson(string json) => JsonConvert.DeserializeObject<object>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this object self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TopLevelUnionConverter.Singleton,
+                TopLevelElementConverter.Singleton,
+                XConverter.Singleton,
+                XElementConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TopLevelUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TopLevelUnion) || t == typeof(TopLevelUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new TopLevelUnion { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new TopLevelUnion { Integer = integerValue };
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new TopLevelUnion { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new TopLevelUnion { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new TopLevelUnion { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, object>>(reader);
+                    return new TopLevelUnion { AnythingMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<TopLevelElement[]>(reader);
+                    return new TopLevelUnion { AnythingArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type TopLevelUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TopLevelUnion)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.AnythingArray != null)
+            {
+                serializer.Serialize(writer, value.AnythingArray);
+                return;
+            }
+            if (value.AnythingMap != null)
+            {
+                serializer.Serialize(writer, value.AnythingMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type TopLevelUnion");
+        }
+
+        public static readonly TopLevelUnionConverter Singleton = new TopLevelUnionConverter();
+    }
+
+    internal class TopLevelElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TopLevelElement) || t == typeof(TopLevelElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new TopLevelElement { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new TopLevelElement { Integer = integerValue };
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new TopLevelElement { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new TopLevelElement { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new TopLevelElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TopLevelClass>(reader);
+                    return new TopLevelElement { TopLevelClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new TopLevelElement { AnythingArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type TopLevelElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TopLevelElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.AnythingArray != null)
+            {
+                serializer.Serialize(writer, value.AnythingArray);
+                return;
+            }
+            if (value.TopLevelClass != null)
+            {
+                serializer.Serialize(writer, value.TopLevelClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type TopLevelElement");
+        }
+
+        public static readonly TopLevelElementConverter Singleton = new TopLevelElementConverter();
+    }
+
+    internal class XConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(X) || t == typeof(X?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new X { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new X { Integer = integerValue };
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new X { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new X { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new X { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, object>>(reader);
+                    return new X { AnythingMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<XElement[]>(reader);
+                    return new X { AnythingArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type X");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (X)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.AnythingArray != null)
+            {
+                serializer.Serialize(writer, value.AnythingArray);
+                return;
+            }
+            if (value.AnythingMap != null)
+            {
+                serializer.Serialize(writer, value.AnythingMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type X");
+        }
+
+        public static readonly XConverter Singleton = new XConverter();
+    }
+
+    internal class XElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(XElement) || t == typeof(XElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new XElement { };
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new XElement { Integer = integerValue };
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new XElement { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new XElement { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new XElement { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<XClass>(reader);
+                    return new XElement { XClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<object[]>(reader);
+                    return new XElement { AnythingArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type XElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (XElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.AnythingArray != null)
+            {
+                serializer.Serialize(writer, value.AnythingArray);
+                return;
+            }
+            if (value.XClass != null)
+            {
+                serializer.Serialize(writer, value.XClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type XElement");
+        }
+
+        public static readonly XElementConverter Singleton = new XElementConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/ref-id-files.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/ref-id-files.schema/default/QuickType.cs
new file mode 100644
index 0000000..3fbd5dc
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/ref-id-files.schema/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.Always)]
+        public long Foo { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/ref-remote.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/ref-remote.schema/default/QuickType.cs
new file mode 100644
index 0000000..d2421e5
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/ref-remote.schema/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    /// <summary>
+    /// A recursive class type
+    /// </summary>
+    public partial record TopLevel
+    {
+        [JsonProperty("next", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TopLevel? Next { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/renaming-bug.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/renaming-bug.schema/default/QuickType.cs
new file mode 100644
index 0000000..214fe96
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/renaming-bug.schema/default/QuickType.cs
@@ -0,0 +1,366 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("version", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Version { get; set; }
+
+        [JsonProperty("fruits", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Fruit[]? Fruits { get; set; }
+
+        [JsonProperty("vehicles", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Vehicle[]? Vehicles { get; set; }
+    }
+
+    public partial record Fruit
+    {
+        [JsonProperty("apple", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Apple { get; set; }
+
+        [JsonProperty("berries", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Berry[]? Berries { get; set; }
+
+        [JsonProperty("orange", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Orange { get; set; }
+    }
+
+    public partial record Berry
+    {
+        [JsonProperty("color", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Color? Color { get; set; }
+
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(MinMaxLengthCheckConverter))]
+        public string? Name { get; set; }
+
+        [JsonProperty("shapes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Shape[]? Shapes { get; set; }
+    }
+
+    public partial record Color
+    {
+        [JsonProperty("rgb", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Rgb { get; set; }
+    }
+
+    public partial record Shape
+    {
+        [JsonProperty("geometry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Geometry? Geometry { get; set; }
+
+        [JsonProperty("history", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public History? History { get; set; }
+    }
+
+    public partial record Geometry
+    {
+        [JsonProperty("rectShape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public RectShape? RectShape { get; set; }
+
+        [JsonProperty("circularShape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public CircularShape[]? CircularShape { get; set; }
+    }
+
+    public partial record CircularShape
+    {
+        [JsonProperty("shapeName", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? ShapeName { get; set; }
+    }
+
+    public partial record RectShape
+    {
+        [JsonProperty("parts", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Part[]? Parts { get; set; }
+    }
+
+    public partial record Part
+    {
+        [JsonProperty("depth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Depth { get; set; }
+
+        [JsonProperty("length", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Length { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Width { get; set; }
+    }
+
+    public partial record History
+    {
+        [JsonProperty("class", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Class { get; set; }
+    }
+
+    public partial record Vehicle
+    {
+        [JsonProperty("brand", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Brand { get; set; }
+
+        [JsonProperty("id", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(MinMaxLengthCheckConverter))]
+        public string? Id { get; set; }
+
+        [JsonProperty("speed", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Speed? Speed { get; set; }
+
+        [JsonProperty("subModule", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? SubModule { get; set; }
+
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VehicleType? Type { get; set; }
+
+        [JsonProperty("year", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Year { get; set; }
+    }
+
+    public partial record Speed
+    {
+        [JsonProperty("velocity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Limit? Velocity { get; set; }
+    }
+
+    public partial record Limit
+    {
+        [JsonProperty("maximum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Maximum { get; set; }
+
+        [JsonProperty("minimum", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Minimum { get; set; }
+    }
+
+    public partial record VehicleType
+    {
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Name? Name { get; set; }
+
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Axis? Width { get; set; }
+
+        [JsonProperty("length", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Axis? Length { get; set; }
+    }
+
+    public enum Axis { X, Y, Z, Xy, Yz, Zx };
+
+    public enum Name { Truck, Bus, Car, Van, Train, Bike, Aeroplane, Jeep, Trolley };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                AxisConverter.Singleton,
+                NameConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class MinMaxLengthCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(string);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            var value = serializer.Deserialize<string>(reader);
+            if (value.Length >= 1)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type string");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (string)untypedValue;
+            if (value.Length >= 1)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type string");
+        }
+
+        public static readonly MinMaxLengthCheckConverter Singleton = new MinMaxLengthCheckConverter();
+    }
+
+    internal class AxisConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Axis) || t == typeof(Axis?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "X":
+                    return Axis.X;
+                case "Y":
+                    return Axis.Y;
+                case "Z":
+                    return Axis.Z;
+                case "XY":
+                    return Axis.Xy;
+                case "YZ":
+                    return Axis.Yz;
+                case "ZX":
+                    return Axis.Zx;
+            }
+            throw new Exception("Cannot unmarshal type Axis");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Axis)untypedValue;
+            switch (value)
+            {
+                case Axis.X:
+                    serializer.Serialize(writer, "X");
+                    return;
+                case Axis.Y:
+                    serializer.Serialize(writer, "Y");
+                    return;
+                case Axis.Z:
+                    serializer.Serialize(writer, "Z");
+                    return;
+                case Axis.Xy:
+                    serializer.Serialize(writer, "XY");
+                    return;
+                case Axis.Yz:
+                    serializer.Serialize(writer, "YZ");
+                    return;
+                case Axis.Zx:
+                    serializer.Serialize(writer, "ZX");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Axis");
+        }
+
+        public static readonly AxisConverter Singleton = new AxisConverter();
+    }
+
+    internal class NameConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Name) || t == typeof(Name?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "truck":
+                    return Name.Truck;
+                case "bus":
+                    return Name.Bus;
+                case "car":
+                    return Name.Car;
+                case "van":
+                    return Name.Van;
+                case "train":
+                    return Name.Train;
+                case "Bike":
+                    return Name.Bike;
+                case "Aeroplane":
+                    return Name.Aeroplane;
+                case "Jeep":
+                    return Name.Jeep;
+                case "Trolley":
+                    return Name.Trolley;
+            }
+            throw new Exception("Cannot unmarshal type Name");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Name)untypedValue;
+            switch (value)
+            {
+                case Name.Truck:
+                    serializer.Serialize(writer, "truck");
+                    return;
+                case Name.Bus:
+                    serializer.Serialize(writer, "bus");
+                    return;
+                case Name.Car:
+                    serializer.Serialize(writer, "car");
+                    return;
+                case Name.Van:
+                    serializer.Serialize(writer, "van");
+                    return;
+                case Name.Train:
+                    serializer.Serialize(writer, "train");
+                    return;
+                case Name.Bike:
+                    serializer.Serialize(writer, "Bike");
+                    return;
+                case Name.Aeroplane:
+                    serializer.Serialize(writer, "Aeroplane");
+                    return;
+                case Name.Jeep:
+                    serializer.Serialize(writer, "Jeep");
+                    return;
+                case Name.Trolley:
+                    serializer.Serialize(writer, "Trolley");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Name");
+        }
+
+        public static readonly NameConverter Singleton = new NameConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/required-draft3.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/required-draft3.schema/default/QuickType.cs
new file mode 100644
index 0000000..01f82cf
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/required-draft3.schema/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("longitude", Required = Required.Always)]
+        public double Longitude { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/required-non-properties.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/required-non-properties.schema/default/QuickType.cs
new file mode 100644
index 0000000..97d0e74
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/required-non-properties.schema/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.Always)]
+        public long Foo { get; set; }
+
+        [JsonProperty("bar", Required = Required.AllowNull)]
+        public object Bar { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/required.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/required.schema/default/QuickType.cs
new file mode 100644
index 0000000..01f82cf
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/required.schema/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("longitude", Required = Required.Always)]
+        public double Longitude { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/rust-cycle-breaker-union.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/rust-cycle-breaker-union.schema/default/QuickType.cs
new file mode 100644
index 0000000..ad8e5a0
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/rust-cycle-breaker-union.schema/default/QuickType.cs
@@ -0,0 +1,129 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("next")]
+        public Next? Next { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record Node
+    {
+        [JsonProperty("next")]
+        public Next? Next { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial struct Next
+    {
+        public Node? Node;
+        public string? String;
+
+        public static implicit operator Next(Node Node) => new Next { Node = Node };
+        public static implicit operator Next(string String) => new Next { String = String };
+        public bool IsNull => Node == null && String == null;
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                NextConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class NextConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Next) || t == typeof(Next?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new Next { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Next { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Node>(reader);
+                    return new Next { Node = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Next");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Next)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Node != null)
+            {
+                serializer.Serialize(writer, value.Node);
+                return;
+            }
+            throw new Exception("Cannot marshal type Next");
+        }
+
+        public static readonly NextConverter Singleton = new NextConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/schema-constraints.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/schema-constraints.schema/default/QuickType.cs
new file mode 100644
index 0000000..3858b84
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/schema-constraints.schema/default/QuickType.cs
@@ -0,0 +1,128 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("minMaxLength", Required = Required.Always)]
+        [JsonConverter(typeof(MinMaxLengthCheckConverter))]
+        public string MinMaxLength { get; set; }
+
+        [JsonProperty("percent", Required = Required.Always)]
+        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        public double Percent { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class MinMaxLengthCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(string);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            var value = serializer.Deserialize<string>(reader);
+            if (value.Length >= 5 && value.Length <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type string");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (string)untypedValue;
+            if (value.Length >= 5 && value.Length <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type string");
+        }
+
+        public static readonly MinMaxLengthCheckConverter Singleton = new MinMaxLengthCheckConverter();
+    }
+
+    internal class MinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 0 && value <= 1)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 0 && value <= 1)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/simple-ref.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/simple-ref.schema/default/QuickType.cs
new file mode 100644
index 0000000..d2421e5
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/simple-ref.schema/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    /// <summary>
+    /// A recursive class type
+    /// </summary>
+    public partial record TopLevel
+    {
+        [JsonProperty("next", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TopLevel? Next { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/strict-optional.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/strict-optional.schema/default/QuickType.cs
new file mode 100644
index 0000000..5783251
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/strict-optional.schema/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("foo", Required = Required.AllowNull)]
+        public double? Foo { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/top-level-primitive.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/top-level-primitive.schema/default/QuickType.cs
new file mode 100644
index 0000000..c98fc10
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/top-level-primitive.schema/default/QuickType.cs
@@ -0,0 +1,55 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public class TopLevel
+    {
+        public static double FromJson(string json) => JsonConvert.DeserializeObject<double>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this double self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/tuple.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/tuple.schema/default/QuickType.cs
new file mode 100644
index 0000000..6ad67eb
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/tuple.schema/default/QuickType.cs
@@ -0,0 +1,108 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("tuple", Required = Required.Always)]
+        public Tuple[] Tuple { get; set; }
+    }
+
+    public partial struct Tuple
+    {
+        public bool? Bool;
+        public long? Integer;
+
+        public static implicit operator Tuple(bool Bool) => new Tuple { Bool = Bool };
+        public static implicit operator Tuple(long Integer) => new Tuple { Integer = Integer };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                TupleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class TupleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Tuple) || t == typeof(Tuple?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Tuple { Integer = integerValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Tuple { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Tuple");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Tuple)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Tuple");
+        }
+
+        public static readonly TupleConverter Singleton = new TupleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/unevaluated-properties.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/unevaluated-properties.schema/default/QuickType.cs
new file mode 100644
index 0000000..9b8e591
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/unevaluated-properties.schema/default/QuickType.cs
@@ -0,0 +1,79 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("config", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Config? Config { get; set; }
+    }
+
+    public partial record Config
+    {
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Name { get; set; }
+
+        [JsonProperty("settings", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Dictionary<string, Item[]>? Settings { get; set; }
+    }
+
+    public partial record Item
+    {
+        [JsonProperty("key", Required = Required.Always)]
+        public string Key { get; set; }
+
+        [JsonProperty("value", Required = Required.Always)]
+        public string Value { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/union-int-double.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/union-int-double.schema/default/QuickType.cs
new file mode 100644
index 0000000..72d4963
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/union-int-double.schema/default/QuickType.cs
@@ -0,0 +1,119 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("value", Required = Required.Always)]
+        public Value Value { get; set; }
+    }
+
+    public partial struct Value
+    {
+        public double? Double;
+        public long? Integer;
+        public string? String;
+
+        public static implicit operator Value(double Double) => new Value { Double = Double };
+        public static implicit operator Value(long Integer) => new Value { Integer = Integer };
+        public static implicit operator Value(string String) => new Value { String = String };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ValueConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Value) || t == typeof(Value?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                    var integerValue = serializer.Deserialize<long>(reader);
+                    return new Value { Integer = integerValue };
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Value { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Value { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Value");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Value)untypedValue;
+            if (value.Integer != null)
+            {
+                serializer.Serialize(writer, value.Integer.Value);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Value");
+        }
+
+        public static readonly ValueConverter Singleton = new ValueConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/union-list.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/union-list.schema/default/QuickType.cs
new file mode 100644
index 0000000..7e48097
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/union-list.schema/default/QuickType.cs
@@ -0,0 +1,115 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("list", Required = Required.Always)]
+        public UnionList List { get; set; }
+    }
+
+    public partial record UnionListClass
+    {
+        [JsonProperty("next", Required = Required.Always)]
+        public UnionList Next { get; set; }
+    }
+
+    public partial struct UnionList
+    {
+        public double? Double;
+        public UnionListClass? UnionListClass;
+
+        public static implicit operator UnionList(double Double) => new UnionList { Double = Double };
+        public static implicit operator UnionList(UnionListClass UnionListClass) => new UnionList { UnionListClass = UnionListClass };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                UnionListConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class UnionListConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionList) || t == typeof(UnionList?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionList { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnionListClass>(reader);
+                    return new UnionList { UnionListClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionList");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionList)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnionListClass != null)
+            {
+                serializer.Serialize(writer, value.UnionListClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionList");
+        }
+
+        public static readonly UnionListConverter Singleton = new UnionListConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/union.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/union.schema/default/QuickType.cs
new file mode 100644
index 0000000..de71561
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/union.schema/default/QuickType.cs
@@ -0,0 +1,67 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("one", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public long? One { get; set; }
+
+        [JsonProperty("two", Required = Required.Always)]
+        public bool Two { get; set; }
+
+        [JsonProperty("three", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Three { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel[] FromJson(string json) => JsonConvert.DeserializeObject<TopLevel[]>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/uuid.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/uuid.schema/default/QuickType.cs
new file mode 100644
index 0000000..f78765a
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/uuid.schema/default/QuickType.cs
@@ -0,0 +1,170 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("arrNullable", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Guid?[]? ArrNullable { get; set; }
+
+        [JsonProperty("arrOne", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Guid[]? ArrOne { get; set; }
+
+        [JsonProperty("nullable", Required = Required.AllowNull)]
+        public Guid? Nullable { get; set; }
+
+        [JsonProperty("one", Required = Required.Always)]
+        public Guid One { get; set; }
+
+        [JsonProperty("optional", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Guid? Optional { get; set; }
+
+        [JsonProperty("unionWithEnum", Required = Required.Always)]
+        public UnionWithEnumUnion UnionWithEnum { get; set; }
+    }
+
+    public enum UnionWithEnumEnum { Foo };
+
+    public partial struct UnionWithEnumUnion
+    {
+        public UnionWithEnumEnum? Enum;
+        public Guid? Uuid;
+
+        public static implicit operator UnionWithEnumUnion(UnionWithEnumEnum Enum) => new UnionWithEnumUnion { Enum = Enum };
+        public static implicit operator UnionWithEnumUnion(Guid Uuid) => new UnionWithEnumUnion { Uuid = Uuid };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                UnionWithEnumUnionConverter.Singleton,
+                UnionWithEnumEnumConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class UnionWithEnumUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWithEnumUnion) || t == typeof(UnionWithEnumUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    if (stringValue == "foo")
+                    {
+                        return new UnionWithEnumUnion { Enum = UnionWithEnumEnum.Foo };
+                    }
+                    Guid guid;
+                    if (Guid.TryParse(stringValue, out guid))
+                    {
+                        return new UnionWithEnumUnion { Uuid = guid };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type UnionWithEnumUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionWithEnumUnion)untypedValue;
+            if (value.Enum != null)
+            {
+                if (value.Enum == UnionWithEnumEnum.Foo)
+                {
+                    serializer.Serialize(writer, "foo");
+                    return;
+                }
+            }
+            if (value.Uuid != null)
+            {
+                serializer.Serialize(writer, value.Uuid.Value.ToString("D", System.Globalization.CultureInfo.InvariantCulture));
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionWithEnumUnion");
+        }
+
+        public static readonly UnionWithEnumUnionConverter Singleton = new UnionWithEnumUnionConverter();
+    }
+
+    internal class UnionWithEnumEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionWithEnumEnum) || t == typeof(UnionWithEnumEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "foo")
+            {
+                return UnionWithEnumEnum.Foo;
+            }
+            throw new Exception("Cannot unmarshal type UnionWithEnumEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (UnionWithEnumEnum)untypedValue;
+            if (value == UnionWithEnumEnum.Foo)
+            {
+                serializer.Serialize(writer, "foo");
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionWithEnumEnum");
+        }
+
+        public static readonly UnionWithEnumEnumConverter Singleton = new UnionWithEnumEnumConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/vega-lite.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/vega-lite.schema/default/QuickType.cs
new file mode 100644
index 0000000..a1ba5ce
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/vega-lite.schema/default/QuickType.cs
@@ -0,0 +1,12377 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        /// <summary>
+        /// URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you
+        /// have a reason to change this, use `https://vega.github.io/schema/vega-lite/v2.json`.
+        /// Setting the `$schema` property allows automatic validation and autocomplete in editors
+        /// that support JSON schema.
+        /// </summary>
+        [JsonProperty("$schema", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Schema { get; set; }
+
+        /// <summary>
+        /// Sets how the visualization size should be determined. If a string, should be one of
+        /// `"pad"`, `"fit"` or `"none"`.
+        /// Object values can additionally specify parameters for content sizing and automatic
+        /// resizing.
+        /// `"fit"` is only supported for single and layered views that don't use `rangeStep`.
+        ///
+        /// __Default value__: `pad`
+        /// </summary>
+        [JsonProperty("autosize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Autosize? Autosize { get; set; }
+
+        /// <summary>
+        /// CSS color property to use as the background of visualization.
+        ///
+        /// __Default value:__ none (transparent)
+        /// </summary>
+        [JsonProperty("background", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Background { get; set; }
+
+        /// <summary>
+        /// Vega-Lite configuration object.  This property can only be defined at the top-level of a
+        /// specification.
+        /// </summary>
+        [JsonProperty("config", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Config? Config { get; set; }
+
+        /// <summary>
+        /// An object describing the data source
+        /// </summary>
+        [JsonProperty("data", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Data? Data { get; set; }
+
+        /// <summary>
+        /// Description of this mark for commenting purpose.
+        /// </summary>
+        [JsonProperty("description", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Description { get; set; }
+
+        /// <summary>
+        /// A key-value mapping between encoding channels and definition of fields.
+        /// </summary>
+        [JsonProperty("encoding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public EncodingWithFacet? Encoding { get; set; }
+
+        /// <summary>
+        /// The height of a visualization.
+        ///
+        /// __Default value:__
+        /// - If a view's [`autosize`](size.html#autosize) type is `"fit"` or its y-channel has a
+        /// [continuous scale](scale.html#continuous), the height will be the value of
+        /// [`config.view.height`](spec.html#config).
+        /// - For y-axis with a band or point scale: if [`rangeStep`](scale.html#band) is a numeric
+        /// value or unspecified, the height is [determined by the range step, paddings, and the
+        /// cardinality of the field mapped to y-channel](scale.html#band). Otherwise, if the
+        /// `rangeStep` is `null`, the height will be the value of
+        /// [`config.view.height`](spec.html#config).
+        /// - If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.
+        ///
+        /// __Note__: For plots with [`row` and `column` channels](encoding.html#facet), this
+        /// represents the height of a single view.
+        ///
+        /// __See also:__ The documentation for [width and height](size.html) contains more examples.
+        /// </summary>
+        [JsonProperty("height", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Height { get; set; }
+
+        /// <summary>
+        /// A string describing the mark type (one of `"bar"`, `"circle"`, `"square"`, `"tick"`,
+        /// `"line"`,
+        /// * `"area"`, `"point"`, `"rule"`, `"geoshape"`, and `"text"`) or a [mark definition
+        /// object](mark.html#mark-def).
+        /// </summary>
+        [JsonProperty("mark", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AnyMark? Mark { get; set; }
+
+        /// <summary>
+        /// Name of the visualization for later reference.
+        /// </summary>
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Name { get; set; }
+
+        /// <summary>
+        /// The default visualization padding, in pixels, from the edge of the visualization canvas
+        /// to the data rectangle.  If a number, specifies padding for all sides.
+        /// If an object, the value should have the format `{"left": 5, "top": 5, "right": 5,
+        /// "bottom": 5}` to specify padding for each side of the visualization.
+        ///
+        /// __Default value__: `5`
+        /// </summary>
+        [JsonProperty("padding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Padding? Padding { get; set; }
+
+        /// <summary>
+        /// An object defining properties of geographic projection.
+        ///
+        /// Works with `"geoshape"` marks and `"point"` or `"line"` marks that have a channel (one or
+        /// more of `"X"`, `"X2"`, `"Y"`, `"Y2"`) with type `"latitude"`, or `"longitude"`.
+        /// </summary>
+        [JsonProperty("projection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Projection? Projection { get; set; }
+
+        /// <summary>
+        /// A key-value mapping between selection names and definitions.
+        /// </summary>
+        [JsonProperty("selection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Dictionary<string, SelectionDef>? Selection { get; set; }
+
+        /// <summary>
+        /// Title for the plot.
+        /// </summary>
+        [JsonProperty("title", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Title? Title { get; set; }
+
+        /// <summary>
+        /// An array of data transformations such as filter and new field calculation.
+        /// </summary>
+        [JsonProperty("transform", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Transform[]? Transform { get; set; }
+
+        /// <summary>
+        /// The width of a visualization.
+        ///
+        /// __Default value:__ This will be determined by the following rules:
+        ///
+        /// - If a view's [`autosize`](size.html#autosize) type is `"fit"` or its x-channel has a
+        /// [continuous scale](scale.html#continuous), the width will be the value of
+        /// [`config.view.width`](spec.html#config).
+        /// - For x-axis with a band or point scale: if [`rangeStep`](scale.html#band) is a numeric
+        /// value or unspecified, the width is [determined by the range step, paddings, and the
+        /// cardinality of the field mapped to x-channel](scale.html#band).   Otherwise, if the
+        /// `rangeStep` is `null`, the width will be the value of
+        /// [`config.view.width`](spec.html#config).
+        /// - If no field is mapped to `x` channel, the `width` will be the value of
+        /// [`config.scale.textXRangeStep`](size.html#default-width-and-height) for `text` mark and
+        /// the value of `rangeStep` for other marks.
+        ///
+        /// __Note:__ For plots with [`row` and `column` channels](encoding.html#facet), this
+        /// represents the width of a single view.
+        ///
+        /// __See also:__ The documentation for [width and height](size.html) contains more examples.
+        /// </summary>
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Width { get; set; }
+
+        /// <summary>
+        /// Layer or single view specifications to be layered.
+        ///
+        /// __Note__: Specifications inside `layer` cannot use `row` and `column` channels as
+        /// layering facet specifications is not allowed.
+        /// </summary>
+        [JsonProperty("layer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LayerSpec[]? Layer { get; set; }
+
+        /// <summary>
+        /// Scale, axis, and legend resolutions for layers.
+        ///
+        /// Scale, axis, and legend resolutions for facets.
+        ///
+        /// Scale and legend resolutions for repeated charts.
+        ///
+        /// Scale, axis, and legend resolutions for vertically concatenated charts.
+        ///
+        /// Scale, axis, and legend resolutions for horizontally concatenated charts.
+        /// </summary>
+        [JsonProperty("resolve", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Resolve? Resolve { get; set; }
+
+        /// <summary>
+        /// An object that describes mappings between `row` and `column` channels and their field
+        /// definitions.
+        /// </summary>
+        [JsonProperty("facet", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FacetMapping? Facet { get; set; }
+
+        /// <summary>
+        /// A specification of the view that gets faceted.
+        /// </summary>
+        [JsonProperty("spec", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Spec? Spec { get; set; }
+
+        /// <summary>
+        /// An object that describes what fields should be repeated into views that are laid out as a
+        /// `row` or `column`.
+        /// </summary>
+        [JsonProperty("repeat", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Repeat? Repeat { get; set; }
+
+        /// <summary>
+        /// A list of views that should be concatenated and put into a column.
+        /// </summary>
+        [JsonProperty("vconcat", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Spec[]? Vconcat { get; set; }
+
+        /// <summary>
+        /// A list of views that should be concatenated and put into a row.
+        /// </summary>
+        [JsonProperty("hconcat", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Spec[]? Hconcat { get; set; }
+    }
+
+    public partial record AutoSizeParams
+    {
+        /// <summary>
+        /// Determines how size calculation should be performed, one of `"content"` or `"padding"`.
+        /// The default setting (`"content"`) interprets the width and height settings as the data
+        /// rectangle (plotting) dimensions, to which padding is then added. In contrast, the
+        /// `"padding"` setting includes the padding within the view size calculations, such that the
+        /// width and height settings indicate the **total** intended size of the view.
+        ///
+        /// __Default value__: `"content"`
+        /// </summary>
+        [JsonProperty("contains", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Contains? Contains { get; set; }
+
+        /// <summary>
+        /// A boolean flag indicating if autosize layout should be re-calculated on every view
+        /// update.
+        ///
+        /// __Default value__: `false`
+        /// </summary>
+        [JsonProperty("resize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Resize { get; set; }
+
+        /// <summary>
+        /// The sizing format type. One of `"pad"`, `"fit"` or `"none"`. See the [autosize
+        /// type](https://vega.github.io/vega-lite/docs/size.html#autosize) documentation for
+        /// descriptions of each.
+        ///
+        /// __Default value__: `"pad"`
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AutosizeType? Type { get; set; }
+    }
+
+    /// <summary>
+    /// Vega-Lite configuration object.  This property can only be defined at the top-level of a
+    /// specification.
+    /// </summary>
+    public partial record Config
+    {
+        /// <summary>
+        /// Area-Specific Config
+        /// </summary>
+        [JsonProperty("area", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkConfig? Area { get; set; }
+
+        /// <summary>
+        /// Sets how the visualization size should be determined. If a string, should be one of
+        /// `"pad"`, `"fit"` or `"none"`.
+        /// Object values can additionally specify parameters for content sizing and automatic
+        /// resizing.
+        /// `"fit"` is only supported for single and layered views that don't use `rangeStep`.
+        ///
+        /// __Default value__: `pad`
+        /// </summary>
+        [JsonProperty("autosize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Autosize? Autosize { get; set; }
+
+        /// <summary>
+        /// Axis configuration, which determines default properties for all `x` and `y`
+        /// [axes](axis.html). For a full list of axis configuration options, please see the
+        /// [corresponding section of the axis documentation](axis.html#config).
+        /// </summary>
+        [JsonProperty("axis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AxisConfig? Axis { get; set; }
+
+        /// <summary>
+        /// Specific axis config for axes with "band" scales.
+        /// </summary>
+        [JsonProperty("axisBand", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VgAxisConfig? AxisBand { get; set; }
+
+        /// <summary>
+        /// Specific axis config for x-axis along the bottom edge of the chart.
+        /// </summary>
+        [JsonProperty("axisBottom", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VgAxisConfig? AxisBottom { get; set; }
+
+        /// <summary>
+        /// Specific axis config for y-axis along the left edge of the chart.
+        /// </summary>
+        [JsonProperty("axisLeft", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VgAxisConfig? AxisLeft { get; set; }
+
+        /// <summary>
+        /// Specific axis config for y-axis along the right edge of the chart.
+        /// </summary>
+        [JsonProperty("axisRight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VgAxisConfig? AxisRight { get; set; }
+
+        /// <summary>
+        /// Specific axis config for x-axis along the top edge of the chart.
+        /// </summary>
+        [JsonProperty("axisTop", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VgAxisConfig? AxisTop { get; set; }
+
+        /// <summary>
+        /// X-axis specific config.
+        /// </summary>
+        [JsonProperty("axisX", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VgAxisConfig? AxisX { get; set; }
+
+        /// <summary>
+        /// Y-axis specific config.
+        /// </summary>
+        [JsonProperty("axisY", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VgAxisConfig? AxisY { get; set; }
+
+        /// <summary>
+        /// CSS color property to use as the background of visualization.
+        ///
+        /// __Default value:__ none (transparent)
+        /// </summary>
+        [JsonProperty("background", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Background { get; set; }
+
+        /// <summary>
+        /// Bar-Specific Config
+        /// </summary>
+        [JsonProperty("bar", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public BarConfig? Bar { get; set; }
+
+        /// <summary>
+        /// Circle-Specific Config
+        /// </summary>
+        [JsonProperty("circle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkConfig? Circle { get; set; }
+
+        /// <summary>
+        /// Default axis and legend title for count fields.
+        ///
+        /// __Default value:__ `'Number of Records'`.
+        /// </summary>
+        [JsonProperty("countTitle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? CountTitle { get; set; }
+
+        /// <summary>
+        /// Defines how Vega-Lite generates title for fields.  There are three possible styles:
+        ///
+        /// - `"verbal"` (Default) - displays function in a verbal style (e.g., "Sum of field",
+        /// "Year-month of date", "field (binned)").
+        /// - `"function"` - displays function using parentheses and capitalized texts (e.g.,
+        /// "SUM(field)", "YEARMONTH(date)", "BIN(field)").
+        /// - `"plain"` - displays only the field name without functions (e.g., "field", "date",
+        /// "field").
+        /// </summary>
+        [JsonProperty("fieldTitle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FieldTitle? FieldTitle { get; set; }
+
+        /// <summary>
+        /// Geoshape-Specific Config
+        /// </summary>
+        [JsonProperty("geoshape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkConfig? Geoshape { get; set; }
+
+        /// <summary>
+        /// Defines how Vega-Lite should handle invalid values (`null` and `NaN`).
+        /// - If set to `"filter"` (default), all data items with null values are filtered.
+        /// - If `null`, all data items are included. In this case, invalid values will be
+        /// interpreted as zeroes.
+        /// </summary>
+        [JsonProperty("invalidValues", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public InvalidValues? InvalidValues { get; set; }
+
+        /// <summary>
+        /// Legend configuration, which determines default properties for all [legends](legend.html).
+        /// For a full list of legend configuration options, please see the [corresponding section of
+        /// in the legend documentation](legend.html#config).
+        /// </summary>
+        [JsonProperty("legend", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LegendConfig? Legend { get; set; }
+
+        /// <summary>
+        /// Line-Specific Config
+        /// </summary>
+        [JsonProperty("line", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkConfig? Line { get; set; }
+
+        /// <summary>
+        /// Mark Config
+        /// </summary>
+        [JsonProperty("mark", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkConfig? Mark { get; set; }
+
+        /// <summary>
+        /// D3 Number format for axis labels and text tables. For example "s" for SI units. Use [D3's
+        /// number format pattern](https://github.com/d3/d3-format#locale_format).
+        /// </summary>
+        [JsonProperty("numberFormat", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? NumberFormat { get; set; }
+
+        /// <summary>
+        /// The default visualization padding, in pixels, from the edge of the visualization canvas
+        /// to the data rectangle.  If a number, specifies padding for all sides.
+        /// If an object, the value should have the format `{"left": 5, "top": 5, "right": 5,
+        /// "bottom": 5}` to specify padding for each side of the visualization.
+        ///
+        /// __Default value__: `5`
+        /// </summary>
+        [JsonProperty("padding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Padding? Padding { get; set; }
+
+        /// <summary>
+        /// Point-Specific Config
+        /// </summary>
+        [JsonProperty("point", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkConfig? Point { get; set; }
+
+        /// <summary>
+        /// Projection configuration, which determines default properties for all
+        /// [projections](projection.html). For a full list of projection configuration options,
+        /// please see the [corresponding section of the projection
+        /// documentation](projection.html#config).
+        /// </summary>
+        [JsonProperty("projection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ProjectionConfig? Projection { get; set; }
+
+        /// <summary>
+        /// An object hash that defines default range arrays or schemes for using with scales.
+        /// For a full list of scale range configuration options, please see the [corresponding
+        /// section of the scale documentation](scale.html#config).
+        /// </summary>
+        [JsonProperty("range", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Dictionary<string, RangeConfigValue>? Range { get; set; }
+
+        /// <summary>
+        /// Rect-Specific Config
+        /// </summary>
+        [JsonProperty("rect", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkConfig? Rect { get; set; }
+
+        /// <summary>
+        /// Rule-Specific Config
+        /// </summary>
+        [JsonProperty("rule", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkConfig? Rule { get; set; }
+
+        /// <summary>
+        /// Scale configuration determines default properties for all [scales](scale.html). For a
+        /// full list of scale configuration options, please see the [corresponding section of the
+        /// scale documentation](scale.html#config).
+        /// </summary>
+        [JsonProperty("scale", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ScaleConfig? Scale { get; set; }
+
+        /// <summary>
+        /// An object hash for defining default properties for each type of selections.
+        /// </summary>
+        [JsonProperty("selection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionConfig? Selection { get; set; }
+
+        /// <summary>
+        /// Square-Specific Config
+        /// </summary>
+        [JsonProperty("square", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkConfig? Square { get; set; }
+
+        /// <summary>
+        /// Default stack offset for stackable mark.
+        /// </summary>
+        [JsonProperty("stack", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public StackOffset? Stack { get; set; }
+
+        /// <summary>
+        /// An object hash that defines key-value mappings to determine default properties for marks
+        /// with a given [style](mark.html#mark-def).  The keys represent styles names; the value are
+        /// valid [mark configuration objects](mark.html#config).
+        /// </summary>
+        [JsonProperty("style", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Dictionary<string, VgMarkConfig>? Style { get; set; }
+
+        /// <summary>
+        /// Text-Specific Config
+        /// </summary>
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TextConfig? Text { get; set; }
+
+        /// <summary>
+        /// Tick-Specific Config
+        /// </summary>
+        [JsonProperty("tick", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TickConfig? Tick { get; set; }
+
+        /// <summary>
+        /// Default datetime format for axis and legend labels. The format can be set directly on
+        /// each axis and legend. Use [D3's time format
+        /// pattern](https://github.com/d3/d3-time-format#locale_format).
+        ///
+        /// __Default value:__ `'%b %d, %Y'`.
+        /// </summary>
+        [JsonProperty("timeFormat", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TimeFormat { get; set; }
+
+        /// <summary>
+        /// Title configuration, which determines default properties for all [titles](title.html).
+        /// For a full list of title configuration options, please see the [corresponding section of
+        /// the title documentation](title.html#config).
+        /// </summary>
+        [JsonProperty("title", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VgTitleConfig? Title { get; set; }
+
+        /// <summary>
+        /// Default properties for [single view plots](spec.html#single).
+        /// </summary>
+        [JsonProperty("view", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ViewConfig? View { get; set; }
+    }
+
+    /// <summary>
+    /// Area-Specific Config
+    ///
+    /// Circle-Specific Config
+    ///
+    /// Geoshape-Specific Config
+    ///
+    /// Line-Specific Config
+    ///
+    /// Mark Config
+    ///
+    /// Point-Specific Config
+    ///
+    /// Rect-Specific Config
+    ///
+    /// Rule-Specific Config
+    ///
+    /// Square-Specific Config
+    /// </summary>
+    public partial record MarkConfig
+    {
+        /// <summary>
+        /// The horizontal alignment of the text. One of `"left"`, `"right"`, `"center"`.
+        /// </summary>
+        [JsonProperty("align", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public HorizontalAlign? Align { get; set; }
+
+        /// <summary>
+        /// The rotation angle of the text, in degrees.
+        /// </summary>
+        [JsonProperty("angle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
+        public double? Angle { get; set; }
+
+        /// <summary>
+        /// The vertical alignment of the text. One of `"top"`, `"middle"`, `"bottom"`.
+        ///
+        /// __Default value:__ `"middle"`
+        /// </summary>
+        [JsonProperty("baseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VerticalAlign? Baseline { get; set; }
+
+        /// <summary>
+        /// Default color.  Note that `fill` and `stroke` have higher precedence than `color` and
+        /// will override `color`.
+        ///
+        /// __Default value:__ &lt;span style="color: #4682b4;"&gt;&amp;#9632;&lt;/span&gt; `"#4682b4"`
+        ///
+        /// __Note:__ This property cannot be used in a [style config](mark.html#style-config).
+        /// </summary>
+        [JsonProperty("color", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Color { get; set; }
+
+        /// <summary>
+        /// The mouse cursor used over the mark. Any valid [CSS cursor
+        /// type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.
+        /// </summary>
+        [JsonProperty("cursor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Cursor? Cursor { get; set; }
+
+        /// <summary>
+        /// The horizontal offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dx", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dx { get; set; }
+
+        /// <summary>
+        /// The vertical offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dy { get; set; }
+
+        /// <summary>
+        /// Default Fill Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("fill", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Fill { get; set; }
+
+        /// <summary>
+        /// Whether the mark's color should be used as fill color instead of stroke color.
+        ///
+        /// __Default value:__ `true` for all marks except `point` and `false` for `point`.
+        ///
+        /// __Applicable for:__ `bar`, `point`, `circle`, `square`, and `area` marks.
+        ///
+        /// __Note:__ This property cannot be used in a [style config](mark.html#style-config).
+        /// </summary>
+        [JsonProperty("filled", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Filled { get; set; }
+
+        /// <summary>
+        /// The fill opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("fillOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? FillOpacity { get; set; }
+
+        /// <summary>
+        /// The typeface to set the text in (e.g., `"Helvetica Neue"`).
+        /// </summary>
+        [JsonProperty("font", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Font { get; set; }
+
+        /// <summary>
+        /// The font size, in pixels.
+        /// </summary>
+        [JsonProperty("fontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? FontSize { get; set; }
+
+        /// <summary>
+        /// The font style (e.g., `"italic"`).
+        /// </summary>
+        [JsonProperty("fontStyle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontStyle? FontStyle { get; set; }
+
+        /// <summary>
+        /// The font weight (e.g., `"bold"`).
+        /// </summary>
+        [JsonProperty("fontWeight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontWeightUnion? FontWeight { get; set; }
+
+        /// <summary>
+        /// A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
+        /// </summary>
+        [JsonProperty("href", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Href { get; set; }
+
+        /// <summary>
+        /// The line interpolation method to use for line and area marks. One of the following:
+        /// - `"linear"`: piecewise linear segments, as in a polyline.
+        /// - `"linear-closed"`: close the linear segments to form a polygon.
+        /// - `"step"`: alternate between horizontal and vertical segments, as in a step function.
+        /// - `"step-before"`: alternate between vertical and horizontal segments, as in a step
+        /// function.
+        /// - `"step-after"`: alternate between horizontal and vertical segments, as in a step
+        /// function.
+        /// - `"basis"`: a B-spline, with control point duplication on the ends.
+        /// - `"basis-open"`: an open B-spline; may not intersect the start or end.
+        /// - `"basis-closed"`: a closed B-spline, as in a loop.
+        /// - `"cardinal"`: a Cardinal spline, with control point duplication on the ends.
+        /// - `"cardinal-open"`: an open Cardinal spline; may not intersect the start or end, but
+        /// will intersect other control points.
+        /// - `"cardinal-closed"`: a closed Cardinal spline, as in a loop.
+        /// - `"bundle"`: equivalent to basis, except the tension parameter is used to straighten the
+        /// spline.
+        /// - `"monotone"`: cubic interpolation that preserves monotonicity in y.
+        /// </summary>
+        [JsonProperty("interpolate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Interpolate? Interpolate { get; set; }
+
+        /// <summary>
+        /// The maximum length of the text mark in pixels (default 0, indicating no limit). The text
+        /// value will be automatically truncated if the rendered size exceeds the limit.
+        /// </summary>
+        [JsonProperty("limit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Limit { get; set; }
+
+        /// <summary>
+        /// The overall opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or
+        /// `square` marks or layered `bar` charts and `1` otherwise.
+        /// </summary>
+        [JsonProperty("opacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Opacity { get; set; }
+
+        /// <summary>
+        /// The orientation of a non-stacked bar, tick, area, and line charts.
+        /// The value is either horizontal (default) or vertical.
+        /// - For bar, rule and tick, this determines whether the size of the bar and tick
+        /// should be applied to x or y dimension.
+        /// - For area, this property determines the orient property of the Vega output.
+        /// - For line, this property determines the sort order of the points in the line
+        /// if `config.sortLineBy` is not specified.
+        /// For stacked charts, this is always determined by the orientation of the stack;
+        /// therefore explicitly specified value will be ignored.
+        /// </summary>
+        [JsonProperty("orient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Orient? Orient { get; set; }
+
+        /// <summary>
+        /// Polar coordinate radial offset, in pixels, of the text label from the origin determined
+        /// by the `x` and `y` properties.
+        /// </summary>
+        [JsonProperty("radius", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Radius { get; set; }
+
+        /// <summary>
+        /// The default symbol shape to use. One of: `"circle"` (default), `"square"`, `"cross"`,
+        /// `"diamond"`, `"triangle-up"`, or `"triangle-down"`, or a custom SVG path.
+        ///
+        /// __Default value:__ `"circle"`
+        /// </summary>
+        [JsonProperty("shape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Shape { get; set; }
+
+        /// <summary>
+        /// The pixel area each the point/circle/square.
+        /// For example: in the case of circles, the radius is determined in part by the square root
+        /// of the size value.
+        ///
+        /// __Default value:__ `30`
+        /// </summary>
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Size { get; set; }
+
+        /// <summary>
+        /// Default Stroke Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("stroke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Stroke { get; set; }
+
+        /// <summary>
+        /// An array of alternating stroke, space lengths for creating dashed or dotted lines.
+        /// </summary>
+        [JsonProperty("strokeDash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? StrokeDash { get; set; }
+
+        /// <summary>
+        /// The offset (in pixels) into which to begin drawing with the stroke dash array.
+        /// </summary>
+        [JsonProperty("strokeDashOffset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeDashOffset { get; set; }
+
+        /// <summary>
+        /// The stroke opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("strokeOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? StrokeOpacity { get; set; }
+
+        /// <summary>
+        /// The stroke width, in pixels.
+        /// </summary>
+        [JsonProperty("strokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? StrokeWidth { get; set; }
+
+        /// <summary>
+        /// Depending on the interpolation type, sets the tension parameter (for line and area marks).
+        /// </summary>
+        [JsonProperty("tension", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Tension { get; set; }
+
+        /// <summary>
+        /// Placeholder text if the `text` channel is not specified
+        /// </summary>
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+
+        /// <summary>
+        /// Polar coordinate angle, in radians, of the text label from the origin determined by the
+        /// `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark
+        /// `startAngle` and `endAngle` properties: angles are measured in radians, with `0`
+        /// indicating "north".
+        /// </summary>
+        [JsonProperty("theta", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Theta { get; set; }
+    }
+
+    /// <summary>
+    /// Axis configuration, which determines default properties for all `x` and `y`
+    /// [axes](axis.html). For a full list of axis configuration options, please see the
+    /// [corresponding section of the axis documentation](axis.html#config).
+    /// </summary>
+    public partial record AxisConfig
+    {
+        /// <summary>
+        /// An interpolation fraction indicating where, for `band` scales, axis ticks should be
+        /// positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5`
+        /// places ticks in the middle of their bands.
+        /// </summary>
+        [JsonProperty("bandPosition", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? BandPosition { get; set; }
+
+        /// <summary>
+        /// A boolean flag indicating if the domain (the axis baseline) should be included as part of
+        /// the axis.
+        ///
+        /// __Default value:__ `true`
+        /// </summary>
+        [JsonProperty("domain", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Domain { get; set; }
+
+        /// <summary>
+        /// Color of axis domain line.
+        ///
+        /// __Default value:__  (none, using Vega default).
+        /// </summary>
+        [JsonProperty("domainColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DomainColor { get; set; }
+
+        /// <summary>
+        /// Stroke width of axis domain line
+        ///
+        /// __Default value:__  (none, using Vega default).
+        /// </summary>
+        [JsonProperty("domainWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? DomainWidth { get; set; }
+
+        /// <summary>
+        /// A boolean flag indicating if grid lines should be included as part of the axis
+        ///
+        /// __Default value:__ `true` for [continuous scales](scale.html#continuous) that are not
+        /// binned; otherwise, `false`.
+        /// </summary>
+        [JsonProperty("grid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Grid { get; set; }
+
+        /// <summary>
+        /// Color of gridlines.
+        /// </summary>
+        [JsonProperty("gridColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? GridColor { get; set; }
+
+        /// <summary>
+        /// The offset (in pixels) into which to begin drawing with the grid dash array.
+        /// </summary>
+        [JsonProperty("gridDash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? GridDash { get; set; }
+
+        /// <summary>
+        /// The stroke opacity of grid (value between [0,1])
+        ///
+        /// __Default value:__ (`1` by default)
+        /// </summary>
+        [JsonProperty("gridOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? GridOpacity { get; set; }
+
+        /// <summary>
+        /// The grid width, in pixels.
+        /// </summary>
+        [JsonProperty("gridWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? GridWidth { get; set; }
+
+        /// <summary>
+        /// The rotation angle of the axis labels.
+        ///
+        /// __Default value:__ `-90` for nominal and ordinal fields; `0` otherwise.
+        /// </summary>
+        [JsonProperty("labelAngle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(IndigoMinMaxValueCheckConverter))]
+        public double? LabelAngle { get; set; }
+
+        /// <summary>
+        /// Indicates if labels should be hidden if they exceed the axis range. If `false `(the
+        /// default) no bounds overlap analysis is performed. If `true`, labels will be hidden if
+        /// they exceed the axis range by more than 1 pixel. If this property is a number, it
+        /// specifies the pixel tolerance: the maximum amount by which a label bounding box may
+        /// exceed the axis range.
+        ///
+        /// __Default value:__ `false`.
+        /// </summary>
+        [JsonProperty("labelBound", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Label? LabelBound { get; set; }
+
+        /// <summary>
+        /// The color of the tick label, can be in hex color code or regular color name.
+        /// </summary>
+        [JsonProperty("labelColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? LabelColor { get; set; }
+
+        /// <summary>
+        /// Indicates if the first and last axis labels should be aligned flush with the scale range.
+        /// Flush alignment for a horizontal axis will left-align the first label and right-align the
+        /// last label. For vertical axes, bottom and top text baselines are applied instead. If this
+        /// property is a number, it also indicates the number of pixels by which to offset the first
+        /// and last labels; for example, a value of 2 will flush-align the first and last labels and
+        /// also push them 2 pixels outward from the center of the axis. The additional adjustment
+        /// can sometimes help the labels better visually group with corresponding axis ticks.
+        ///
+        /// __Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.
+        /// </summary>
+        [JsonProperty("labelFlush", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Label? LabelFlush { get; set; }
+
+        /// <summary>
+        /// The font of the tick label.
+        /// </summary>
+        [JsonProperty("labelFont", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? LabelFont { get; set; }
+
+        /// <summary>
+        /// The font size of the label, in pixels.
+        /// </summary>
+        [JsonProperty("labelFontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? LabelFontSize { get; set; }
+
+        /// <summary>
+        /// Maximum allowed pixel width of axis tick labels.
+        /// </summary>
+        [JsonProperty("labelLimit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? LabelLimit { get; set; }
+
+        /// <summary>
+        /// The strategy to use for resolving overlap of axis labels. If `false` (the default), no
+        /// overlap reduction is attempted. If set to `true` or `"parity"`, a strategy of removing
+        /// every other label is used (this works well for standard linear axes). If set to
+        /// `"greedy"`, a linear scan of the labels is performed, removing any labels that overlaps
+        /// with the last visible label (this often works better for log-scaled axes).
+        ///
+        /// __Default value:__ `true` for non-nominal fields with non-log scales; `"greedy"` for log
+        /// scales; otherwise `false`.
+        /// </summary>
+        [JsonProperty("labelOverlap", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LabelOverlapUnion? LabelOverlap { get; set; }
+
+        /// <summary>
+        /// The padding, in pixels, between axis and text labels.
+        /// </summary>
+        [JsonProperty("labelPadding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? LabelPadding { get; set; }
+
+        /// <summary>
+        /// A boolean flag indicating if labels should be included as part of the axis.
+        ///
+        /// __Default value:__  `true`.
+        /// </summary>
+        [JsonProperty("labels", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Labels { get; set; }
+
+        /// <summary>
+        /// The maximum extent in pixels that axis ticks and labels should use. This determines a
+        /// maximum offset value for axis titles.
+        ///
+        /// __Default value:__ `undefined`.
+        /// </summary>
+        [JsonProperty("maxExtent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? MaxExtent { get; set; }
+
+        /// <summary>
+        /// The minimum extent in pixels that axis ticks and labels should use. This determines a
+        /// minimum offset value for axis titles.
+        ///
+        /// __Default value:__ `30` for y-axis; `undefined` for x-axis.
+        /// </summary>
+        [JsonProperty("minExtent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? MinExtent { get; set; }
+
+        /// <summary>
+        /// Whether month names and weekday names should be abbreviated.
+        ///
+        /// __Default value:__  `false`
+        /// </summary>
+        [JsonProperty("shortTimeLabels", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ShortTimeLabels { get; set; }
+
+        /// <summary>
+        /// The color of the axis's tick.
+        /// </summary>
+        [JsonProperty("tickColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TickColor { get; set; }
+
+        /// <summary>
+        /// Boolean flag indicating if pixel position values should be rounded to the nearest integer.
+        /// </summary>
+        [JsonProperty("tickRound", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? TickRound { get; set; }
+
+        /// <summary>
+        /// Boolean value that determines whether the axis should include ticks.
+        /// </summary>
+        [JsonProperty("ticks", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Ticks { get; set; }
+
+        /// <summary>
+        /// The size in pixels of axis ticks.
+        /// </summary>
+        [JsonProperty("tickSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? TickSize { get; set; }
+
+        /// <summary>
+        /// The width, in pixels, of ticks.
+        /// </summary>
+        [JsonProperty("tickWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? TickWidth { get; set; }
+
+        /// <summary>
+        /// Horizontal text alignment of axis titles.
+        /// </summary>
+        [JsonProperty("titleAlign", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleAlign { get; set; }
+
+        /// <summary>
+        /// Angle in degrees of axis titles.
+        /// </summary>
+        [JsonProperty("titleAngle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleAngle { get; set; }
+
+        /// <summary>
+        /// Vertical text baseline for axis titles.
+        /// </summary>
+        [JsonProperty("titleBaseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleBaseline { get; set; }
+
+        /// <summary>
+        /// Color of the title, can be in hex color code or regular color name.
+        /// </summary>
+        [JsonProperty("titleColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleColor { get; set; }
+
+        /// <summary>
+        /// Font of the title. (e.g., `"Helvetica Neue"`).
+        /// </summary>
+        [JsonProperty("titleFont", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleFont { get; set; }
+
+        /// <summary>
+        /// Font size of the title.
+        /// </summary>
+        [JsonProperty("titleFontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? TitleFontSize { get; set; }
+
+        /// <summary>
+        /// Font weight of the title. (e.g., `"bold"`).
+        /// </summary>
+        [JsonProperty("titleFontWeight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TitleFontWeight? TitleFontWeight { get; set; }
+
+        /// <summary>
+        /// Maximum allowed pixel width of axis titles.
+        /// </summary>
+        [JsonProperty("titleLimit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleLimit { get; set; }
+
+        /// <summary>
+        /// Max length for axis title if the title is automatically generated from the field's
+        /// description.
+        /// </summary>
+        [JsonProperty("titleMaxLength", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleMaxLength { get; set; }
+
+        /// <summary>
+        /// The padding, in pixels, between title and axis.
+        /// </summary>
+        [JsonProperty("titlePadding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitlePadding { get; set; }
+
+        /// <summary>
+        /// X-coordinate of the axis title relative to the axis group.
+        /// </summary>
+        [JsonProperty("titleX", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleX { get; set; }
+
+        /// <summary>
+        /// Y-coordinate of the axis title relative to the axis group.
+        /// </summary>
+        [JsonProperty("titleY", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleY { get; set; }
+    }
+
+    /// <summary>
+    /// Specific axis config for axes with "band" scales.
+    ///
+    /// Specific axis config for x-axis along the bottom edge of the chart.
+    ///
+    /// Specific axis config for y-axis along the left edge of the chart.
+    ///
+    /// Specific axis config for y-axis along the right edge of the chart.
+    ///
+    /// Specific axis config for x-axis along the top edge of the chart.
+    ///
+    /// X-axis specific config.
+    ///
+    /// Y-axis specific config.
+    /// </summary>
+    public partial record VgAxisConfig
+    {
+        /// <summary>
+        /// An interpolation fraction indicating where, for `band` scales, axis ticks should be
+        /// positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5`
+        /// places ticks in the middle of their bands.
+        /// </summary>
+        [JsonProperty("bandPosition", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? BandPosition { get; set; }
+
+        /// <summary>
+        /// A boolean flag indicating if the domain (the axis baseline) should be included as part of
+        /// the axis.
+        ///
+        /// __Default value:__ `true`
+        /// </summary>
+        [JsonProperty("domain", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Domain { get; set; }
+
+        /// <summary>
+        /// Color of axis domain line.
+        ///
+        /// __Default value:__  (none, using Vega default).
+        /// </summary>
+        [JsonProperty("domainColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? DomainColor { get; set; }
+
+        /// <summary>
+        /// Stroke width of axis domain line
+        ///
+        /// __Default value:__  (none, using Vega default).
+        /// </summary>
+        [JsonProperty("domainWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? DomainWidth { get; set; }
+
+        /// <summary>
+        /// A boolean flag indicating if grid lines should be included as part of the axis
+        ///
+        /// __Default value:__ `true` for [continuous scales](scale.html#continuous) that are not
+        /// binned; otherwise, `false`.
+        /// </summary>
+        [JsonProperty("grid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Grid { get; set; }
+
+        /// <summary>
+        /// Color of gridlines.
+        /// </summary>
+        [JsonProperty("gridColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? GridColor { get; set; }
+
+        /// <summary>
+        /// The offset (in pixels) into which to begin drawing with the grid dash array.
+        /// </summary>
+        [JsonProperty("gridDash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? GridDash { get; set; }
+
+        /// <summary>
+        /// The stroke opacity of grid (value between [0,1])
+        ///
+        /// __Default value:__ (`1` by default)
+        /// </summary>
+        [JsonProperty("gridOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? GridOpacity { get; set; }
+
+        /// <summary>
+        /// The grid width, in pixels.
+        /// </summary>
+        [JsonProperty("gridWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? GridWidth { get; set; }
+
+        /// <summary>
+        /// The rotation angle of the axis labels.
+        ///
+        /// __Default value:__ `-90` for nominal and ordinal fields; `0` otherwise.
+        /// </summary>
+        [JsonProperty("labelAngle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(IndigoMinMaxValueCheckConverter))]
+        public double? LabelAngle { get; set; }
+
+        /// <summary>
+        /// Indicates if labels should be hidden if they exceed the axis range. If `false `(the
+        /// default) no bounds overlap analysis is performed. If `true`, labels will be hidden if
+        /// they exceed the axis range by more than 1 pixel. If this property is a number, it
+        /// specifies the pixel tolerance: the maximum amount by which a label bounding box may
+        /// exceed the axis range.
+        ///
+        /// __Default value:__ `false`.
+        /// </summary>
+        [JsonProperty("labelBound", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Label? LabelBound { get; set; }
+
+        /// <summary>
+        /// The color of the tick label, can be in hex color code or regular color name.
+        /// </summary>
+        [JsonProperty("labelColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? LabelColor { get; set; }
+
+        /// <summary>
+        /// Indicates if the first and last axis labels should be aligned flush with the scale range.
+        /// Flush alignment for a horizontal axis will left-align the first label and right-align the
+        /// last label. For vertical axes, bottom and top text baselines are applied instead. If this
+        /// property is a number, it also indicates the number of pixels by which to offset the first
+        /// and last labels; for example, a value of 2 will flush-align the first and last labels and
+        /// also push them 2 pixels outward from the center of the axis. The additional adjustment
+        /// can sometimes help the labels better visually group with corresponding axis ticks.
+        ///
+        /// __Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.
+        /// </summary>
+        [JsonProperty("labelFlush", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Label? LabelFlush { get; set; }
+
+        /// <summary>
+        /// The font of the tick label.
+        /// </summary>
+        [JsonProperty("labelFont", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? LabelFont { get; set; }
+
+        /// <summary>
+        /// The font size of the label, in pixels.
+        /// </summary>
+        [JsonProperty("labelFontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? LabelFontSize { get; set; }
+
+        /// <summary>
+        /// Maximum allowed pixel width of axis tick labels.
+        /// </summary>
+        [JsonProperty("labelLimit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? LabelLimit { get; set; }
+
+        /// <summary>
+        /// The strategy to use for resolving overlap of axis labels. If `false` (the default), no
+        /// overlap reduction is attempted. If set to `true` or `"parity"`, a strategy of removing
+        /// every other label is used (this works well for standard linear axes). If set to
+        /// `"greedy"`, a linear scan of the labels is performed, removing any labels that overlaps
+        /// with the last visible label (this often works better for log-scaled axes).
+        ///
+        /// __Default value:__ `true` for non-nominal fields with non-log scales; `"greedy"` for log
+        /// scales; otherwise `false`.
+        /// </summary>
+        [JsonProperty("labelOverlap", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LabelOverlapUnion? LabelOverlap { get; set; }
+
+        /// <summary>
+        /// The padding, in pixels, between axis and text labels.
+        /// </summary>
+        [JsonProperty("labelPadding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? LabelPadding { get; set; }
+
+        /// <summary>
+        /// A boolean flag indicating if labels should be included as part of the axis.
+        ///
+        /// __Default value:__  `true`.
+        /// </summary>
+        [JsonProperty("labels", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Labels { get; set; }
+
+        /// <summary>
+        /// The maximum extent in pixels that axis ticks and labels should use. This determines a
+        /// maximum offset value for axis titles.
+        ///
+        /// __Default value:__ `undefined`.
+        /// </summary>
+        [JsonProperty("maxExtent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? MaxExtent { get; set; }
+
+        /// <summary>
+        /// The minimum extent in pixels that axis ticks and labels should use. This determines a
+        /// minimum offset value for axis titles.
+        ///
+        /// __Default value:__ `30` for y-axis; `undefined` for x-axis.
+        /// </summary>
+        [JsonProperty("minExtent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? MinExtent { get; set; }
+
+        /// <summary>
+        /// The color of the axis's tick.
+        /// </summary>
+        [JsonProperty("tickColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TickColor { get; set; }
+
+        /// <summary>
+        /// Boolean flag indicating if pixel position values should be rounded to the nearest integer.
+        /// </summary>
+        [JsonProperty("tickRound", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? TickRound { get; set; }
+
+        /// <summary>
+        /// Boolean value that determines whether the axis should include ticks.
+        /// </summary>
+        [JsonProperty("ticks", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Ticks { get; set; }
+
+        /// <summary>
+        /// The size in pixels of axis ticks.
+        /// </summary>
+        [JsonProperty("tickSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? TickSize { get; set; }
+
+        /// <summary>
+        /// The width, in pixels, of ticks.
+        /// </summary>
+        [JsonProperty("tickWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? TickWidth { get; set; }
+
+        /// <summary>
+        /// Horizontal text alignment of axis titles.
+        /// </summary>
+        [JsonProperty("titleAlign", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleAlign { get; set; }
+
+        /// <summary>
+        /// Angle in degrees of axis titles.
+        /// </summary>
+        [JsonProperty("titleAngle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleAngle { get; set; }
+
+        /// <summary>
+        /// Vertical text baseline for axis titles.
+        /// </summary>
+        [JsonProperty("titleBaseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleBaseline { get; set; }
+
+        /// <summary>
+        /// Color of the title, can be in hex color code or regular color name.
+        /// </summary>
+        [JsonProperty("titleColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleColor { get; set; }
+
+        /// <summary>
+        /// Font of the title. (e.g., `"Helvetica Neue"`).
+        /// </summary>
+        [JsonProperty("titleFont", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleFont { get; set; }
+
+        /// <summary>
+        /// Font size of the title.
+        /// </summary>
+        [JsonProperty("titleFontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? TitleFontSize { get; set; }
+
+        /// <summary>
+        /// Font weight of the title. (e.g., `"bold"`).
+        /// </summary>
+        [JsonProperty("titleFontWeight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TitleFontWeight? TitleFontWeight { get; set; }
+
+        /// <summary>
+        /// Maximum allowed pixel width of axis titles.
+        /// </summary>
+        [JsonProperty("titleLimit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleLimit { get; set; }
+
+        /// <summary>
+        /// Max length for axis title if the title is automatically generated from the field's
+        /// description.
+        /// </summary>
+        [JsonProperty("titleMaxLength", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleMaxLength { get; set; }
+
+        /// <summary>
+        /// The padding, in pixels, between title and axis.
+        /// </summary>
+        [JsonProperty("titlePadding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitlePadding { get; set; }
+
+        /// <summary>
+        /// X-coordinate of the axis title relative to the axis group.
+        /// </summary>
+        [JsonProperty("titleX", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleX { get; set; }
+
+        /// <summary>
+        /// Y-coordinate of the axis title relative to the axis group.
+        /// </summary>
+        [JsonProperty("titleY", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleY { get; set; }
+    }
+
+    /// <summary>
+    /// Bar-Specific Config
+    /// </summary>
+    public partial record BarConfig
+    {
+        /// <summary>
+        /// The horizontal alignment of the text. One of `"left"`, `"right"`, `"center"`.
+        /// </summary>
+        [JsonProperty("align", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public HorizontalAlign? Align { get; set; }
+
+        /// <summary>
+        /// The rotation angle of the text, in degrees.
+        /// </summary>
+        [JsonProperty("angle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
+        public double? Angle { get; set; }
+
+        /// <summary>
+        /// The vertical alignment of the text. One of `"top"`, `"middle"`, `"bottom"`.
+        ///
+        /// __Default value:__ `"middle"`
+        /// </summary>
+        [JsonProperty("baseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VerticalAlign? Baseline { get; set; }
+
+        /// <summary>
+        /// Offset between bar for binned field.  Ideal value for this is either 0 (Preferred by
+        /// statisticians) or 1 (Vega-Lite Default, D3 example style).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("binSpacing", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? BinSpacing { get; set; }
+
+        /// <summary>
+        /// Default color.  Note that `fill` and `stroke` have higher precedence than `color` and
+        /// will override `color`.
+        ///
+        /// __Default value:__ &lt;span style="color: #4682b4;"&gt;&amp;#9632;&lt;/span&gt; `"#4682b4"`
+        ///
+        /// __Note:__ This property cannot be used in a [style config](mark.html#style-config).
+        /// </summary>
+        [JsonProperty("color", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Color { get; set; }
+
+        /// <summary>
+        /// The default size of the bars on continuous scales.
+        ///
+        /// __Default value:__ `5`
+        /// </summary>
+        [JsonProperty("continuousBandSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? ContinuousBandSize { get; set; }
+
+        /// <summary>
+        /// The mouse cursor used over the mark. Any valid [CSS cursor
+        /// type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.
+        /// </summary>
+        [JsonProperty("cursor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Cursor? Cursor { get; set; }
+
+        /// <summary>
+        /// The size of the bars.  If unspecified, the default size is  `bandSize-1`,
+        /// which provides 1 pixel offset between bars.
+        /// </summary>
+        [JsonProperty("discreteBandSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? DiscreteBandSize { get; set; }
+
+        /// <summary>
+        /// The horizontal offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dx", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dx { get; set; }
+
+        /// <summary>
+        /// The vertical offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dy { get; set; }
+
+        /// <summary>
+        /// Default Fill Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("fill", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Fill { get; set; }
+
+        /// <summary>
+        /// Whether the mark's color should be used as fill color instead of stroke color.
+        ///
+        /// __Default value:__ `true` for all marks except `point` and `false` for `point`.
+        ///
+        /// __Applicable for:__ `bar`, `point`, `circle`, `square`, and `area` marks.
+        ///
+        /// __Note:__ This property cannot be used in a [style config](mark.html#style-config).
+        /// </summary>
+        [JsonProperty("filled", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Filled { get; set; }
+
+        /// <summary>
+        /// The fill opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("fillOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? FillOpacity { get; set; }
+
+        /// <summary>
+        /// The typeface to set the text in (e.g., `"Helvetica Neue"`).
+        /// </summary>
+        [JsonProperty("font", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Font { get; set; }
+
+        /// <summary>
+        /// The font size, in pixels.
+        /// </summary>
+        [JsonProperty("fontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? FontSize { get; set; }
+
+        /// <summary>
+        /// The font style (e.g., `"italic"`).
+        /// </summary>
+        [JsonProperty("fontStyle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontStyle? FontStyle { get; set; }
+
+        /// <summary>
+        /// The font weight (e.g., `"bold"`).
+        /// </summary>
+        [JsonProperty("fontWeight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontWeightUnion? FontWeight { get; set; }
+
+        /// <summary>
+        /// A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
+        /// </summary>
+        [JsonProperty("href", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Href { get; set; }
+
+        /// <summary>
+        /// The line interpolation method to use for line and area marks. One of the following:
+        /// - `"linear"`: piecewise linear segments, as in a polyline.
+        /// - `"linear-closed"`: close the linear segments to form a polygon.
+        /// - `"step"`: alternate between horizontal and vertical segments, as in a step function.
+        /// - `"step-before"`: alternate between vertical and horizontal segments, as in a step
+        /// function.
+        /// - `"step-after"`: alternate between horizontal and vertical segments, as in a step
+        /// function.
+        /// - `"basis"`: a B-spline, with control point duplication on the ends.
+        /// - `"basis-open"`: an open B-spline; may not intersect the start or end.
+        /// - `"basis-closed"`: a closed B-spline, as in a loop.
+        /// - `"cardinal"`: a Cardinal spline, with control point duplication on the ends.
+        /// - `"cardinal-open"`: an open Cardinal spline; may not intersect the start or end, but
+        /// will intersect other control points.
+        /// - `"cardinal-closed"`: a closed Cardinal spline, as in a loop.
+        /// - `"bundle"`: equivalent to basis, except the tension parameter is used to straighten the
+        /// spline.
+        /// - `"monotone"`: cubic interpolation that preserves monotonicity in y.
+        /// </summary>
+        [JsonProperty("interpolate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Interpolate? Interpolate { get; set; }
+
+        /// <summary>
+        /// The maximum length of the text mark in pixels (default 0, indicating no limit). The text
+        /// value will be automatically truncated if the rendered size exceeds the limit.
+        /// </summary>
+        [JsonProperty("limit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Limit { get; set; }
+
+        /// <summary>
+        /// The overall opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or
+        /// `square` marks or layered `bar` charts and `1` otherwise.
+        /// </summary>
+        [JsonProperty("opacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Opacity { get; set; }
+
+        /// <summary>
+        /// The orientation of a non-stacked bar, tick, area, and line charts.
+        /// The value is either horizontal (default) or vertical.
+        /// - For bar, rule and tick, this determines whether the size of the bar and tick
+        /// should be applied to x or y dimension.
+        /// - For area, this property determines the orient property of the Vega output.
+        /// - For line, this property determines the sort order of the points in the line
+        /// if `config.sortLineBy` is not specified.
+        /// For stacked charts, this is always determined by the orientation of the stack;
+        /// therefore explicitly specified value will be ignored.
+        /// </summary>
+        [JsonProperty("orient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Orient? Orient { get; set; }
+
+        /// <summary>
+        /// Polar coordinate radial offset, in pixels, of the text label from the origin determined
+        /// by the `x` and `y` properties.
+        /// </summary>
+        [JsonProperty("radius", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Radius { get; set; }
+
+        /// <summary>
+        /// The default symbol shape to use. One of: `"circle"` (default), `"square"`, `"cross"`,
+        /// `"diamond"`, `"triangle-up"`, or `"triangle-down"`, or a custom SVG path.
+        ///
+        /// __Default value:__ `"circle"`
+        /// </summary>
+        [JsonProperty("shape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Shape { get; set; }
+
+        /// <summary>
+        /// The pixel area each the point/circle/square.
+        /// For example: in the case of circles, the radius is determined in part by the square root
+        /// of the size value.
+        ///
+        /// __Default value:__ `30`
+        /// </summary>
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Size { get; set; }
+
+        /// <summary>
+        /// Default Stroke Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("stroke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Stroke { get; set; }
+
+        /// <summary>
+        /// An array of alternating stroke, space lengths for creating dashed or dotted lines.
+        /// </summary>
+        [JsonProperty("strokeDash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? StrokeDash { get; set; }
+
+        /// <summary>
+        /// The offset (in pixels) into which to begin drawing with the stroke dash array.
+        /// </summary>
+        [JsonProperty("strokeDashOffset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeDashOffset { get; set; }
+
+        /// <summary>
+        /// The stroke opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("strokeOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? StrokeOpacity { get; set; }
+
+        /// <summary>
+        /// The stroke width, in pixels.
+        /// </summary>
+        [JsonProperty("strokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? StrokeWidth { get; set; }
+
+        /// <summary>
+        /// Depending on the interpolation type, sets the tension parameter (for line and area marks).
+        /// </summary>
+        [JsonProperty("tension", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Tension { get; set; }
+
+        /// <summary>
+        /// Placeholder text if the `text` channel is not specified
+        /// </summary>
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+
+        /// <summary>
+        /// Polar coordinate angle, in radians, of the text label from the origin determined by the
+        /// `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark
+        /// `startAngle` and `endAngle` properties: angles are measured in radians, with `0`
+        /// indicating "north".
+        /// </summary>
+        [JsonProperty("theta", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Theta { get; set; }
+    }
+
+    /// <summary>
+    /// Legend configuration, which determines default properties for all [legends](legend.html).
+    /// For a full list of legend configuration options, please see the [corresponding section of
+    /// in the legend documentation](legend.html#config).
+    /// </summary>
+    public partial record LegendConfig
+    {
+        /// <summary>
+        /// Corner radius for the full legend.
+        /// </summary>
+        [JsonProperty("cornerRadius", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? CornerRadius { get; set; }
+
+        /// <summary>
+        /// Padding (in pixels) between legend entries in a symbol legend.
+        /// </summary>
+        [JsonProperty("entryPadding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? EntryPadding { get; set; }
+
+        /// <summary>
+        /// Background fill color for the full legend.
+        /// </summary>
+        [JsonProperty("fillColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? FillColor { get; set; }
+
+        /// <summary>
+        /// The height of the gradient, in pixels.
+        /// </summary>
+        [JsonProperty("gradientHeight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? GradientHeight { get; set; }
+
+        /// <summary>
+        /// Text baseline for color ramp gradient labels.
+        /// </summary>
+        [JsonProperty("gradientLabelBaseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? GradientLabelBaseline { get; set; }
+
+        /// <summary>
+        /// The maximum allowed length in pixels of color ramp gradient labels.
+        /// </summary>
+        [JsonProperty("gradientLabelLimit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? GradientLabelLimit { get; set; }
+
+        /// <summary>
+        /// Vertical offset in pixels for color ramp gradient labels.
+        /// </summary>
+        [JsonProperty("gradientLabelOffset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? GradientLabelOffset { get; set; }
+
+        /// <summary>
+        /// The color of the gradient stroke, can be in hex color code or regular color name.
+        /// </summary>
+        [JsonProperty("gradientStrokeColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? GradientStrokeColor { get; set; }
+
+        /// <summary>
+        /// The width of the gradient stroke, in pixels.
+        /// </summary>
+        [JsonProperty("gradientStrokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? GradientStrokeWidth { get; set; }
+
+        /// <summary>
+        /// The width of the gradient, in pixels.
+        /// </summary>
+        [JsonProperty("gradientWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? GradientWidth { get; set; }
+
+        /// <summary>
+        /// The alignment of the legend label, can be left, middle or right.
+        /// </summary>
+        [JsonProperty("labelAlign", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? LabelAlign { get; set; }
+
+        /// <summary>
+        /// The position of the baseline of legend label, can be top, middle or bottom.
+        /// </summary>
+        [JsonProperty("labelBaseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? LabelBaseline { get; set; }
+
+        /// <summary>
+        /// The color of the legend label, can be in hex color code or regular color name.
+        /// </summary>
+        [JsonProperty("labelColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? LabelColor { get; set; }
+
+        /// <summary>
+        /// The font of the legend label.
+        /// </summary>
+        [JsonProperty("labelFont", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? LabelFont { get; set; }
+
+        /// <summary>
+        /// The font size of legend label.
+        ///
+        /// __Default value:__ `10`.
+        /// </summary>
+        [JsonProperty("labelFontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? LabelFontSize { get; set; }
+
+        /// <summary>
+        /// Maximum allowed pixel width of axis tick labels.
+        /// </summary>
+        [JsonProperty("labelLimit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? LabelLimit { get; set; }
+
+        /// <summary>
+        /// The offset of the legend label.
+        /// </summary>
+        [JsonProperty("labelOffset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? LabelOffset { get; set; }
+
+        /// <summary>
+        /// The offset, in pixels, by which to displace the legend from the edge of the enclosing
+        /// group or data rectangle.
+        ///
+        /// __Default value:__  `0`
+        /// </summary>
+        [JsonProperty("offset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Offset { get; set; }
+
+        /// <summary>
+        /// The orientation of the legend, which determines how the legend is positioned within the
+        /// scene. One of "left", "right", "top-left", "top-right", "bottom-left", "bottom-right",
+        /// "none".
+        ///
+        /// __Default value:__ `"right"`
+        /// </summary>
+        [JsonProperty("orient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LegendOrient? Orient { get; set; }
+
+        /// <summary>
+        /// The padding, in pixels, between the legend and axis.
+        /// </summary>
+        [JsonProperty("padding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Padding { get; set; }
+
+        /// <summary>
+        /// Whether month names and weekday names should be abbreviated.
+        ///
+        /// __Default value:__  `false`
+        /// </summary>
+        [JsonProperty("shortTimeLabels", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ShortTimeLabels { get; set; }
+
+        /// <summary>
+        /// Border stroke color for the full legend.
+        /// </summary>
+        [JsonProperty("strokeColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? StrokeColor { get; set; }
+
+        /// <summary>
+        /// Border stroke dash pattern for the full legend.
+        /// </summary>
+        [JsonProperty("strokeDash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? StrokeDash { get; set; }
+
+        /// <summary>
+        /// Border stroke width for the full legend.
+        /// </summary>
+        [JsonProperty("strokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeWidth { get; set; }
+
+        /// <summary>
+        /// The color of the legend symbol,
+        /// </summary>
+        [JsonProperty("symbolColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? SymbolColor { get; set; }
+
+        /// <summary>
+        /// The size of the legend symbol, in pixels.
+        /// </summary>
+        [JsonProperty("symbolSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? SymbolSize { get; set; }
+
+        /// <summary>
+        /// The width of the symbol's stroke.
+        /// </summary>
+        [JsonProperty("symbolStrokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? SymbolStrokeWidth { get; set; }
+
+        /// <summary>
+        /// Default shape type (such as "circle") for legend symbols.
+        /// </summary>
+        [JsonProperty("symbolType", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? SymbolType { get; set; }
+
+        /// <summary>
+        /// Horizontal text alignment for legend titles.
+        /// </summary>
+        [JsonProperty("titleAlign", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleAlign { get; set; }
+
+        /// <summary>
+        /// Vertical text baseline for legend titles.
+        /// </summary>
+        [JsonProperty("titleBaseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleBaseline { get; set; }
+
+        /// <summary>
+        /// The color of the legend title, can be in hex color code or regular color name.
+        /// </summary>
+        [JsonProperty("titleColor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleColor { get; set; }
+
+        /// <summary>
+        /// The font of the legend title.
+        /// </summary>
+        [JsonProperty("titleFont", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? TitleFont { get; set; }
+
+        /// <summary>
+        /// The font size of the legend title.
+        /// </summary>
+        [JsonProperty("titleFontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleFontSize { get; set; }
+
+        /// <summary>
+        /// The font weight of the legend title.
+        /// </summary>
+        [JsonProperty("titleFontWeight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TitleFontWeight? TitleFontWeight { get; set; }
+
+        /// <summary>
+        /// Maximum allowed pixel width of axis titles.
+        /// </summary>
+        [JsonProperty("titleLimit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleLimit { get; set; }
+
+        /// <summary>
+        /// The padding, in pixels, between title and legend.
+        /// </summary>
+        [JsonProperty("titlePadding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitlePadding { get; set; }
+    }
+
+    public partial record PaddingClass
+    {
+        [JsonProperty("bottom", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Bottom { get; set; }
+
+        [JsonProperty("left", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Left { get; set; }
+
+        [JsonProperty("right", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Right { get; set; }
+
+        [JsonProperty("top", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Top { get; set; }
+    }
+
+    /// <summary>
+    /// Projection configuration, which determines default properties for all
+    /// [projections](projection.html). For a full list of projection configuration options,
+    /// please see the [corresponding section of the projection
+    /// documentation](projection.html#config).
+    ///
+    /// Any property of Projection can be in config
+    /// </summary>
+    public partial record ProjectionConfig
+    {
+        /// <summary>
+        /// Sets the projection’s center to the specified center, a two-element array of longitude
+        /// and latitude in degrees.
+        ///
+        /// __Default value:__ `[0, 0]`
+        /// </summary>
+        [JsonProperty("center", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? Center { get; set; }
+
+        /// <summary>
+        /// Sets the projection’s clipping circle radius to the specified angle in degrees. If
+        /// `null`, switches to [antimeridian](http://bl.ocks.org/mbostock/3788999) cutting rather
+        /// than small-circle clipping.
+        /// </summary>
+        [JsonProperty("clipAngle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? ClipAngle { get; set; }
+
+        /// <summary>
+        /// Sets the projection’s viewport clip extent to the specified bounds in pixels. The extent
+        /// bounds are specified as an array `[[x0, y0], [x1, y1]]`, where `x0` is the left-side of
+        /// the viewport, `y0` is the top, `x1` is the right and `y1` is the bottom. If `null`, no
+        /// viewport clipping is performed.
+        /// </summary>
+        [JsonProperty("clipExtent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[][]? ClipExtent { get; set; }
+
+        [JsonProperty("coefficient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Coefficient { get; set; }
+
+        [JsonProperty("distance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Distance { get; set; }
+
+        [JsonProperty("fraction", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Fraction { get; set; }
+
+        [JsonProperty("lobes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Lobes { get; set; }
+
+        [JsonProperty("parallel", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Parallel { get; set; }
+
+        /// <summary>
+        /// Sets the threshold for the projection’s [adaptive
+        /// resampling](http://bl.ocks.org/mbostock/3795544) to the specified value in pixels. This
+        /// value corresponds to the [Douglas–Peucker
+        /// distance](http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm).
+        /// If precision is not specified, returns the projection’s current resampling precision
+        /// which defaults to `√0.5 ≅ 0.70710…`.
+        /// </summary>
+        [JsonProperty("precision", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Dictionary<string, TitleFontWeight>? Precision { get; set; }
+
+        [JsonProperty("radius", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Radius { get; set; }
+
+        [JsonProperty("ratio", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Ratio { get; set; }
+
+        /// <summary>
+        /// Sets the projection’s three-axis rotation to the specified angles, which must be a two-
+        /// or three-element array of numbers [`lambda`, `phi`, `gamma`] specifying the rotation
+        /// angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.)
+        ///
+        /// __Default value:__ `[0, 0, 0]`
+        /// </summary>
+        [JsonProperty("rotate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? Rotate { get; set; }
+
+        [JsonProperty("spacing", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Spacing { get; set; }
+
+        [JsonProperty("tilt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Tilt { get; set; }
+
+        /// <summary>
+        /// The cartographic projection to use. This value is case-insensitive, for example
+        /// `"albers"` and `"Albers"` indicate the same projection type. You can find all valid
+        /// projection types [in the
+        /// documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).
+        ///
+        /// __Default value:__ `mercator`
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VgProjectionType? Type { get; set; }
+    }
+
+    public partial record VgScheme
+    {
+        [JsonProperty("count", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Count { get; set; }
+
+        [JsonProperty("extent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? Extent { get; set; }
+
+        [JsonProperty("scheme", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Scheme { get; set; }
+
+        [JsonProperty("step", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Step { get; set; }
+    }
+
+    /// <summary>
+    /// Scale configuration determines default properties for all [scales](scale.html). For a
+    /// full list of scale configuration options, please see the [corresponding section of the
+    /// scale documentation](scale.html#config).
+    /// </summary>
+    public partial record ScaleConfig
+    {
+        /// <summary>
+        /// Default inner padding for `x` and `y` band-ordinal scales.
+        ///
+        /// __Default value:__ `0.1`
+        /// </summary>
+        [JsonProperty("bandPaddingInner", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? BandPaddingInner { get; set; }
+
+        /// <summary>
+        /// Default outer padding for `x` and `y` band-ordinal scales.
+        /// If not specified, by default, band scale's paddingOuter is paddingInner/2.
+        /// </summary>
+        [JsonProperty("bandPaddingOuter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? BandPaddingOuter { get; set; }
+
+        /// <summary>
+        /// If true, values that exceed the data domain are clamped to either the minimum or maximum
+        /// range value
+        /// </summary>
+        [JsonProperty("clamp", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Clamp { get; set; }
+
+        /// <summary>
+        /// Default padding for continuous scales.
+        ///
+        /// __Default:__ `5` for continuous x-scale of a vertical bar and continuous y-scale of a
+        /// horizontal bar.; `0` otherwise.
+        /// </summary>
+        [JsonProperty("continuousPadding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? ContinuousPadding { get; set; }
+
+        /// <summary>
+        /// The default max value for mapping quantitative fields to bar's size/bandSize.
+        ///
+        /// If undefined (default), we will use the scale's `rangeStep` - 1.
+        /// </summary>
+        [JsonProperty("maxBandSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? MaxBandSize { get; set; }
+
+        /// <summary>
+        /// The default max value for mapping quantitative fields to text's size/fontSize.
+        ///
+        /// __Default value:__ `40`
+        /// </summary>
+        [JsonProperty("maxFontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? MaxFontSize { get; set; }
+
+        /// <summary>
+        /// Default max opacity for mapping a field to opacity.
+        ///
+        /// __Default value:__ `0.8`
+        /// </summary>
+        [JsonProperty("maxOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? MaxOpacity { get; set; }
+
+        /// <summary>
+        /// Default max value for point size scale.
+        /// </summary>
+        [JsonProperty("maxSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? MaxSize { get; set; }
+
+        /// <summary>
+        /// Default max strokeWidth for strokeWidth  (or rule/line's size) scale.
+        ///
+        /// __Default value:__ `4`
+        /// </summary>
+        [JsonProperty("maxStrokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? MaxStrokeWidth { get; set; }
+
+        /// <summary>
+        /// The default min value for mapping quantitative fields to bar and tick's size/bandSize
+        /// scale with zero=false.
+        ///
+        /// __Default value:__ `2`
+        /// </summary>
+        [JsonProperty("minBandSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? MinBandSize { get; set; }
+
+        /// <summary>
+        /// The default min value for mapping quantitative fields to tick's size/fontSize scale with
+        /// zero=false
+        ///
+        /// __Default value:__ `8`
+        /// </summary>
+        [JsonProperty("minFontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? MinFontSize { get; set; }
+
+        /// <summary>
+        /// Default minimum opacity for mapping a field to opacity.
+        ///
+        /// __Default value:__ `0.3`
+        /// </summary>
+        [JsonProperty("minOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? MinOpacity { get; set; }
+
+        /// <summary>
+        /// Default minimum value for point size scale with zero=false.
+        ///
+        /// __Default value:__ `9`
+        /// </summary>
+        [JsonProperty("minSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? MinSize { get; set; }
+
+        /// <summary>
+        /// Default minimum strokeWidth for strokeWidth (or rule/line's size) scale with zero=false.
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("minStrokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? MinStrokeWidth { get; set; }
+
+        /// <summary>
+        /// Default outer padding for `x` and `y` point-ordinal scales.
+        ///
+        /// __Default value:__ `0.5`
+        /// </summary>
+        [JsonProperty("pointPadding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? PointPadding { get; set; }
+
+        /// <summary>
+        /// Default range step for band and point scales of (1) the `y` channel
+        /// and (2) the `x` channel when the mark is not `text`.
+        ///
+        /// __Default value:__ `21`
+        /// </summary>
+        [JsonProperty("rangeStep")]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? RangeStep { get; set; }
+
+        /// <summary>
+        /// If true, rounds numeric output values to integers.
+        /// This can be helpful for snapping to the pixel grid.
+        /// (Only available for `x`, `y`, and `size` scales.)
+        /// </summary>
+        [JsonProperty("round", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Round { get; set; }
+
+        /// <summary>
+        /// Default range step for `x` band and point scales of text marks.
+        ///
+        /// __Default value:__ `90`
+        /// </summary>
+        [JsonProperty("textXRangeStep", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? TextXRangeStep { get; set; }
+
+        /// <summary>
+        /// Use the source data range before aggregation as scale domain instead of aggregated data
+        /// for aggregate axis.
+        ///
+        /// This is equivalent to setting `domain` to `"unaggregate"` for aggregated _quantitative_
+        /// fields by default.
+        ///
+        /// This property only works with aggregate functions that produce values within the raw data
+        /// domain (`"mean"`, `"average"`, `"median"`, `"q1"`, `"q3"`, `"min"`, `"max"`). For other
+        /// aggregations that produce values outside of the raw data domain (e.g. `"count"`,
+        /// `"sum"`), this property is ignored.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("useUnaggregatedDomain", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? UseUnaggregatedDomain { get; set; }
+    }
+
+    /// <summary>
+    /// An object hash for defining default properties for each type of selections.
+    /// </summary>
+    public partial record SelectionConfig
+    {
+        /// <summary>
+        /// The default definition for an [`interval`](selection.html#type) selection. All properties
+        /// and transformations
+        /// for an interval selection definition (except `type`) may be specified here.
+        ///
+        /// For instance, setting `interval` to `{"translate": false}` disables the ability to move
+        /// interval selections by default.
+        /// </summary>
+        [JsonProperty("interval", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public IntervalSelectionConfig? Interval { get; set; }
+
+        /// <summary>
+        /// The default definition for a [`multi`](selection.html#type) selection. All properties and
+        /// transformations
+        /// for a multi selection definition (except `type`) may be specified here.
+        ///
+        /// For instance, setting `multi` to `{"toggle": "event.altKey"}` adds additional values to
+        /// multi selections when clicking with the alt-key pressed by default.
+        /// </summary>
+        [JsonProperty("multi", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MultiSelectionConfig? Multi { get; set; }
+
+        /// <summary>
+        /// The default definition for a [`single`](selection.html#type) selection. All properties
+        /// and transformations
+        /// for a single selection definition (except `type`) may be specified here.
+        ///
+        /// For instance, setting `single` to `{"on": "dblclick"}` populates single selections on
+        /// double-click by default.
+        /// </summary>
+        [JsonProperty("single", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SingleSelectionConfig? Single { get; set; }
+    }
+
+    /// <summary>
+    /// The default definition for an [`interval`](selection.html#type) selection. All properties
+    /// and transformations
+    /// for an interval selection definition (except `type`) may be specified here.
+    ///
+    /// For instance, setting `interval` to `{"translate": false}` disables the ability to move
+    /// interval selections by default.
+    /// </summary>
+    public partial record IntervalSelectionConfig
+    {
+        /// <summary>
+        /// Establishes a two-way binding between the interval selection and the scales
+        /// used within the same view. This allows a user to interactively pan and
+        /// zoom the view.
+        /// </summary>
+        [JsonProperty("bind", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public BindEnum? Bind { get; set; }
+
+        /// <summary>
+        /// By default, all data values are considered to lie within an empty selection.
+        /// When set to `none`, empty selections contain no data values.
+        /// </summary>
+        [JsonProperty("empty", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Empty? Empty { get; set; }
+
+        /// <summary>
+        /// An array of encoding channels. The corresponding data field values
+        /// must match for a data tuple to fall within the selection.
+        /// </summary>
+        [JsonProperty("encodings", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SingleDefChannel[]? Encodings { get; set; }
+
+        /// <summary>
+        /// An array of field names whose values must match for a data tuple to
+        /// fall within the selection.
+        /// </summary>
+        [JsonProperty("fields", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Fields { get; set; }
+
+        /// <summary>
+        /// An interval selection also adds a rectangle mark to depict the
+        /// extents of the interval. The `mark` property can be used to customize the
+        /// appearance of the mark.
+        /// </summary>
+        [JsonProperty("mark", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public BrushConfig? Mark { get; set; }
+
+        /// <summary>
+        /// A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or
+        /// selector) that triggers the selection.
+        /// For interval selections, the event stream must specify a [start and
+        /// end](https://vega.github.io/vega/docs/event-streams/#between-filters).
+        /// </summary>
+        [JsonProperty("on")]
+        public object? On { get; set; }
+
+        /// <summary>
+        /// With layered and multi-view displays, a strategy that determines how
+        /// selections' data queries are resolved when applied in a filter transform,
+        /// conditional encoding rule, or scale domain.
+        /// </summary>
+        [JsonProperty("resolve", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionResolution? Resolve { get; set; }
+
+        /// <summary>
+        /// When truthy, allows a user to interactively move an interval selection
+        /// back-and-forth. Can be `true`, `false` (to disable panning), or a
+        /// [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)
+        /// which must include a start and end event to trigger continuous panning.
+        ///
+        /// __Default value:__ `true`, which corresponds to
+        /// `[mousedown, window:mouseup] &gt; window:mousemove!` which corresponds to
+        /// clicks and dragging within an interval selection to reposition it.
+        /// </summary>
+        [JsonProperty("translate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Translate? Translate { get; set; }
+
+        /// <summary>
+        /// When truthy, allows a user to interactively resize an interval selection.
+        /// Can be `true`, `false` (to disable zooming), or a [Vega event stream
+        /// definition](https://vega.github.io/vega/docs/event-streams/). Currently,
+        /// only `wheel` events are supported.
+        ///
+        ///
+        /// __Default value:__ `true`, which corresponds to `wheel!`.
+        /// </summary>
+        [JsonProperty("zoom", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Translate? Zoom { get; set; }
+    }
+
+    /// <summary>
+    /// An interval selection also adds a rectangle mark to depict the
+    /// extents of the interval. The `mark` property can be used to customize the
+    /// appearance of the mark.
+    /// </summary>
+    public partial record BrushConfig
+    {
+        /// <summary>
+        /// The fill color of the interval mark.
+        ///
+        /// __Default value:__ `#333333`
+        /// </summary>
+        [JsonProperty("fill", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Fill { get; set; }
+
+        /// <summary>
+        /// The fill opacity of the interval mark (a value between 0 and 1).
+        ///
+        /// __Default value:__ `0.125`
+        /// </summary>
+        [JsonProperty("fillOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? FillOpacity { get; set; }
+
+        /// <summary>
+        /// The stroke color of the interval mark.
+        ///
+        /// __Default value:__ `#ffffff`
+        /// </summary>
+        [JsonProperty("stroke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Stroke { get; set; }
+
+        /// <summary>
+        /// An array of alternating stroke and space lengths,
+        /// for creating dashed or dotted lines.
+        /// </summary>
+        [JsonProperty("strokeDash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? StrokeDash { get; set; }
+
+        /// <summary>
+        /// The offset (in pixels) with which to begin drawing the stroke dash array.
+        /// </summary>
+        [JsonProperty("strokeDashOffset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeDashOffset { get; set; }
+
+        /// <summary>
+        /// The stroke opacity of the interval mark (a value between 0 and 1).
+        /// </summary>
+        [JsonProperty("strokeOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeOpacity { get; set; }
+
+        /// <summary>
+        /// The stroke width of the interval mark.
+        /// </summary>
+        [JsonProperty("strokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeWidth { get; set; }
+    }
+
+    /// <summary>
+    /// The default definition for a [`multi`](selection.html#type) selection. All properties and
+    /// transformations
+    /// for a multi selection definition (except `type`) may be specified here.
+    ///
+    /// For instance, setting `multi` to `{"toggle": "event.altKey"}` adds additional values to
+    /// multi selections when clicking with the alt-key pressed by default.
+    /// </summary>
+    public partial record MultiSelectionConfig
+    {
+        /// <summary>
+        /// By default, all data values are considered to lie within an empty selection.
+        /// When set to `none`, empty selections contain no data values.
+        /// </summary>
+        [JsonProperty("empty", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Empty? Empty { get; set; }
+
+        /// <summary>
+        /// An array of encoding channels. The corresponding data field values
+        /// must match for a data tuple to fall within the selection.
+        /// </summary>
+        [JsonProperty("encodings", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SingleDefChannel[]? Encodings { get; set; }
+
+        /// <summary>
+        /// An array of field names whose values must match for a data tuple to
+        /// fall within the selection.
+        /// </summary>
+        [JsonProperty("fields", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Fields { get; set; }
+
+        /// <summary>
+        /// When true, an invisible voronoi diagram is computed to accelerate discrete
+        /// selection. The data value _nearest_ the mouse cursor is added to the selection.
+        ///
+        /// See the [nearest transform](nearest.html) documentation for more information.
+        /// </summary>
+        [JsonProperty("nearest", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Nearest { get; set; }
+
+        /// <summary>
+        /// A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or
+        /// selector) that triggers the selection.
+        /// For interval selections, the event stream must specify a [start and
+        /// end](https://vega.github.io/vega/docs/event-streams/#between-filters).
+        /// </summary>
+        [JsonProperty("on")]
+        public object? On { get; set; }
+
+        /// <summary>
+        /// With layered and multi-view displays, a strategy that determines how
+        /// selections' data queries are resolved when applied in a filter transform,
+        /// conditional encoding rule, or scale domain.
+        /// </summary>
+        [JsonProperty("resolve", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionResolution? Resolve { get; set; }
+
+        /// <summary>
+        /// Controls whether data values should be toggled or only ever inserted into
+        /// multi selections. Can be `true`, `false` (for insertion only), or a
+        /// [Vega expression](https://vega.github.io/vega/docs/expressions/).
+        ///
+        /// __Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,
+        /// data values are toggled when a user interacts with the shift-key pressed).
+        ///
+        /// See the [toggle transform](toggle.html) documentation for more information.
+        /// </summary>
+        [JsonProperty("toggle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Translate? Toggle { get; set; }
+    }
+
+    /// <summary>
+    /// The default definition for a [`single`](selection.html#type) selection. All properties
+    /// and transformations
+    /// for a single selection definition (except `type`) may be specified here.
+    ///
+    /// For instance, setting `single` to `{"on": "dblclick"}` populates single selections on
+    /// double-click by default.
+    /// </summary>
+    public partial record SingleSelectionConfig
+    {
+        /// <summary>
+        /// Establish a two-way binding between a single selection and input elements
+        /// (also known as dynamic query widgets). A binding takes the form of
+        /// Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)
+        /// or can be a mapping between projected field/encodings and binding definitions.
+        ///
+        /// See the [bind transform](bind.html) documentation for more information.
+        /// </summary>
+        [JsonProperty("bind", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Dictionary<string, VgBinding>? Bind { get; set; }
+
+        /// <summary>
+        /// By default, all data values are considered to lie within an empty selection.
+        /// When set to `none`, empty selections contain no data values.
+        /// </summary>
+        [JsonProperty("empty", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Empty? Empty { get; set; }
+
+        /// <summary>
+        /// An array of encoding channels. The corresponding data field values
+        /// must match for a data tuple to fall within the selection.
+        /// </summary>
+        [JsonProperty("encodings", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SingleDefChannel[]? Encodings { get; set; }
+
+        /// <summary>
+        /// An array of field names whose values must match for a data tuple to
+        /// fall within the selection.
+        /// </summary>
+        [JsonProperty("fields", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Fields { get; set; }
+
+        /// <summary>
+        /// When true, an invisible voronoi diagram is computed to accelerate discrete
+        /// selection. The data value _nearest_ the mouse cursor is added to the selection.
+        ///
+        /// See the [nearest transform](nearest.html) documentation for more information.
+        /// </summary>
+        [JsonProperty("nearest", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Nearest { get; set; }
+
+        /// <summary>
+        /// A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or
+        /// selector) that triggers the selection.
+        /// For interval selections, the event stream must specify a [start and
+        /// end](https://vega.github.io/vega/docs/event-streams/#between-filters).
+        /// </summary>
+        [JsonProperty("on")]
+        public object? On { get; set; }
+
+        /// <summary>
+        /// With layered and multi-view displays, a strategy that determines how
+        /// selections' data queries are resolved when applied in a filter transform,
+        /// conditional encoding rule, or scale domain.
+        /// </summary>
+        [JsonProperty("resolve", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionResolution? Resolve { get; set; }
+    }
+
+    public partial record VgBinding
+    {
+        [JsonProperty("element", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Element { get; set; }
+
+        [JsonProperty("input", Required = Required.Always)]
+        public string Input { get; set; }
+
+        [JsonProperty("options", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Options { get; set; }
+
+        [JsonProperty("max", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Max { get; set; }
+
+        [JsonProperty("min", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Min { get; set; }
+
+        [JsonProperty("step", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Step { get; set; }
+    }
+
+    public partial record VgMarkConfig
+    {
+        /// <summary>
+        /// The horizontal alignment of the text. One of `"left"`, `"right"`, `"center"`.
+        /// </summary>
+        [JsonProperty("align", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public HorizontalAlign? Align { get; set; }
+
+        /// <summary>
+        /// The rotation angle of the text, in degrees.
+        /// </summary>
+        [JsonProperty("angle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
+        public double? Angle { get; set; }
+
+        /// <summary>
+        /// The vertical alignment of the text. One of `"top"`, `"middle"`, `"bottom"`.
+        ///
+        /// __Default value:__ `"middle"`
+        /// </summary>
+        [JsonProperty("baseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VerticalAlign? Baseline { get; set; }
+
+        /// <summary>
+        /// The mouse cursor used over the mark. Any valid [CSS cursor
+        /// type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.
+        /// </summary>
+        [JsonProperty("cursor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Cursor? Cursor { get; set; }
+
+        /// <summary>
+        /// The horizontal offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dx", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dx { get; set; }
+
+        /// <summary>
+        /// The vertical offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dy { get; set; }
+
+        /// <summary>
+        /// Default Fill Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("fill", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Fill { get; set; }
+
+        /// <summary>
+        /// The fill opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("fillOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? FillOpacity { get; set; }
+
+        /// <summary>
+        /// The typeface to set the text in (e.g., `"Helvetica Neue"`).
+        /// </summary>
+        [JsonProperty("font", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Font { get; set; }
+
+        /// <summary>
+        /// The font size, in pixels.
+        /// </summary>
+        [JsonProperty("fontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? FontSize { get; set; }
+
+        /// <summary>
+        /// The font style (e.g., `"italic"`).
+        /// </summary>
+        [JsonProperty("fontStyle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontStyle? FontStyle { get; set; }
+
+        /// <summary>
+        /// The font weight (e.g., `"bold"`).
+        /// </summary>
+        [JsonProperty("fontWeight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontWeightUnion? FontWeight { get; set; }
+
+        /// <summary>
+        /// A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
+        /// </summary>
+        [JsonProperty("href", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Href { get; set; }
+
+        /// <summary>
+        /// The line interpolation method to use for line and area marks. One of the following:
+        /// - `"linear"`: piecewise linear segments, as in a polyline.
+        /// - `"linear-closed"`: close the linear segments to form a polygon.
+        /// - `"step"`: alternate between horizontal and vertical segments, as in a step function.
+        /// - `"step-before"`: alternate between vertical and horizontal segments, as in a step
+        /// function.
+        /// - `"step-after"`: alternate between horizontal and vertical segments, as in a step
+        /// function.
+        /// - `"basis"`: a B-spline, with control point duplication on the ends.
+        /// - `"basis-open"`: an open B-spline; may not intersect the start or end.
+        /// - `"basis-closed"`: a closed B-spline, as in a loop.
+        /// - `"cardinal"`: a Cardinal spline, with control point duplication on the ends.
+        /// - `"cardinal-open"`: an open Cardinal spline; may not intersect the start or end, but
+        /// will intersect other control points.
+        /// - `"cardinal-closed"`: a closed Cardinal spline, as in a loop.
+        /// - `"bundle"`: equivalent to basis, except the tension parameter is used to straighten the
+        /// spline.
+        /// - `"monotone"`: cubic interpolation that preserves monotonicity in y.
+        /// </summary>
+        [JsonProperty("interpolate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Interpolate? Interpolate { get; set; }
+
+        /// <summary>
+        /// The maximum length of the text mark in pixels (default 0, indicating no limit). The text
+        /// value will be automatically truncated if the rendered size exceeds the limit.
+        /// </summary>
+        [JsonProperty("limit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Limit { get; set; }
+
+        /// <summary>
+        /// The overall opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or
+        /// `square` marks or layered `bar` charts and `1` otherwise.
+        /// </summary>
+        [JsonProperty("opacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Opacity { get; set; }
+
+        /// <summary>
+        /// The orientation of a non-stacked bar, tick, area, and line charts.
+        /// The value is either horizontal (default) or vertical.
+        /// - For bar, rule and tick, this determines whether the size of the bar and tick
+        /// should be applied to x or y dimension.
+        /// - For area, this property determines the orient property of the Vega output.
+        /// - For line, this property determines the sort order of the points in the line
+        /// if `config.sortLineBy` is not specified.
+        /// For stacked charts, this is always determined by the orientation of the stack;
+        /// therefore explicitly specified value will be ignored.
+        /// </summary>
+        [JsonProperty("orient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Orient? Orient { get; set; }
+
+        /// <summary>
+        /// Polar coordinate radial offset, in pixels, of the text label from the origin determined
+        /// by the `x` and `y` properties.
+        /// </summary>
+        [JsonProperty("radius", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Radius { get; set; }
+
+        /// <summary>
+        /// The default symbol shape to use. One of: `"circle"` (default), `"square"`, `"cross"`,
+        /// `"diamond"`, `"triangle-up"`, or `"triangle-down"`, or a custom SVG path.
+        ///
+        /// __Default value:__ `"circle"`
+        /// </summary>
+        [JsonProperty("shape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Shape { get; set; }
+
+        /// <summary>
+        /// The pixel area each the point/circle/square.
+        /// For example: in the case of circles, the radius is determined in part by the square root
+        /// of the size value.
+        ///
+        /// __Default value:__ `30`
+        /// </summary>
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Size { get; set; }
+
+        /// <summary>
+        /// Default Stroke Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("stroke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Stroke { get; set; }
+
+        /// <summary>
+        /// An array of alternating stroke, space lengths for creating dashed or dotted lines.
+        /// </summary>
+        [JsonProperty("strokeDash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? StrokeDash { get; set; }
+
+        /// <summary>
+        /// The offset (in pixels) into which to begin drawing with the stroke dash array.
+        /// </summary>
+        [JsonProperty("strokeDashOffset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeDashOffset { get; set; }
+
+        /// <summary>
+        /// The stroke opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("strokeOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? StrokeOpacity { get; set; }
+
+        /// <summary>
+        /// The stroke width, in pixels.
+        /// </summary>
+        [JsonProperty("strokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? StrokeWidth { get; set; }
+
+        /// <summary>
+        /// Depending on the interpolation type, sets the tension parameter (for line and area marks).
+        /// </summary>
+        [JsonProperty("tension", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Tension { get; set; }
+
+        /// <summary>
+        /// Placeholder text if the `text` channel is not specified
+        /// </summary>
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+
+        /// <summary>
+        /// Polar coordinate angle, in radians, of the text label from the origin determined by the
+        /// `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark
+        /// `startAngle` and `endAngle` properties: angles are measured in radians, with `0`
+        /// indicating "north".
+        /// </summary>
+        [JsonProperty("theta", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Theta { get; set; }
+    }
+
+    /// <summary>
+    /// Text-Specific Config
+    /// </summary>
+    public partial record TextConfig
+    {
+        /// <summary>
+        /// The horizontal alignment of the text. One of `"left"`, `"right"`, `"center"`.
+        /// </summary>
+        [JsonProperty("align", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public HorizontalAlign? Align { get; set; }
+
+        /// <summary>
+        /// The rotation angle of the text, in degrees.
+        /// </summary>
+        [JsonProperty("angle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
+        public double? Angle { get; set; }
+
+        /// <summary>
+        /// The vertical alignment of the text. One of `"top"`, `"middle"`, `"bottom"`.
+        ///
+        /// __Default value:__ `"middle"`
+        /// </summary>
+        [JsonProperty("baseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VerticalAlign? Baseline { get; set; }
+
+        /// <summary>
+        /// Default color.  Note that `fill` and `stroke` have higher precedence than `color` and
+        /// will override `color`.
+        ///
+        /// __Default value:__ &lt;span style="color: #4682b4;"&gt;&amp;#9632;&lt;/span&gt; `"#4682b4"`
+        ///
+        /// __Note:__ This property cannot be used in a [style config](mark.html#style-config).
+        /// </summary>
+        [JsonProperty("color", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Color { get; set; }
+
+        /// <summary>
+        /// The mouse cursor used over the mark. Any valid [CSS cursor
+        /// type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.
+        /// </summary>
+        [JsonProperty("cursor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Cursor? Cursor { get; set; }
+
+        /// <summary>
+        /// The horizontal offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dx", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dx { get; set; }
+
+        /// <summary>
+        /// The vertical offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dy { get; set; }
+
+        /// <summary>
+        /// Default Fill Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("fill", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Fill { get; set; }
+
+        /// <summary>
+        /// Whether the mark's color should be used as fill color instead of stroke color.
+        ///
+        /// __Default value:__ `true` for all marks except `point` and `false` for `point`.
+        ///
+        /// __Applicable for:__ `bar`, `point`, `circle`, `square`, and `area` marks.
+        ///
+        /// __Note:__ This property cannot be used in a [style config](mark.html#style-config).
+        /// </summary>
+        [JsonProperty("filled", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Filled { get; set; }
+
+        /// <summary>
+        /// The fill opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("fillOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? FillOpacity { get; set; }
+
+        /// <summary>
+        /// The typeface to set the text in (e.g., `"Helvetica Neue"`).
+        /// </summary>
+        [JsonProperty("font", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Font { get; set; }
+
+        /// <summary>
+        /// The font size, in pixels.
+        /// </summary>
+        [JsonProperty("fontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? FontSize { get; set; }
+
+        /// <summary>
+        /// The font style (e.g., `"italic"`).
+        /// </summary>
+        [JsonProperty("fontStyle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontStyle? FontStyle { get; set; }
+
+        /// <summary>
+        /// The font weight (e.g., `"bold"`).
+        /// </summary>
+        [JsonProperty("fontWeight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontWeightUnion? FontWeight { get; set; }
+
+        /// <summary>
+        /// A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
+        /// </summary>
+        [JsonProperty("href", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Href { get; set; }
+
+        /// <summary>
+        /// The line interpolation method to use for line and area marks. One of the following:
+        /// - `"linear"`: piecewise linear segments, as in a polyline.
+        /// - `"linear-closed"`: close the linear segments to form a polygon.
+        /// - `"step"`: alternate between horizontal and vertical segments, as in a step function.
+        /// - `"step-before"`: alternate between vertical and horizontal segments, as in a step
+        /// function.
+        /// - `"step-after"`: alternate between horizontal and vertical segments, as in a step
+        /// function.
+        /// - `"basis"`: a B-spline, with control point duplication on the ends.
+        /// - `"basis-open"`: an open B-spline; may not intersect the start or end.
+        /// - `"basis-closed"`: a closed B-spline, as in a loop.
+        /// - `"cardinal"`: a Cardinal spline, with control point duplication on the ends.
+        /// - `"cardinal-open"`: an open Cardinal spline; may not intersect the start or end, but
+        /// will intersect other control points.
+        /// - `"cardinal-closed"`: a closed Cardinal spline, as in a loop.
+        /// - `"bundle"`: equivalent to basis, except the tension parameter is used to straighten the
+        /// spline.
+        /// - `"monotone"`: cubic interpolation that preserves monotonicity in y.
+        /// </summary>
+        [JsonProperty("interpolate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Interpolate? Interpolate { get; set; }
+
+        /// <summary>
+        /// The maximum length of the text mark in pixels (default 0, indicating no limit). The text
+        /// value will be automatically truncated if the rendered size exceeds the limit.
+        /// </summary>
+        [JsonProperty("limit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Limit { get; set; }
+
+        /// <summary>
+        /// The overall opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or
+        /// `square` marks or layered `bar` charts and `1` otherwise.
+        /// </summary>
+        [JsonProperty("opacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Opacity { get; set; }
+
+        /// <summary>
+        /// The orientation of a non-stacked bar, tick, area, and line charts.
+        /// The value is either horizontal (default) or vertical.
+        /// - For bar, rule and tick, this determines whether the size of the bar and tick
+        /// should be applied to x or y dimension.
+        /// - For area, this property determines the orient property of the Vega output.
+        /// - For line, this property determines the sort order of the points in the line
+        /// if `config.sortLineBy` is not specified.
+        /// For stacked charts, this is always determined by the orientation of the stack;
+        /// therefore explicitly specified value will be ignored.
+        /// </summary>
+        [JsonProperty("orient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Orient? Orient { get; set; }
+
+        /// <summary>
+        /// Polar coordinate radial offset, in pixels, of the text label from the origin determined
+        /// by the `x` and `y` properties.
+        /// </summary>
+        [JsonProperty("radius", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Radius { get; set; }
+
+        /// <summary>
+        /// The default symbol shape to use. One of: `"circle"` (default), `"square"`, `"cross"`,
+        /// `"diamond"`, `"triangle-up"`, or `"triangle-down"`, or a custom SVG path.
+        ///
+        /// __Default value:__ `"circle"`
+        /// </summary>
+        [JsonProperty("shape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Shape { get; set; }
+
+        /// <summary>
+        /// Whether month names and weekday names should be abbreviated.
+        /// </summary>
+        [JsonProperty("shortTimeLabels", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ShortTimeLabels { get; set; }
+
+        /// <summary>
+        /// The pixel area each the point/circle/square.
+        /// For example: in the case of circles, the radius is determined in part by the square root
+        /// of the size value.
+        ///
+        /// __Default value:__ `30`
+        /// </summary>
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Size { get; set; }
+
+        /// <summary>
+        /// Default Stroke Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("stroke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Stroke { get; set; }
+
+        /// <summary>
+        /// An array of alternating stroke, space lengths for creating dashed or dotted lines.
+        /// </summary>
+        [JsonProperty("strokeDash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? StrokeDash { get; set; }
+
+        /// <summary>
+        /// The offset (in pixels) into which to begin drawing with the stroke dash array.
+        /// </summary>
+        [JsonProperty("strokeDashOffset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeDashOffset { get; set; }
+
+        /// <summary>
+        /// The stroke opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("strokeOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? StrokeOpacity { get; set; }
+
+        /// <summary>
+        /// The stroke width, in pixels.
+        /// </summary>
+        [JsonProperty("strokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? StrokeWidth { get; set; }
+
+        /// <summary>
+        /// Depending on the interpolation type, sets the tension parameter (for line and area marks).
+        /// </summary>
+        [JsonProperty("tension", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Tension { get; set; }
+
+        /// <summary>
+        /// Placeholder text if the `text` channel is not specified
+        /// </summary>
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+
+        /// <summary>
+        /// Polar coordinate angle, in radians, of the text label from the origin determined by the
+        /// `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark
+        /// `startAngle` and `endAngle` properties: angles are measured in radians, with `0`
+        /// indicating "north".
+        /// </summary>
+        [JsonProperty("theta", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Theta { get; set; }
+    }
+
+    /// <summary>
+    /// Tick-Specific Config
+    /// </summary>
+    public partial record TickConfig
+    {
+        /// <summary>
+        /// The horizontal alignment of the text. One of `"left"`, `"right"`, `"center"`.
+        /// </summary>
+        [JsonProperty("align", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public HorizontalAlign? Align { get; set; }
+
+        /// <summary>
+        /// The rotation angle of the text, in degrees.
+        /// </summary>
+        [JsonProperty("angle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
+        public double? Angle { get; set; }
+
+        /// <summary>
+        /// The width of the ticks.
+        ///
+        /// __Default value:__  2/3 of rangeStep.
+        /// </summary>
+        [JsonProperty("bandSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? BandSize { get; set; }
+
+        /// <summary>
+        /// The vertical alignment of the text. One of `"top"`, `"middle"`, `"bottom"`.
+        ///
+        /// __Default value:__ `"middle"`
+        /// </summary>
+        [JsonProperty("baseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VerticalAlign? Baseline { get; set; }
+
+        /// <summary>
+        /// Default color.  Note that `fill` and `stroke` have higher precedence than `color` and
+        /// will override `color`.
+        ///
+        /// __Default value:__ &lt;span style="color: #4682b4;"&gt;&amp;#9632;&lt;/span&gt; `"#4682b4"`
+        ///
+        /// __Note:__ This property cannot be used in a [style config](mark.html#style-config).
+        /// </summary>
+        [JsonProperty("color", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Color { get; set; }
+
+        /// <summary>
+        /// The mouse cursor used over the mark. Any valid [CSS cursor
+        /// type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.
+        /// </summary>
+        [JsonProperty("cursor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Cursor? Cursor { get; set; }
+
+        /// <summary>
+        /// The horizontal offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dx", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dx { get; set; }
+
+        /// <summary>
+        /// The vertical offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dy { get; set; }
+
+        /// <summary>
+        /// Default Fill Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("fill", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Fill { get; set; }
+
+        /// <summary>
+        /// Whether the mark's color should be used as fill color instead of stroke color.
+        ///
+        /// __Default value:__ `true` for all marks except `point` and `false` for `point`.
+        ///
+        /// __Applicable for:__ `bar`, `point`, `circle`, `square`, and `area` marks.
+        ///
+        /// __Note:__ This property cannot be used in a [style config](mark.html#style-config).
+        /// </summary>
+        [JsonProperty("filled", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Filled { get; set; }
+
+        /// <summary>
+        /// The fill opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("fillOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? FillOpacity { get; set; }
+
+        /// <summary>
+        /// The typeface to set the text in (e.g., `"Helvetica Neue"`).
+        /// </summary>
+        [JsonProperty("font", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Font { get; set; }
+
+        /// <summary>
+        /// The font size, in pixels.
+        /// </summary>
+        [JsonProperty("fontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? FontSize { get; set; }
+
+        /// <summary>
+        /// The font style (e.g., `"italic"`).
+        /// </summary>
+        [JsonProperty("fontStyle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontStyle? FontStyle { get; set; }
+
+        /// <summary>
+        /// The font weight (e.g., `"bold"`).
+        /// </summary>
+        [JsonProperty("fontWeight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontWeightUnion? FontWeight { get; set; }
+
+        /// <summary>
+        /// A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
+        /// </summary>
+        [JsonProperty("href", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Href { get; set; }
+
+        /// <summary>
+        /// The line interpolation method to use for line and area marks. One of the following:
+        /// - `"linear"`: piecewise linear segments, as in a polyline.
+        /// - `"linear-closed"`: close the linear segments to form a polygon.
+        /// - `"step"`: alternate between horizontal and vertical segments, as in a step function.
+        /// - `"step-before"`: alternate between vertical and horizontal segments, as in a step
+        /// function.
+        /// - `"step-after"`: alternate between horizontal and vertical segments, as in a step
+        /// function.
+        /// - `"basis"`: a B-spline, with control point duplication on the ends.
+        /// - `"basis-open"`: an open B-spline; may not intersect the start or end.
+        /// - `"basis-closed"`: a closed B-spline, as in a loop.
+        /// - `"cardinal"`: a Cardinal spline, with control point duplication on the ends.
+        /// - `"cardinal-open"`: an open Cardinal spline; may not intersect the start or end, but
+        /// will intersect other control points.
+        /// - `"cardinal-closed"`: a closed Cardinal spline, as in a loop.
+        /// - `"bundle"`: equivalent to basis, except the tension parameter is used to straighten the
+        /// spline.
+        /// - `"monotone"`: cubic interpolation that preserves monotonicity in y.
+        /// </summary>
+        [JsonProperty("interpolate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Interpolate? Interpolate { get; set; }
+
+        /// <summary>
+        /// The maximum length of the text mark in pixels (default 0, indicating no limit). The text
+        /// value will be automatically truncated if the rendered size exceeds the limit.
+        /// </summary>
+        [JsonProperty("limit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Limit { get; set; }
+
+        /// <summary>
+        /// The overall opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or
+        /// `square` marks or layered `bar` charts and `1` otherwise.
+        /// </summary>
+        [JsonProperty("opacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Opacity { get; set; }
+
+        /// <summary>
+        /// The orientation of a non-stacked bar, tick, area, and line charts.
+        /// The value is either horizontal (default) or vertical.
+        /// - For bar, rule and tick, this determines whether the size of the bar and tick
+        /// should be applied to x or y dimension.
+        /// - For area, this property determines the orient property of the Vega output.
+        /// - For line, this property determines the sort order of the points in the line
+        /// if `config.sortLineBy` is not specified.
+        /// For stacked charts, this is always determined by the orientation of the stack;
+        /// therefore explicitly specified value will be ignored.
+        /// </summary>
+        [JsonProperty("orient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Orient? Orient { get; set; }
+
+        /// <summary>
+        /// Polar coordinate radial offset, in pixels, of the text label from the origin determined
+        /// by the `x` and `y` properties.
+        /// </summary>
+        [JsonProperty("radius", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Radius { get; set; }
+
+        /// <summary>
+        /// The default symbol shape to use. One of: `"circle"` (default), `"square"`, `"cross"`,
+        /// `"diamond"`, `"triangle-up"`, or `"triangle-down"`, or a custom SVG path.
+        ///
+        /// __Default value:__ `"circle"`
+        /// </summary>
+        [JsonProperty("shape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Shape { get; set; }
+
+        /// <summary>
+        /// The pixel area each the point/circle/square.
+        /// For example: in the case of circles, the radius is determined in part by the square root
+        /// of the size value.
+        ///
+        /// __Default value:__ `30`
+        /// </summary>
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Size { get; set; }
+
+        /// <summary>
+        /// Default Stroke Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("stroke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Stroke { get; set; }
+
+        /// <summary>
+        /// An array of alternating stroke, space lengths for creating dashed or dotted lines.
+        /// </summary>
+        [JsonProperty("strokeDash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? StrokeDash { get; set; }
+
+        /// <summary>
+        /// The offset (in pixels) into which to begin drawing with the stroke dash array.
+        /// </summary>
+        [JsonProperty("strokeDashOffset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeDashOffset { get; set; }
+
+        /// <summary>
+        /// The stroke opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("strokeOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? StrokeOpacity { get; set; }
+
+        /// <summary>
+        /// The stroke width, in pixels.
+        /// </summary>
+        [JsonProperty("strokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? StrokeWidth { get; set; }
+
+        /// <summary>
+        /// Depending on the interpolation type, sets the tension parameter (for line and area marks).
+        /// </summary>
+        [JsonProperty("tension", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Tension { get; set; }
+
+        /// <summary>
+        /// Placeholder text if the `text` channel is not specified
+        /// </summary>
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+
+        /// <summary>
+        /// Polar coordinate angle, in radians, of the text label from the origin determined by the
+        /// `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark
+        /// `startAngle` and `endAngle` properties: angles are measured in radians, with `0`
+        /// indicating "north".
+        /// </summary>
+        [JsonProperty("theta", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Theta { get; set; }
+
+        /// <summary>
+        /// Thickness of the tick mark.
+        ///
+        /// __Default value:__  `1`
+        /// </summary>
+        [JsonProperty("thickness", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Thickness { get; set; }
+    }
+
+    /// <summary>
+    /// Title configuration, which determines default properties for all [titles](title.html).
+    /// For a full list of title configuration options, please see the [corresponding section of
+    /// the title documentation](title.html#config).
+    /// </summary>
+    public partial record VgTitleConfig
+    {
+        /// <summary>
+        /// The anchor position for placing the title. One of `"start"`, `"middle"`, or `"end"`. For
+        /// example, with an orientation of top these anchor positions map to a left-, center-, or
+        /// right-aligned title.
+        ///
+        /// __Default value:__ `"middle"` for [single](spec.html) and [layered](layer.html) views.
+        /// `"start"` for other composite views.
+        ///
+        /// __Note:__ [For now](https://github.com/vega/vega-lite/issues/2875), `anchor` is only
+        /// customizable only for [single](spec.html) and [layered](layer.html) views.  For other
+        /// composite views, `anchor` is always `"start"`.
+        /// </summary>
+        [JsonProperty("anchor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Anchor? Anchor { get; set; }
+
+        /// <summary>
+        /// Angle in degrees of title text.
+        /// </summary>
+        [JsonProperty("angle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Angle { get; set; }
+
+        /// <summary>
+        /// Vertical text baseline for title text.
+        /// </summary>
+        [JsonProperty("baseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VerticalAlign? Baseline { get; set; }
+
+        /// <summary>
+        /// Text color for title text.
+        /// </summary>
+        [JsonProperty("color", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Color { get; set; }
+
+        /// <summary>
+        /// Font name for title text.
+        /// </summary>
+        [JsonProperty("font", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Font { get; set; }
+
+        /// <summary>
+        /// Font size in pixels for title text.
+        ///
+        /// __Default value:__ `10`.
+        /// </summary>
+        [JsonProperty("fontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? FontSize { get; set; }
+
+        /// <summary>
+        /// Font weight for title text.
+        /// </summary>
+        [JsonProperty("fontWeight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontWeightUnion? FontWeight { get; set; }
+
+        /// <summary>
+        /// The maximum allowed length in pixels of legend labels.
+        /// </summary>
+        [JsonProperty("limit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Limit { get; set; }
+
+        /// <summary>
+        /// Offset in pixels of the title from the chart body and axes.
+        /// </summary>
+        [JsonProperty("offset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Offset { get; set; }
+
+        /// <summary>
+        /// Default title orientation ("top", "bottom", "left", or "right")
+        /// </summary>
+        [JsonProperty("orient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TitleOrient? Orient { get; set; }
+    }
+
+    /// <summary>
+    /// Default properties for [single view plots](spec.html#single).
+    /// </summary>
+    public partial record ViewConfig
+    {
+        /// <summary>
+        /// Whether the view should be clipped.
+        /// </summary>
+        [JsonProperty("clip", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Clip { get; set; }
+
+        /// <summary>
+        /// The fill color.
+        ///
+        /// __Default value:__ (none)
+        /// </summary>
+        [JsonProperty("fill", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Fill { get; set; }
+
+        /// <summary>
+        /// The fill opacity (value between [0,1]).
+        ///
+        /// __Default value:__ (none)
+        /// </summary>
+        [JsonProperty("fillOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? FillOpacity { get; set; }
+
+        /// <summary>
+        /// The default height of the single plot or each plot in a trellis plot when the
+        /// visualization has a continuous (non-ordinal) y-scale with `rangeStep` = `null`.
+        ///
+        /// __Default value:__ `200`
+        /// </summary>
+        [JsonProperty("height", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Height { get; set; }
+
+        /// <summary>
+        /// The stroke color.
+        ///
+        /// __Default value:__ (none)
+        /// </summary>
+        [JsonProperty("stroke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Stroke { get; set; }
+
+        /// <summary>
+        /// An array of alternating stroke, space lengths for creating dashed or dotted lines.
+        ///
+        /// __Default value:__ (none)
+        /// </summary>
+        [JsonProperty("strokeDash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? StrokeDash { get; set; }
+
+        /// <summary>
+        /// The offset (in pixels) into which to begin drawing with the stroke dash array.
+        ///
+        /// __Default value:__ (none)
+        /// </summary>
+        [JsonProperty("strokeDashOffset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeDashOffset { get; set; }
+
+        /// <summary>
+        /// The stroke opacity (value between [0,1]).
+        ///
+        /// __Default value:__ (none)
+        /// </summary>
+        [JsonProperty("strokeOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeOpacity { get; set; }
+
+        /// <summary>
+        /// The stroke width, in pixels.
+        ///
+        /// __Default value:__ (none)
+        /// </summary>
+        [JsonProperty("strokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeWidth { get; set; }
+
+        /// <summary>
+        /// The default width of the single plot or each plot in a trellis plot when the
+        /// visualization has a continuous (non-ordinal) x-scale or ordinal x-scale with `rangeStep`
+        /// = `null`.
+        ///
+        /// __Default value:__ `200`
+        /// </summary>
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Width { get; set; }
+    }
+
+    /// <summary>
+    /// An object describing the data source
+    ///
+    /// Secondary data source to lookup in.
+    /// </summary>
+    public partial record Data
+    {
+        /// <summary>
+        /// An object that specifies the format for parsing the data file.
+        ///
+        /// An object that specifies the format for parsing the data values.
+        ///
+        /// An object that specifies the format for parsing the data.
+        /// </summary>
+        [JsonProperty("format", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DataFormat? Format { get; set; }
+
+        /// <summary>
+        /// An URL from which to load the data set. Use the `format.type` property
+        /// to ensure the loaded data is correctly parsed.
+        /// </summary>
+        [JsonProperty("url", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Url { get; set; }
+
+        /// <summary>
+        /// The full data set, included inline. This can be an array of objects or primitive values
+        /// or a string.
+        /// Arrays of primitive values are ingested as objects with a `data` property. Strings are
+        /// parsed according to the specified format type.
+        /// </summary>
+        [JsonProperty("values", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Values? Values { get; set; }
+
+        /// <summary>
+        /// Provide a placeholder name and bind data at runtime.
+        /// </summary>
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Name { get; set; }
+    }
+
+    /// <summary>
+    /// An object that specifies the format for parsing the data file.
+    ///
+    /// An object that specifies the format for parsing the data values.
+    ///
+    /// An object that specifies the format for parsing the data.
+    /// </summary>
+    public partial record DataFormat
+    {
+        /// <summary>
+        /// If set to auto (the default), perform automatic type inference to determine the desired
+        /// data types.
+        /// Alternatively, a parsing directive object can be provided for explicit data types. Each
+        /// property of the object corresponds to a field name, and the value to the desired data
+        /// type (one of `"number"`, `"boolean"` or `"date"`).
+        /// For example, `"parse": {"modified_on": "date"}` parses the `modified_on` field in each
+        /// input record a Date value.
+        ///
+        /// For `"date"`, we parse data based using Javascript's
+        /// [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).
+        /// For Specific date formats can be provided (e.g., `{foo: 'date:"%m%d%Y"'}`), using the
+        /// [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date
+        /// format parsing is supported similarly (e.g., `{foo: 'utc:"%m%d%Y"'}`). See more about
+        /// [UTC time](timeunit.html#utc)
+        /// </summary>
+        [JsonProperty("parse", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ParseUnion? Parse { get; set; }
+
+        /// <summary>
+        /// Type of input data: `"json"`, `"csv"`, `"tsv"`.
+        /// The default format type is determined by the extension of the file URL.
+        /// If no extension is detected, `"json"` will be used by default.
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DataFormatType? Type { get; set; }
+
+        /// <summary>
+        /// The JSON property containing the desired data.
+        /// This parameter can be used when the loaded JSON file may have surrounding structure or
+        /// meta-data.
+        /// For example `"property": "values.features"` is equivalent to retrieving
+        /// `json.values.features`
+        /// from the loaded JSON object.
+        /// </summary>
+        [JsonProperty("property", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Property { get; set; }
+
+        /// <summary>
+        /// The name of the TopoJSON object set to convert to a GeoJSON feature collection.
+        /// For example, in a map of the world, there may be an object set named `"countries"`.
+        /// Using the feature property, we can extract this set and generate a GeoJSON feature object
+        /// for each country.
+        /// </summary>
+        [JsonProperty("feature", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Feature { get; set; }
+
+        /// <summary>
+        /// The name of the TopoJSON object set to convert to mesh.
+        /// Similar to the `feature` option, `mesh` extracts a named TopoJSON object set.
+        /// Unlike the `feature` option, the corresponding geo data is returned as a single, unified
+        /// mesh instance, not as individual GeoJSON features.
+        /// Extracting a mesh is useful for more efficiently drawing borders or other geographic
+        /// elements that you do not need to associate with specific regions such as individual
+        /// countries, states or counties.
+        /// </summary>
+        [JsonProperty("mesh", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Mesh { get; set; }
+    }
+
+    /// <summary>
+    /// A key-value mapping between encoding channels and definition of fields.
+    /// </summary>
+    public partial record EncodingWithFacet
+    {
+        /// <summary>
+        /// Color of the marks – either fill or stroke color based on mark type.
+        /// By default, `color` represents fill color for `"area"`, `"bar"`, `"tick"`,
+        /// `"text"`, `"circle"`, and `"square"` / stroke color for `"line"` and `"point"`.
+        ///
+        /// __Default value:__ If undefined, the default color depends on [mark
+        /// config](config.html#mark)'s `color` property.
+        ///
+        /// _Note:_ See the scale documentation for more information about customizing [color
+        /// scheme](scale.html#scheme).
+        /// </summary>
+        [JsonProperty("color", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkPropDefWithCondition? Color { get; set; }
+
+        /// <summary>
+        /// Horizontal facets for trellis plots.
+        /// </summary>
+        [JsonProperty("column", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FacetFieldDef? Column { get; set; }
+
+        /// <summary>
+        /// Additional levels of detail for grouping data in aggregate views and
+        /// in line and area marks without mapping data to a specific visual channel.
+        /// </summary>
+        [JsonProperty("detail", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Detail? Detail { get; set; }
+
+        /// <summary>
+        /// A URL to load upon mouse click.
+        /// </summary>
+        [JsonProperty("href", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DefWithCondition? Href { get; set; }
+
+        /// <summary>
+        /// Opacity of the marks – either can be a value or a range.
+        ///
+        /// __Default value:__ If undefined, the default opacity depends on [mark
+        /// config](config.html#mark)'s `opacity` property.
+        /// </summary>
+        [JsonProperty("opacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkPropDefWithCondition? Opacity { get; set; }
+
+        /// <summary>
+        /// Stack order for stacked marks or order of data points in line marks for connected scatter
+        /// plots.
+        ///
+        /// __Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating
+        /// additional aggregation grouping.
+        /// </summary>
+        [JsonProperty("order", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Order? Order { get; set; }
+
+        /// <summary>
+        /// Vertical facets for trellis plots.
+        /// </summary>
+        [JsonProperty("row", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FacetFieldDef? Row { get; set; }
+
+        /// <summary>
+        /// For `point` marks the supported values are
+        /// `"circle"` (default), `"square"`, `"cross"`, `"diamond"`, `"triangle-up"`,
+        /// or `"triangle-down"`, or else a custom SVG path string.
+        /// For `geoshape` marks it should be a field definition of the geojson data
+        ///
+        /// __Default value:__ If undefined, the default shape depends on [mark
+        /// config](config.html#point-config)'s `shape` property.
+        /// </summary>
+        [JsonProperty("shape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkPropDefWithCondition? Shape { get; set; }
+
+        /// <summary>
+        /// Size of the mark.
+        /// - For `"point"`, `"square"` and `"circle"`, – the symbol size, or pixel area of the mark.
+        /// - For `"bar"` and `"tick"` – the bar and tick's size.
+        /// - For `"text"` – the text's font size.
+        /// - Size is currently unsupported for `"line"`, `"area"`, and `"rect"`.
+        /// </summary>
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkPropDefWithCondition? Size { get; set; }
+
+        /// <summary>
+        /// Text of the `text` mark.
+        /// </summary>
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TextDefWithCondition? Text { get; set; }
+
+        /// <summary>
+        /// The tooltip text to show upon mouse hover.
+        /// </summary>
+        [JsonProperty("tooltip", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TextDefWithCondition? Tooltip { get; set; }
+
+        /// <summary>
+        /// X coordinates of the marks, or width of horizontal `"bar"` and `"area"`.
+        /// </summary>
+        [JsonProperty("x", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public XClass? X { get; set; }
+
+        /// <summary>
+        /// X2 coordinates for ranged  `"area"`, `"bar"`, `"rect"`, and  `"rule"`.
+        /// </summary>
+        [JsonProperty("x2", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public X2Class? X2 { get; set; }
+
+        /// <summary>
+        /// Y coordinates of the marks, or height of vertical `"bar"` and `"area"`.
+        /// </summary>
+        [JsonProperty("y", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public XClass? Y { get; set; }
+
+        /// <summary>
+        /// Y2 coordinates for ranged  `"area"`, `"bar"`, `"rect"`, and  `"rule"`.
+        /// </summary>
+        [JsonProperty("y2", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public X2Class? Y2 { get; set; }
+    }
+
+    /// <summary>
+    /// Color of the marks – either fill or stroke color based on mark type.
+    /// By default, `color` represents fill color for `"area"`, `"bar"`, `"tick"`,
+    /// `"text"`, `"circle"`, and `"square"` / stroke color for `"line"` and `"point"`.
+    ///
+    /// __Default value:__ If undefined, the default color depends on [mark
+    /// config](config.html#mark)'s `color` property.
+    ///
+    /// _Note:_ See the scale documentation for more information about customizing [color
+    /// scheme](scale.html#scheme).
+    ///
+    /// Opacity of the marks – either can be a value or a range.
+    ///
+    /// __Default value:__ If undefined, the default opacity depends on [mark
+    /// config](config.html#mark)'s `opacity` property.
+    ///
+    /// For `point` marks the supported values are
+    /// `"circle"` (default), `"square"`, `"cross"`, `"diamond"`, `"triangle-up"`,
+    /// or `"triangle-down"`, or else a custom SVG path string.
+    /// For `geoshape` marks it should be a field definition of the geojson data
+    ///
+    /// __Default value:__ If undefined, the default shape depends on [mark
+    /// config](config.html#point-config)'s `shape` property.
+    ///
+    /// Size of the mark.
+    /// - For `"point"`, `"square"` and `"circle"`, – the symbol size, or pixel area of the mark.
+    /// - For `"bar"` and `"tick"` – the bar and tick's size.
+    /// - For `"text"` – the text's font size.
+    /// - Size is currently unsupported for `"line"`, `"area"`, and `"rect"`.
+    ///
+    /// A FieldDef with Condition&lt;ValueDef&gt;
+    /// {
+    /// condition: {value: ...},
+    /// field: ...,
+    /// ...
+    /// }
+    ///
+    /// A ValueDef with Condition&lt;ValueDef | FieldDef&gt;
+    /// {
+    /// condition: {field: ...} | {value: ...},
+    /// value: ...,
+    /// }
+    /// </summary>
+    public partial record MarkPropDefWithCondition
+    {
+        /// <summary>
+        /// Aggregation function for the field
+        /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregateOp? Aggregate { get; set; }
+
+        /// <summary>
+        /// A flag for binning a `quantitative` field, or [an object defining binning
+        /// parameters](bin.html#params).
+        /// If `true`, default [binning parameters](bin.html) will be applied.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// One or more value definition(s) with a selection predicate.
+        ///
+        /// __Note:__ A field definition's `condition` property can only contain [value
+        /// definitions](encoding.html#value-def)
+        /// since Vega-Lite only allows at most one encoded field per encoding channel.
+        ///
+        /// A field definition or one or more value definition(s) with a selection predicate.
+        /// </summary>
+        [JsonProperty("condition", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ColorCondition? Condition { get; set; }
+
+        /// <summary>
+        /// __Required.__ A string defining the name of the field from which to pull a data value
+        /// or an object defining iterated values from the [`repeat`](repeat.html) operator.
+        ///
+        /// __Note:__ Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects
+        /// (e.g., `"field": "foo.bar"` and `"field": "foo['bar']"`).
+        /// If field names contain dots or brackets but are not nested, you can use `\\` to escape
+        /// dots and brackets (e.g., `"a\\.b"` and `"a\\[0\\]"`).
+        /// See more details about escaping in the [field documentation](field.html).
+        ///
+        /// __Note:__ `field` is not required if `aggregate` is `count`.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// An object defining properties of the legend.
+        /// If `null`, the legend for the encoding channel will be removed.
+        ///
+        /// __Default value:__ If undefined, default [legend properties](legend.html) are applied.
+        /// </summary>
+        [JsonProperty("legend")]
+        public Legend? Legend { get; set; }
+
+        /// <summary>
+        /// An object defining properties of the channel's scale, which is the function that
+        /// transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        /// (pixels, colors, sizes) of the encoding channels.
+        ///
+        /// __Default value:__ If undefined, default [scale properties](scale.html) are applied.
+        /// </summary>
+        [JsonProperty("scale", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Scale? Scale { get; set; }
+
+        /// <summary>
+        /// Sort order for the encoded field.
+        /// Supported `sort` values include `"ascending"`, `"descending"` and `null` (no sorting).
+        /// For fields with discrete domains, `sort` can also be a [sort field definition
+        /// object](sort.html#sort-field).
+        ///
+        /// __Default value:__ `"ascending"`
+        /// </summary>
+        [JsonProperty("sort")]
+        public SortUnion? Sort { get; set; }
+
+        /// <summary>
+        /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+        /// or [a temporal field that gets casted as ordinal](type.html#cast).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+        /// `"nominal"`).
+        /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+        /// [geographic projection](projection.html) is applied.
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalPredicateValueDefType? Type { get; set; }
+
+        /// <summary>
+        /// A constant value in visual domain.
+        /// </summary>
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalValueDefValue? Value { get; set; }
+    }
+
+    /// <summary>
+    /// Binning properties or boolean flag for determining whether to bin data or not.
+    /// </summary>
+    public partial record BinParams
+    {
+        /// <summary>
+        /// The number base to use for automatic bin determination (default is base 10).
+        ///
+        /// __Default value:__ `10`
+        /// </summary>
+        [JsonProperty("base", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Base { get; set; }
+
+        /// <summary>
+        /// Scale factors indicating allowable subdivisions. The default value is [5, 2], which
+        /// indicates that for base 10 numbers (the default base), the method may consider dividing
+        /// bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can
+        /// check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the
+        /// given constraints.
+        ///
+        /// __Default value:__ `[5, 2]`
+        /// </summary>
+        [JsonProperty("divide", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? Divide { get; set; }
+
+        /// <summary>
+        /// A two-element (`[min, max]`) array indicating the range of desired bin values.
+        /// </summary>
+        [JsonProperty("extent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? Extent { get; set; }
+
+        /// <summary>
+        /// Maximum number of bins.
+        ///
+        /// __Default value:__ `6` for `row`, `column` and `shape` channels; `10` for other channels
+        /// </summary>
+        [JsonProperty("maxbins", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(IndecentMinMaxValueCheckConverter))]
+        public double? Maxbins { get; set; }
+
+        /// <summary>
+        /// A minimum allowable step size (particularly useful for integer values).
+        /// </summary>
+        [JsonProperty("minstep", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Minstep { get; set; }
+
+        /// <summary>
+        /// If true (the default), attempts to make the bin boundaries use human-friendly boundaries,
+        /// such as multiples of ten.
+        /// </summary>
+        [JsonProperty("nice", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Nice { get; set; }
+
+        /// <summary>
+        /// An exact step size to use between bins.
+        ///
+        /// __Note:__ If provided, options such as maxbins will be ignored.
+        /// </summary>
+        [JsonProperty("step", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Step { get; set; }
+
+        /// <summary>
+        /// An array of allowable step sizes to choose from.
+        /// </summary>
+        [JsonProperty("steps", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? Steps { get; set; }
+    }
+
+    public partial record ConditionalValueDef
+    {
+        [JsonProperty("test", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LogicalOperandPredicate? Test { get; set; }
+
+        /// <summary>
+        /// A constant value in visual domain (e.g., `"red"` / "#0099ff" for color, values between
+        /// `0` to `1` for opacity).
+        /// </summary>
+        [JsonProperty("value", Required = Required.Always)]
+        public ConditionalValueDefValue Value { get; set; }
+
+        /// <summary>
+        /// A [selection name](selection.html), or a series of [composed
+        /// selections](selection.html#compose).
+        /// </summary>
+        [JsonProperty("selection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionOperand? Selection { get; set; }
+    }
+
+    public partial record Selection
+    {
+        [JsonProperty("not", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionOperand? Not { get; set; }
+
+        [JsonProperty("and", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionOperand[]? And { get; set; }
+
+        [JsonProperty("or", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionOperand[]? Or { get; set; }
+    }
+
+    public partial record Predicate
+    {
+        [JsonProperty("not", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LogicalOperandPredicate? Not { get; set; }
+
+        [JsonProperty("and", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LogicalOperandPredicate[]? And { get; set; }
+
+        [JsonProperty("or", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LogicalOperandPredicate[]? Or { get; set; }
+
+        /// <summary>
+        /// The value that the field should be equal to.
+        /// </summary>
+        [JsonProperty("equal", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Equal? Equal { get; set; }
+
+        /// <summary>
+        /// Field to be filtered.
+        ///
+        /// Field to be filtered
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Field { get; set; }
+
+        /// <summary>
+        /// Time unit for the field to be filtered.
+        ///
+        /// time unit for the field to be filtered.
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// An array of inclusive minimum and maximum values
+        /// for a field value of a data item to be included in the filtered data.
+        /// </summary>
+        [JsonProperty("range", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public RangeElement[]? Range { get; set; }
+
+        /// <summary>
+        /// A set of values that the `field`'s value should be a member of,
+        /// for a data item included in the filtered data.
+        /// </summary>
+        [JsonProperty("oneOf", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Equal[]? OneOf { get; set; }
+
+        /// <summary>
+        /// Filter using a selection name.
+        /// </summary>
+        [JsonProperty("selection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionOperand? Selection { get; set; }
+    }
+
+    /// <summary>
+    /// Object for defining datetime in Vega-Lite Filter.
+    /// If both month and quarter are provided, month has higher precedence.
+    /// `day` cannot be combined with other date.
+    /// We accept string for month and day names.
+    /// </summary>
+    public partial record DateTime
+    {
+        /// <summary>
+        /// Integer value representing the date from 1-31.
+        /// </summary>
+        [JsonProperty("date", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(HilariousMinMaxValueCheckConverter))]
+        public double? Date { get; set; }
+
+        /// <summary>
+        /// Value representing the day of a week.  This can be one of: (1) integer value -- `1`
+        /// represents Monday; (2) case-insensitive day name (e.g., `"Monday"`);  (3)
+        /// case-insensitive, 3-character short day name (e.g., `"Mon"`).   &lt;br/&gt; **Warning:** A
+        /// DateTime definition object with `day`** should not be combined with `year`, `quarter`,
+        /// `month`, or `date`.
+        /// </summary>
+        [JsonProperty("day", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Day? Day { get; set; }
+
+        /// <summary>
+        /// Integer value representing the hour of a day from 0-23.
+        /// </summary>
+        [JsonProperty("hours", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(CunningMinMaxValueCheckConverter))]
+        public double? Hours { get; set; }
+
+        /// <summary>
+        /// Integer value representing the millisecond segment of time.
+        /// </summary>
+        [JsonProperty("milliseconds", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(MagentaMinMaxValueCheckConverter))]
+        public double? Milliseconds { get; set; }
+
+        /// <summary>
+        /// Integer value representing the minute segment of time from 0-59.
+        /// </summary>
+        [JsonProperty("minutes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FriskyMinMaxValueCheckConverter))]
+        public double? Minutes { get; set; }
+
+        /// <summary>
+        /// One of: (1) integer value representing the month from `1`-`12`. `1` represents January;
+        /// (2) case-insensitive month name (e.g., `"January"`);  (3) case-insensitive, 3-character
+        /// short month name (e.g., `"Jan"`).
+        /// </summary>
+        [JsonProperty("month", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Month? Month { get; set; }
+
+        /// <summary>
+        /// Integer value representing the quarter of the year (from 1-4).
+        /// </summary>
+        [JsonProperty("quarter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(BraggadociousMinMaxValueCheckConverter))]
+        public double? Quarter { get; set; }
+
+        /// <summary>
+        /// Integer value representing the second segment (0-59) of a time value
+        /// </summary>
+        [JsonProperty("seconds", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FriskyMinMaxValueCheckConverter))]
+        public double? Seconds { get; set; }
+
+        /// <summary>
+        /// A boolean flag indicating if date time is in utc time. If false, the date time is in
+        /// local time
+        /// </summary>
+        [JsonProperty("utc", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Utc { get; set; }
+
+        /// <summary>
+        /// Integer value representing the year.
+        /// </summary>
+        [JsonProperty("year", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Year { get; set; }
+    }
+
+    public partial record ConditionalPredicateMarkPropFieldDefClass
+    {
+        [JsonProperty("test", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LogicalOperandPredicate? Test { get; set; }
+
+        /// <summary>
+        /// A constant value in visual domain (e.g., `"red"` / "#0099ff" for color, values between
+        /// `0` to `1` for opacity).
+        /// </summary>
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalValueDefValue? Value { get; set; }
+
+        /// <summary>
+        /// A [selection name](selection.html), or a series of [composed
+        /// selections](selection.html#compose).
+        /// </summary>
+        [JsonProperty("selection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionOperand? Selection { get; set; }
+
+        /// <summary>
+        /// Aggregation function for the field
+        /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregateOp? Aggregate { get; set; }
+
+        /// <summary>
+        /// A flag for binning a `quantitative` field, or [an object defining binning
+        /// parameters](bin.html#params).
+        /// If `true`, default [binning parameters](bin.html) will be applied.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// __Required.__ A string defining the name of the field from which to pull a data value
+        /// or an object defining iterated values from the [`repeat`](repeat.html) operator.
+        ///
+        /// __Note:__ Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects
+        /// (e.g., `"field": "foo.bar"` and `"field": "foo['bar']"`).
+        /// If field names contain dots or brackets but are not nested, you can use `\\` to escape
+        /// dots and brackets (e.g., `"a\\.b"` and `"a\\[0\\]"`).
+        /// See more details about escaping in the [field documentation](field.html).
+        ///
+        /// __Note:__ `field` is not required if `aggregate` is `count`.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// An object defining properties of the legend.
+        /// If `null`, the legend for the encoding channel will be removed.
+        ///
+        /// __Default value:__ If undefined, default [legend properties](legend.html) are applied.
+        /// </summary>
+        [JsonProperty("legend")]
+        public Legend? Legend { get; set; }
+
+        /// <summary>
+        /// An object defining properties of the channel's scale, which is the function that
+        /// transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        /// (pixels, colors, sizes) of the encoding channels.
+        ///
+        /// __Default value:__ If undefined, default [scale properties](scale.html) are applied.
+        /// </summary>
+        [JsonProperty("scale", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Scale? Scale { get; set; }
+
+        /// <summary>
+        /// Sort order for the encoded field.
+        /// Supported `sort` values include `"ascending"`, `"descending"` and `null` (no sorting).
+        /// For fields with discrete domains, `sort` can also be a [sort field definition
+        /// object](sort.html#sort-field).
+        ///
+        /// __Default value:__ `"ascending"`
+        /// </summary>
+        [JsonProperty("sort")]
+        public SortUnion? Sort { get; set; }
+
+        /// <summary>
+        /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+        /// or [a temporal field that gets casted as ordinal](type.html#cast).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+        /// `"nominal"`).
+        /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+        /// [geographic projection](projection.html) is applied.
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalPredicateValueDefType? Type { get; set; }
+    }
+
+    /// <summary>
+    /// Reference to a repeated value.
+    /// </summary>
+    public partial record RepeatRef
+    {
+        [JsonProperty("repeat", Required = Required.Always)]
+        public RepeatEnum Repeat { get; set; }
+    }
+
+    /// <summary>
+    /// Properties of a legend or boolean flag for determining whether to show it.
+    /// </summary>
+    public partial record Legend
+    {
+        /// <summary>
+        /// Padding (in pixels) between legend entries in a symbol legend.
+        /// </summary>
+        [JsonProperty("entryPadding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? EntryPadding { get; set; }
+
+        /// <summary>
+        /// The formatting pattern for labels. This is D3's [number format
+        /// pattern](https://github.com/d3/d3-format#locale_format) for quantitative fields and D3's
+        /// [time format pattern](https://github.com/d3/d3-time-format#locale_format) for time
+        /// field.
+        ///
+        /// See the [format documentation](format.html) for more information.
+        ///
+        /// __Default value:__  derived from [numberFormat](config.html#format) config for
+        /// quantitative fields and from [timeFormat](config.html#format) config for temporal fields.
+        /// </summary>
+        [JsonProperty("format", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Format { get; set; }
+
+        /// <summary>
+        /// The offset, in pixels, by which to displace the legend from the edge of the enclosing
+        /// group or data rectangle.
+        ///
+        /// __Default value:__  `0`
+        /// </summary>
+        [JsonProperty("offset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Offset { get; set; }
+
+        /// <summary>
+        /// The orientation of the legend, which determines how the legend is positioned within the
+        /// scene. One of "left", "right", "top-left", "top-right", "bottom-left", "bottom-right",
+        /// "none".
+        ///
+        /// __Default value:__ `"right"`
+        /// </summary>
+        [JsonProperty("orient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LegendOrient? Orient { get; set; }
+
+        /// <summary>
+        /// The padding, in pixels, between the legend and axis.
+        /// </summary>
+        [JsonProperty("padding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Padding { get; set; }
+
+        /// <summary>
+        /// The desired number of tick values for quantitative legends.
+        /// </summary>
+        [JsonProperty("tickCount", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TickCount { get; set; }
+
+        /// <summary>
+        /// A title for the field. If `null`, the title will be removed.
+        ///
+        /// __Default value:__  derived from the field's name and transformation function
+        /// (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the
+        /// function is displayed as a part of the title (e.g., `"Sum of Profit"`). If the field is
+        /// binned or has a time unit applied, the applied function will be denoted in parentheses
+        /// (e.g., `"Profit (binned)"`, `"Transaction Date (year-month)"`).  Otherwise, the title is
+        /// simply the field name.
+        ///
+        /// __Note__: You can customize the default field title format by providing the [`fieldTitle`
+        /// property in the [config](config.html) or [`fieldTitle` function via the `compile`
+        /// function's options](compile.html#field-title).
+        /// </summary>
+        [JsonProperty("title")]
+        public string? Title { get; set; }
+
+        /// <summary>
+        /// The type of the legend. Use `"symbol"` to create a discrete legend and `"gradient"` for a
+        /// continuous color gradient.
+        ///
+        /// __Default value:__ `"gradient"` for non-binned quantitative fields and temporal fields;
+        /// `"symbol"` otherwise.
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LegendType? Type { get; set; }
+
+        /// <summary>
+        /// Explicitly set the visible legend values.
+        /// </summary>
+        [JsonProperty("values", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LegendValue[]? Values { get; set; }
+
+        /// <summary>
+        /// A non-positive integer indicating z-index of the legend.
+        /// If zindex is 0, legend should be drawn behind all chart elements.
+        /// To put them in front, use zindex = 1.
+        /// </summary>
+        [JsonProperty("zindex", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Zindex { get; set; }
+    }
+
+    /// <summary>
+    /// An object defining properties of the channel's scale, which is the function that
+    /// transforms values in the data domain (numbers, dates, strings, etc) to visual values
+    /// (pixels, colors, sizes) of the encoding channels.
+    ///
+    /// __Default value:__ If undefined, default [scale properties](scale.html) are applied.
+    /// </summary>
+    public partial record Scale
+    {
+        /// <summary>
+        /// The logarithm base of the `log` scale (default `10`).
+        /// </summary>
+        [JsonProperty("base", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Base { get; set; }
+
+        /// <summary>
+        /// If `true`, values that exceed the data domain are clamped to either the minimum or
+        /// maximum range value
+        ///
+        /// __Default value:__ derived from the [scale config](config.html#scale-config)'s `clamp`
+        /// (`true` by default).
+        /// </summary>
+        [JsonProperty("clamp", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Clamp { get; set; }
+
+        /// <summary>
+        /// Customized domain values.
+        ///
+        /// For _quantitative_ fields, `domain` can take the form of a two-element array with minimum
+        /// and maximum values.  [Piecewise scales](scale.html#piecewise) can be created by providing
+        /// a `domain` with more than two entries.
+        /// If the input field is aggregated, `domain` can also be a string value `"unaggregated"`,
+        /// indicating that the domain should include the raw data values prior to the aggregation.
+        ///
+        /// For _temporal_ fields, `domain` can be a two-element array minimum and maximum values, in
+        /// the form of either timestamps or the [DateTime definition objects](types.html#datetime).
+        ///
+        /// For _ordinal_ and _nominal_ fields, `domain` can be an array that lists valid input
+        /// values.
+        ///
+        /// The `selection` property can be used to [interactively
+        /// determine](selection.html#scale-domains) the scale domain.
+        /// </summary>
+        [JsonProperty("domain", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DomainUnion? Domain { get; set; }
+
+        /// <summary>
+        /// The exponent of the `pow` scale.
+        /// </summary>
+        [JsonProperty("exponent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Exponent { get; set; }
+
+        /// <summary>
+        /// The interpolation method for range values. By default, a general interpolator for
+        /// numbers, dates, strings and colors (in RGB space) is used. For color ranges, this
+        /// property allows interpolation in alternative color spaces. Legal values include `rgb`,
+        /// `hsl`, `hsl-long`, `lab`, `hcl`, `hcl-long`, `cubehelix` and `cubehelix-long` ('-long'
+        /// variants use longer paths in polar coordinate spaces). If object-valued, this property
+        /// accepts an object with a string-valued _type_ property and an optional numeric _gamma_
+        /// property applicable to rgb and cubehelix interpolators. For more, see the [d3-interpolate
+        /// documentation](https://github.com/d3/d3-interpolate).
+        ///
+        /// __Note:__ Sequential scales do not support `interpolate` as they have a fixed
+        /// interpolator.  Since Vega-Lite uses sequential scales for quantitative fields by default,
+        /// you have to set the scale `type` to other quantitative scale type such as `"linear"` to
+        /// customize `interpolate`.
+        /// </summary>
+        [JsonProperty("interpolate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public InterpolateUnion? Interpolate { get; set; }
+
+        /// <summary>
+        /// Extending the domain so that it starts and ends on nice round values. This method
+        /// typically modifies the scale’s domain, and may only extend the bounds to the nearest
+        /// round value. Nicing is useful if the domain is computed from data and may be irregular.
+        /// For example, for a domain of _[0.201479…, 0.996679…]_, a nice domain might be _[0.2,
+        /// 1.0]_.
+        ///
+        /// For quantitative scales such as linear, `nice` can be either a boolean flag or a number.
+        /// If `nice` is a number, it will represent a desired tick count. This allows greater
+        /// control over the step size used to extend the bounds, guaranteeing that the returned
+        /// ticks will exactly cover the domain.
+        ///
+        /// For temporal fields with time and utc scales, the `nice` value can be a string indicating
+        /// the desired time interval. Legal values are `"millisecond"`, `"second"`, `"minute"`,
+        /// `"hour"`, `"day"`, `"week"`, `"month"`, and `"year"`. Alternatively, `time` and `utc`
+        /// scales can accept an object-valued interval specifier of the form `{"interval": "month",
+        /// "step": 3}`, which includes a desired number of interval steps. Here, the domain would
+        /// snap to quarter (Jan, Apr, Jul, Oct) boundaries.
+        ///
+        /// __Default value:__ `true` for unbinned _quantitative_ fields; `false` otherwise.
+        /// </summary>
+        [JsonProperty("nice", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public NiceUnion? Nice { get; set; }
+
+        /// <summary>
+        /// For _[continuous](scale.html#continuous)_ scales, expands the scale domain to accommodate
+        /// the specified number of pixels on each of the scale range. The scale range must represent
+        /// pixels for this parameter to function as intended. Padding adjustment is performed prior
+        /// to all other adjustments, including the effects of the zero, nice, domainMin, and
+        /// domainMax properties.
+        ///
+        /// For _[band](scale.html#band)_ scales, shortcut for setting `paddingInner` and
+        /// `paddingOuter` to the same value.
+        ///
+        /// For _[point](scale.html#point)_ scales, alias for `paddingOuter`.
+        ///
+        /// __Default value:__ For _continuous_ scales, derived from the [scale
+        /// config](scale.html#config)'s `continuousPadding`.
+        /// For _band and point_ scales, see `paddingInner` and `paddingOuter`.
+        /// </summary>
+        [JsonProperty("padding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Padding { get; set; }
+
+        /// <summary>
+        /// The inner padding (spacing) within each band step of band scales, as a fraction of the
+        /// step size. This value must lie in the range [0,1].
+        ///
+        /// For point scale, this property is invalid as point scales do not have internal band
+        /// widths (only step sizes between bands).
+        ///
+        /// __Default value:__ derived from the [scale config](scale.html#config)'s
+        /// `bandPaddingInner`.
+        /// </summary>
+        [JsonProperty("paddingInner", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? PaddingInner { get; set; }
+
+        /// <summary>
+        /// The outer padding (spacing) at the ends of the range of band and point scales,
+        /// as a fraction of the step size. This value must lie in the range [0,1].
+        ///
+        /// __Default value:__ derived from the [scale config](scale.html#config)'s
+        /// `bandPaddingOuter` for band scales and `pointPadding` for point scales.
+        /// </summary>
+        [JsonProperty("paddingOuter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? PaddingOuter { get; set; }
+
+        /// <summary>
+        /// The range of the scale. One of:
+        ///
+        /// - A string indicating a [pre-defined named scale range](scale.html#range-config) (e.g.,
+        /// example, `"symbol"`, or `"diverging"`).
+        ///
+        /// - For [continuous scales](scale.html#continuous), two-element array indicating  minimum
+        /// and maximum values, or an array with more than two entries for specifying a [piecewise
+        /// scale](scale.html#piecewise).
+        ///
+        /// - For [discrete](scale.html#discrete) and [discretizing](scale.html#discretizing) scales,
+        /// an array of desired output values.
+        ///
+        /// __Notes:__
+        ///
+        /// 1) For [sequential](scale.html#sequential), [ordinal](scale.html#ordinal), and
+        /// discretizing color scales, you can also specify a color [`scheme`](scale.html#scheme)
+        /// instead of `range`.
+        ///
+        /// 2) Any directly specified `range` for `x` and `y` channels will be ignored. Range can be
+        /// customized via the view's corresponding [size](size.html) (`width` and `height`) or via
+        /// [range steps and paddings properties](#range-step) for [band](#band) and [point](#point)
+        /// scales.
+        /// </summary>
+        [JsonProperty("range", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ScaleRange? Range { get; set; }
+
+        /// <summary>
+        /// The distance between the starts of adjacent bands or points in [band](scale.html#band)
+        /// and [point](scale.html#point) scales.
+        ///
+        /// If `rangeStep` is `null` or if the view contains the scale's corresponding
+        /// [size](size.html) (`width` for `x` scales and `height` for `y` scales), `rangeStep` will
+        /// be automatically determined to fit the size of the view.
+        ///
+        /// __Default value:__  derived the [scale config](config.html#scale-config)'s
+        /// `textXRangeStep` (`90` by default) for x-scales of `text` marks and `rangeStep` (`21` by
+        /// default) for x-scales of other marks and y-scales.
+        ///
+        /// __Warning__: If `rangeStep` is `null` and the cardinality of the scale's domain is higher
+        /// than `width` or `height`, the rangeStep might become less than one pixel and the mark
+        /// might not appear correctly.
+        /// </summary>
+        [JsonProperty("rangeStep")]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? RangeStep { get; set; }
+
+        /// <summary>
+        /// If `true`, rounds numeric output values to integers. This can be helpful for snapping to
+        /// the pixel grid.
+        ///
+        /// __Default value:__ `false`.
+        /// </summary>
+        [JsonProperty("round", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Round { get; set; }
+
+        /// <summary>
+        /// A string indicating a color [scheme](scale.html#scheme) name (e.g., `"category10"` or
+        /// `"viridis"`) or a [scheme parameter object](scale.html#scheme-params).
+        ///
+        /// Discrete color schemes may be used with [discrete](scale.html#discrete) or
+        /// [discretizing](scale.html#discretizing) scales. Continuous color schemes are intended for
+        /// use with [sequential](scales.html#sequential) scales.
+        ///
+        /// For the full list of supported scheme, please refer to the [Vega
+        /// Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.
+        /// </summary>
+        [JsonProperty("scheme", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Scheme? Scheme { get; set; }
+
+        /// <summary>
+        /// The type of scale.  Vega-Lite supports the following categories of scale types:
+        ///
+        /// 1) [**Continuous Scales**](scale.html#continuous) -- mapping continuous domains to
+        /// continuous output ranges ([`"linear"`](scale.html#linear), [`"pow"`](scale.html#pow),
+        /// [`"sqrt"`](scale.html#sqrt), [`"log"`](scale.html#log), [`"time"`](scale.html#time),
+        /// [`"utc"`](scale.html#utc), [`"sequential"`](scale.html#sequential)).
+        ///
+        /// 2) [**Discrete Scales**](scale.html#discrete) -- mapping discrete domains to discrete
+        /// ([`"ordinal"`](scale.html#ordinal)) or continuous ([`"band"`](scale.html#band) and
+        /// [`"point"`](scale.html#point)) output ranges.
+        ///
+        /// 3) [**Discretizing Scales**](scale.html#discretizing) -- mapping continuous domains to
+        /// discrete output ranges ([`"bin-linear"`](scale.html#bin-linear) and
+        /// [`"bin-ordinal"`](scale.html#bin-ordinal)).
+        ///
+        /// __Default value:__ please see the [scale type table](scale.html#type).
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ScaleType? Type { get; set; }
+
+        /// <summary>
+        /// If `true`, ensures that a zero baseline value is included in the scale domain.
+        ///
+        /// __Default value:__ `true` for x and y channels if the quantitative field is not binned
+        /// and no custom `domain` is provided; `false` otherwise.
+        ///
+        /// __Note:__ Log, time, and utc scales do not support `zero`.
+        /// </summary>
+        [JsonProperty("zero", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Zero { get; set; }
+    }
+
+    public partial record DomainClass
+    {
+        /// <summary>
+        /// The field name to extract selected values for, when a selection is
+        /// [projected](project.html)
+        /// over multiple fields or encodings.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Field { get; set; }
+
+        /// <summary>
+        /// The name of a selection.
+        /// </summary>
+        [JsonProperty("selection", Required = Required.Always)]
+        public string Selection { get; set; }
+
+        /// <summary>
+        /// The encoding channel to extract selected values for, when a selection is
+        /// [projected](project.html)
+        /// over multiple fields or encodings.
+        /// </summary>
+        [JsonProperty("encoding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Encoding { get; set; }
+    }
+
+    public partial record InterpolateParams
+    {
+        [JsonProperty("gamma", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Gamma { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public InterpolateParamsType Type { get; set; }
+    }
+
+    public partial record NiceClass
+    {
+        [JsonProperty("interval", Required = Required.Always)]
+        public string Interval { get; set; }
+
+        [JsonProperty("step", Required = Required.Always)]
+        public double Step { get; set; }
+    }
+
+    public partial record SchemeParams
+    {
+        /// <summary>
+        /// For sequential and diverging schemes only, determines the extent of the color range to
+        /// use. For example `[0.2, 1]` will rescale the color scheme such that color values in the
+        /// range _[0, 0.2)_ are excluded from the scheme.
+        /// </summary>
+        [JsonProperty("extent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? Extent { get; set; }
+
+        /// <summary>
+        /// A color scheme name for sequential/ordinal scales (e.g., `"category10"` or `"viridis"`).
+        ///
+        /// For the full list of supported scheme, please refer to the [Vega
+        /// Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.
+        /// </summary>
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record SortField
+    {
+        /// <summary>
+        /// The data [field](field.html) to sort by.
+        ///
+        /// __Default value:__ If unspecified, defaults to the field specified in the outer data
+        /// reference.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// An [aggregate operation](aggregate.html#ops) to perform on the field prior to sorting
+        /// (e.g., `"count"`, `"mean"` and `"median"`).
+        /// This property is required in cases where the sort field and the data reference field do
+        /// not match.
+        /// The input data objects will be aggregated, grouped by the encoded data field.
+        ///
+        /// For a full list of operations, please see the documentation for
+        /// [aggregate](aggregate.html#ops).
+        /// </summary>
+        [JsonProperty("op", Required = Required.Always)]
+        public AggregateOp Op { get; set; }
+
+        /// <summary>
+        /// The sort order. One of `"ascending"` (default) or `"descending"`.
+        /// </summary>
+        [JsonProperty("order")]
+        public SortEnum? Order { get; set; }
+    }
+
+    /// <summary>
+    /// Horizontal facets for trellis plots.
+    ///
+    /// Vertical facets for trellis plots.
+    /// </summary>
+    public partial record FacetFieldDef
+    {
+        /// <summary>
+        /// Aggregation function for the field
+        /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregateOp? Aggregate { get; set; }
+
+        /// <summary>
+        /// A flag for binning a `quantitative` field, or [an object defining binning
+        /// parameters](bin.html#params).
+        /// If `true`, default [binning parameters](bin.html) will be applied.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// __Required.__ A string defining the name of the field from which to pull a data value
+        /// or an object defining iterated values from the [`repeat`](repeat.html) operator.
+        ///
+        /// __Note:__ Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects
+        /// (e.g., `"field": "foo.bar"` and `"field": "foo['bar']"`).
+        /// If field names contain dots or brackets but are not nested, you can use `\\` to escape
+        /// dots and brackets (e.g., `"a\\.b"` and `"a\\[0\\]"`).
+        /// See more details about escaping in the [field documentation](field.html).
+        ///
+        /// __Note:__ `field` is not required if `aggregate` is `count`.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// An object defining properties of a facet's header.
+        /// </summary>
+        [JsonProperty("header", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Header? Header { get; set; }
+
+        /// <summary>
+        /// Sort order for a facet field.
+        /// This can be `"ascending"`, `"descending"`.
+        /// </summary>
+        [JsonProperty("sort")]
+        public SortEnum? Sort { get; set; }
+
+        /// <summary>
+        /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+        /// or [a temporal field that gets casted as ordinal](type.html#cast).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+        /// `"nominal"`).
+        /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+        /// [geographic projection](projection.html) is applied.
+        /// </summary>
+        [JsonProperty("type", Required = Required.Always)]
+        public ConditionalPredicateValueDefType Type { get; set; }
+    }
+
+    /// <summary>
+    /// An object defining properties of a facet's header.
+    ///
+    /// Headers of row / column channels for faceted plots.
+    /// </summary>
+    public partial record Header
+    {
+        /// <summary>
+        /// The formatting pattern for labels. This is D3's [number format
+        /// pattern](https://github.com/d3/d3-format#locale_format) for quantitative fields and D3's
+        /// [time format pattern](https://github.com/d3/d3-time-format#locale_format) for time
+        /// field.
+        ///
+        /// See the [format documentation](format.html) for more information.
+        ///
+        /// __Default value:__  derived from [numberFormat](config.html#format) config for
+        /// quantitative fields and from [timeFormat](config.html#format) config for temporal fields.
+        /// </summary>
+        [JsonProperty("format", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Format { get; set; }
+
+        /// <summary>
+        /// The rotation angle of the header labels.
+        ///
+        /// __Default value:__ `0`.
+        /// </summary>
+        [JsonProperty("labelAngle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(IndigoMinMaxValueCheckConverter))]
+        public double? LabelAngle { get; set; }
+
+        /// <summary>
+        /// A title for the field. If `null`, the title will be removed.
+        ///
+        /// __Default value:__  derived from the field's name and transformation function
+        /// (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the
+        /// function is displayed as a part of the title (e.g., `"Sum of Profit"`). If the field is
+        /// binned or has a time unit applied, the applied function will be denoted in parentheses
+        /// (e.g., `"Profit (binned)"`, `"Transaction Date (year-month)"`).  Otherwise, the title is
+        /// simply the field name.
+        ///
+        /// __Note__: You can customize the default field title format by providing the [`fieldTitle`
+        /// property in the [config](config.html) or [`fieldTitle` function via the `compile`
+        /// function's options](compile.html#field-title).
+        /// </summary>
+        [JsonProperty("title")]
+        public string? Title { get; set; }
+    }
+
+    /// <summary>
+    /// Definition object for a data field, its type and transformation of an encoding channel.
+    /// </summary>
+    public partial record FieldDef
+    {
+        /// <summary>
+        /// Aggregation function for the field
+        /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregateOp? Aggregate { get; set; }
+
+        /// <summary>
+        /// A flag for binning a `quantitative` field, or [an object defining binning
+        /// parameters](bin.html#params).
+        /// If `true`, default [binning parameters](bin.html) will be applied.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// __Required.__ A string defining the name of the field from which to pull a data value
+        /// or an object defining iterated values from the [`repeat`](repeat.html) operator.
+        ///
+        /// __Note:__ Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects
+        /// (e.g., `"field": "foo.bar"` and `"field": "foo['bar']"`).
+        /// If field names contain dots or brackets but are not nested, you can use `\\` to escape
+        /// dots and brackets (e.g., `"a\\.b"` and `"a\\[0\\]"`).
+        /// See more details about escaping in the [field documentation](field.html).
+        ///
+        /// __Note:__ `field` is not required if `aggregate` is `count`.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+        /// or [a temporal field that gets casted as ordinal](type.html#cast).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+        /// `"nominal"`).
+        /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+        /// [geographic projection](projection.html) is applied.
+        /// </summary>
+        [JsonProperty("type", Required = Required.Always)]
+        public ConditionalPredicateValueDefType Type { get; set; }
+    }
+
+    /// <summary>
+    /// A URL to load upon mouse click.
+    ///
+    /// A FieldDef with Condition&lt;ValueDef&gt;
+    /// {
+    /// condition: {value: ...},
+    /// field: ...,
+    /// ...
+    /// }
+    ///
+    /// A ValueDef with Condition&lt;ValueDef | FieldDef&gt;
+    /// {
+    /// condition: {field: ...} | {value: ...},
+    /// value: ...,
+    /// }
+    /// </summary>
+    public partial record DefWithCondition
+    {
+        /// <summary>
+        /// Aggregation function for the field
+        /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregateOp? Aggregate { get; set; }
+
+        /// <summary>
+        /// A flag for binning a `quantitative` field, or [an object defining binning
+        /// parameters](bin.html#params).
+        /// If `true`, default [binning parameters](bin.html) will be applied.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// One or more value definition(s) with a selection predicate.
+        ///
+        /// __Note:__ A field definition's `condition` property can only contain [value
+        /// definitions](encoding.html#value-def)
+        /// since Vega-Lite only allows at most one encoded field per encoding channel.
+        ///
+        /// A field definition or one or more value definition(s) with a selection predicate.
+        /// </summary>
+        [JsonProperty("condition", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public HrefCondition? Condition { get; set; }
+
+        /// <summary>
+        /// __Required.__ A string defining the name of the field from which to pull a data value
+        /// or an object defining iterated values from the [`repeat`](repeat.html) operator.
+        ///
+        /// __Note:__ Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects
+        /// (e.g., `"field": "foo.bar"` and `"field": "foo['bar']"`).
+        /// If field names contain dots or brackets but are not nested, you can use `\\` to escape
+        /// dots and brackets (e.g., `"a\\.b"` and `"a\\[0\\]"`).
+        /// See more details about escaping in the [field documentation](field.html).
+        ///
+        /// __Note:__ `field` is not required if `aggregate` is `count`.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+        /// or [a temporal field that gets casted as ordinal](type.html#cast).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+        /// `"nominal"`).
+        /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+        /// [geographic projection](projection.html) is applied.
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalPredicateValueDefType? Type { get; set; }
+
+        /// <summary>
+        /// A constant value in visual domain.
+        /// </summary>
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalValueDefValue? Value { get; set; }
+    }
+
+    public partial record ConditionalPredicateFieldDefClass
+    {
+        [JsonProperty("test", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LogicalOperandPredicate? Test { get; set; }
+
+        /// <summary>
+        /// A constant value in visual domain (e.g., `"red"` / "#0099ff" for color, values between
+        /// `0` to `1` for opacity).
+        /// </summary>
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalValueDefValue? Value { get; set; }
+
+        /// <summary>
+        /// A [selection name](selection.html), or a series of [composed
+        /// selections](selection.html#compose).
+        /// </summary>
+        [JsonProperty("selection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionOperand? Selection { get; set; }
+
+        /// <summary>
+        /// Aggregation function for the field
+        /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregateOp? Aggregate { get; set; }
+
+        /// <summary>
+        /// A flag for binning a `quantitative` field, or [an object defining binning
+        /// parameters](bin.html#params).
+        /// If `true`, default [binning parameters](bin.html) will be applied.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// __Required.__ A string defining the name of the field from which to pull a data value
+        /// or an object defining iterated values from the [`repeat`](repeat.html) operator.
+        ///
+        /// __Note:__ Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects
+        /// (e.g., `"field": "foo.bar"` and `"field": "foo['bar']"`).
+        /// If field names contain dots or brackets but are not nested, you can use `\\` to escape
+        /// dots and brackets (e.g., `"a\\.b"` and `"a\\[0\\]"`).
+        /// See more details about escaping in the [field documentation](field.html).
+        ///
+        /// __Note:__ `field` is not required if `aggregate` is `count`.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+        /// or [a temporal field that gets casted as ordinal](type.html#cast).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+        /// `"nominal"`).
+        /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+        /// [geographic projection](projection.html) is applied.
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalPredicateValueDefType? Type { get; set; }
+    }
+
+    public partial record OrderFieldDef
+    {
+        /// <summary>
+        /// Aggregation function for the field
+        /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregateOp? Aggregate { get; set; }
+
+        /// <summary>
+        /// A flag for binning a `quantitative` field, or [an object defining binning
+        /// parameters](bin.html#params).
+        /// If `true`, default [binning parameters](bin.html) will be applied.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// __Required.__ A string defining the name of the field from which to pull a data value
+        /// or an object defining iterated values from the [`repeat`](repeat.html) operator.
+        ///
+        /// __Note:__ Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects
+        /// (e.g., `"field": "foo.bar"` and `"field": "foo['bar']"`).
+        /// If field names contain dots or brackets but are not nested, you can use `\\` to escape
+        /// dots and brackets (e.g., `"a\\.b"` and `"a\\[0\\]"`).
+        /// See more details about escaping in the [field documentation](field.html).
+        ///
+        /// __Note:__ `field` is not required if `aggregate` is `count`.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// The sort order. One of `"ascending"` (default) or `"descending"`.
+        /// </summary>
+        [JsonProperty("sort")]
+        public SortEnum? Sort { get; set; }
+
+        /// <summary>
+        /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+        /// or [a temporal field that gets casted as ordinal](type.html#cast).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+        /// `"nominal"`).
+        /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+        /// [geographic projection](projection.html) is applied.
+        /// </summary>
+        [JsonProperty("type", Required = Required.Always)]
+        public ConditionalPredicateValueDefType Type { get; set; }
+    }
+
+    /// <summary>
+    /// Text of the `text` mark.
+    ///
+    /// The tooltip text to show upon mouse hover.
+    ///
+    /// A FieldDef with Condition&lt;ValueDef&gt;
+    /// {
+    /// condition: {value: ...},
+    /// field: ...,
+    /// ...
+    /// }
+    ///
+    /// A ValueDef with Condition&lt;ValueDef | FieldDef&gt;
+    /// {
+    /// condition: {field: ...} | {value: ...},
+    /// value: ...,
+    /// }
+    /// </summary>
+    public partial record TextDefWithCondition
+    {
+        /// <summary>
+        /// Aggregation function for the field
+        /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregateOp? Aggregate { get; set; }
+
+        /// <summary>
+        /// A flag for binning a `quantitative` field, or [an object defining binning
+        /// parameters](bin.html#params).
+        /// If `true`, default [binning parameters](bin.html) will be applied.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// One or more value definition(s) with a selection predicate.
+        ///
+        /// __Note:__ A field definition's `condition` property can only contain [value
+        /// definitions](encoding.html#value-def)
+        /// since Vega-Lite only allows at most one encoded field per encoding channel.
+        ///
+        /// A field definition or one or more value definition(s) with a selection predicate.
+        /// </summary>
+        [JsonProperty("condition", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TextCondition? Condition { get; set; }
+
+        /// <summary>
+        /// __Required.__ A string defining the name of the field from which to pull a data value
+        /// or an object defining iterated values from the [`repeat`](repeat.html) operator.
+        ///
+        /// __Note:__ Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects
+        /// (e.g., `"field": "foo.bar"` and `"field": "foo['bar']"`).
+        /// If field names contain dots or brackets but are not nested, you can use `\\` to escape
+        /// dots and brackets (e.g., `"a\\.b"` and `"a\\[0\\]"`).
+        /// See more details about escaping in the [field documentation](field.html).
+        ///
+        /// __Note:__ `field` is not required if `aggregate` is `count`.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// The [formatting pattern](format.html) for a text field. If not defined, this will be
+        /// determined automatically.
+        /// </summary>
+        [JsonProperty("format", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Format { get; set; }
+
+        /// <summary>
+        /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+        /// or [a temporal field that gets casted as ordinal](type.html#cast).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+        /// `"nominal"`).
+        /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+        /// [geographic projection](projection.html) is applied.
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalPredicateValueDefType? Type { get; set; }
+
+        /// <summary>
+        /// A constant value in visual domain.
+        /// </summary>
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalValueDefValue? Value { get; set; }
+    }
+
+    public partial record ConditionalPredicateTextFieldDefClass
+    {
+        [JsonProperty("test", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LogicalOperandPredicate? Test { get; set; }
+
+        /// <summary>
+        /// A constant value in visual domain (e.g., `"red"` / "#0099ff" for color, values between
+        /// `0` to `1` for opacity).
+        /// </summary>
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalValueDefValue? Value { get; set; }
+
+        /// <summary>
+        /// A [selection name](selection.html), or a series of [composed
+        /// selections](selection.html#compose).
+        /// </summary>
+        [JsonProperty("selection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionOperand? Selection { get; set; }
+
+        /// <summary>
+        /// Aggregation function for the field
+        /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregateOp? Aggregate { get; set; }
+
+        /// <summary>
+        /// A flag for binning a `quantitative` field, or [an object defining binning
+        /// parameters](bin.html#params).
+        /// If `true`, default [binning parameters](bin.html) will be applied.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// __Required.__ A string defining the name of the field from which to pull a data value
+        /// or an object defining iterated values from the [`repeat`](repeat.html) operator.
+        ///
+        /// __Note:__ Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects
+        /// (e.g., `"field": "foo.bar"` and `"field": "foo['bar']"`).
+        /// If field names contain dots or brackets but are not nested, you can use `\\` to escape
+        /// dots and brackets (e.g., `"a\\.b"` and `"a\\[0\\]"`).
+        /// See more details about escaping in the [field documentation](field.html).
+        ///
+        /// __Note:__ `field` is not required if `aggregate` is `count`.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// The [formatting pattern](format.html) for a text field. If not defined, this will be
+        /// determined automatically.
+        /// </summary>
+        [JsonProperty("format", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Format { get; set; }
+
+        /// <summary>
+        /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+        /// or [a temporal field that gets casted as ordinal](type.html#cast).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+        /// `"nominal"`).
+        /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+        /// [geographic projection](projection.html) is applied.
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalPredicateValueDefType? Type { get; set; }
+    }
+
+    /// <summary>
+    /// X coordinates of the marks, or width of horizontal `"bar"` and `"area"`.
+    ///
+    /// Y coordinates of the marks, or height of vertical `"bar"` and `"area"`.
+    ///
+    /// Definition object for a constant value of an encoding channel.
+    /// </summary>
+    public partial record XClass
+    {
+        /// <summary>
+        /// Aggregation function for the field
+        /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregateOp? Aggregate { get; set; }
+
+        /// <summary>
+        /// An object defining properties of axis's gridlines, ticks and labels.
+        /// If `null`, the axis for the encoding channel will be removed.
+        ///
+        /// __Default value:__ If undefined, default [axis properties](axis.html) are applied.
+        /// </summary>
+        [JsonProperty("axis")]
+        public Axis? Axis { get; set; }
+
+        /// <summary>
+        /// A flag for binning a `quantitative` field, or [an object defining binning
+        /// parameters](bin.html#params).
+        /// If `true`, default [binning parameters](bin.html) will be applied.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// __Required.__ A string defining the name of the field from which to pull a data value
+        /// or an object defining iterated values from the [`repeat`](repeat.html) operator.
+        ///
+        /// __Note:__ Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects
+        /// (e.g., `"field": "foo.bar"` and `"field": "foo['bar']"`).
+        /// If field names contain dots or brackets but are not nested, you can use `\\` to escape
+        /// dots and brackets (e.g., `"a\\.b"` and `"a\\[0\\]"`).
+        /// See more details about escaping in the [field documentation](field.html).
+        ///
+        /// __Note:__ `field` is not required if `aggregate` is `count`.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// An object defining properties of the channel's scale, which is the function that
+        /// transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        /// (pixels, colors, sizes) of the encoding channels.
+        ///
+        /// __Default value:__ If undefined, default [scale properties](scale.html) are applied.
+        /// </summary>
+        [JsonProperty("scale", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Scale? Scale { get; set; }
+
+        /// <summary>
+        /// Sort order for the encoded field.
+        /// Supported `sort` values include `"ascending"`, `"descending"` and `null` (no sorting).
+        /// For fields with discrete domains, `sort` can also be a [sort field definition
+        /// object](sort.html#sort-field).
+        ///
+        /// __Default value:__ `"ascending"`
+        /// </summary>
+        [JsonProperty("sort")]
+        public SortUnion? Sort { get; set; }
+
+        /// <summary>
+        /// Type of stacking offset if the field should be stacked.
+        /// `stack` is only applicable for `x` and `y` channels with continuous domains.
+        /// For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.
+        ///
+        /// `stack` can be one of the following values:
+        ///
+        /// - `"zero"`: stacking with baseline offset at zero value of the scale (for creating
+        /// typical stacked [bar](stack.html#bar) and [area](stack.html#area) chart).
+        /// - `"normalize"` - stacking with normalized domain (for creating [normalized stacked bar
+        /// and area charts](stack.html#normalized). &lt;br/&gt;
+        /// - `"center"` - stacking with center baseline (for [streamgraph](stack.html#streamgraph)).
+        /// - `null` - No-stacking. This will produce layered [bar](stack.html#layered-bar-chart) and
+        /// area chart.
+        ///
+        /// __Default value:__ `zero` for plots with all of the following conditions are true:
+        ///
+        /// 1. The mark is `bar` or `area`;
+        /// 2. The stacked measure channel (x or y) has a linear scale;
+        /// 3. At least one of non-position channels mapped to an unaggregated field that is
+        /// different from x and y.  Otherwise, `null` by default.
+        /// </summary>
+        [JsonProperty("stack")]
+        public StackOffset? Stack { get; set; }
+
+        /// <summary>
+        /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+        /// or [a temporal field that gets casted as ordinal](type.html#cast).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+        /// `"nominal"`).
+        /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+        /// [geographic projection](projection.html) is applied.
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalPredicateValueDefType? Type { get; set; }
+
+        /// <summary>
+        /// A constant value in visual domain (e.g., `"red"` / "#0099ff" for color, values between
+        /// `0` to `1` for opacity).
+        /// </summary>
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalValueDefValue? Value { get; set; }
+    }
+
+    public partial record Axis
+    {
+        /// <summary>
+        /// A boolean flag indicating if the domain (the axis baseline) should be included as part of
+        /// the axis.
+        ///
+        /// __Default value:__ `true`
+        /// </summary>
+        [JsonProperty("domain", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Domain { get; set; }
+
+        /// <summary>
+        /// The formatting pattern for labels. This is D3's [number format
+        /// pattern](https://github.com/d3/d3-format#locale_format) for quantitative fields and D3's
+        /// [time format pattern](https://github.com/d3/d3-time-format#locale_format) for time
+        /// field.
+        ///
+        /// See the [format documentation](format.html) for more information.
+        ///
+        /// __Default value:__  derived from [numberFormat](config.html#format) config for
+        /// quantitative fields and from [timeFormat](config.html#format) config for temporal fields.
+        /// </summary>
+        [JsonProperty("format", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Format { get; set; }
+
+        /// <summary>
+        /// A boolean flag indicating if grid lines should be included as part of the axis
+        ///
+        /// __Default value:__ `true` for [continuous scales](scale.html#continuous) that are not
+        /// binned; otherwise, `false`.
+        /// </summary>
+        [JsonProperty("grid", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Grid { get; set; }
+
+        /// <summary>
+        /// The rotation angle of the axis labels.
+        ///
+        /// __Default value:__ `-90` for nominal and ordinal fields; `0` otherwise.
+        /// </summary>
+        [JsonProperty("labelAngle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(IndigoMinMaxValueCheckConverter))]
+        public double? LabelAngle { get; set; }
+
+        /// <summary>
+        /// Indicates if labels should be hidden if they exceed the axis range. If `false `(the
+        /// default) no bounds overlap analysis is performed. If `true`, labels will be hidden if
+        /// they exceed the axis range by more than 1 pixel. If this property is a number, it
+        /// specifies the pixel tolerance: the maximum amount by which a label bounding box may
+        /// exceed the axis range.
+        ///
+        /// __Default value:__ `false`.
+        /// </summary>
+        [JsonProperty("labelBound", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Label? LabelBound { get; set; }
+
+        /// <summary>
+        /// Indicates if the first and last axis labels should be aligned flush with the scale range.
+        /// Flush alignment for a horizontal axis will left-align the first label and right-align the
+        /// last label. For vertical axes, bottom and top text baselines are applied instead. If this
+        /// property is a number, it also indicates the number of pixels by which to offset the first
+        /// and last labels; for example, a value of 2 will flush-align the first and last labels and
+        /// also push them 2 pixels outward from the center of the axis. The additional adjustment
+        /// can sometimes help the labels better visually group with corresponding axis ticks.
+        ///
+        /// __Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.
+        /// </summary>
+        [JsonProperty("labelFlush", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Label? LabelFlush { get; set; }
+
+        /// <summary>
+        /// The strategy to use for resolving overlap of axis labels. If `false` (the default), no
+        /// overlap reduction is attempted. If set to `true` or `"parity"`, a strategy of removing
+        /// every other label is used (this works well for standard linear axes). If set to
+        /// `"greedy"`, a linear scan of the labels is performed, removing any labels that overlaps
+        /// with the last visible label (this often works better for log-scaled axes).
+        ///
+        /// __Default value:__ `true` for non-nominal fields with non-log scales; `"greedy"` for log
+        /// scales; otherwise `false`.
+        /// </summary>
+        [JsonProperty("labelOverlap", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LabelOverlapUnion? LabelOverlap { get; set; }
+
+        /// <summary>
+        /// The padding, in pixels, between axis and text labels.
+        /// </summary>
+        [JsonProperty("labelPadding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? LabelPadding { get; set; }
+
+        /// <summary>
+        /// A boolean flag indicating if labels should be included as part of the axis.
+        ///
+        /// __Default value:__  `true`.
+        /// </summary>
+        [JsonProperty("labels", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Labels { get; set; }
+
+        /// <summary>
+        /// The maximum extent in pixels that axis ticks and labels should use. This determines a
+        /// maximum offset value for axis titles.
+        ///
+        /// __Default value:__ `undefined`.
+        /// </summary>
+        [JsonProperty("maxExtent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? MaxExtent { get; set; }
+
+        /// <summary>
+        /// The minimum extent in pixels that axis ticks and labels should use. This determines a
+        /// minimum offset value for axis titles.
+        ///
+        /// __Default value:__ `30` for y-axis; `undefined` for x-axis.
+        /// </summary>
+        [JsonProperty("minExtent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? MinExtent { get; set; }
+
+        /// <summary>
+        /// The offset, in pixels, by which to displace the axis from the edge of the enclosing group
+        /// or data rectangle.
+        ///
+        /// __Default value:__ derived from the [axis config](config.html#facet-scale-config)'s
+        /// `offset` (`0` by default)
+        /// </summary>
+        [JsonProperty("offset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Offset { get; set; }
+
+        /// <summary>
+        /// The orientation of the axis. One of `"top"`, `"bottom"`, `"left"` or `"right"`. The
+        /// orientation can be used to further specialize the axis type (e.g., a y axis oriented for
+        /// the right edge of the chart).
+        ///
+        /// __Default value:__ `"bottom"` for x-axes and `"left"` for y-axes.
+        /// </summary>
+        [JsonProperty("orient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TitleOrient? Orient { get; set; }
+
+        /// <summary>
+        /// The anchor position of the axis in pixels. For x-axis with top or bottom orientation,
+        /// this sets the axis group x coordinate. For y-axis with left or right orientation, this
+        /// sets the axis group y coordinate.
+        ///
+        /// __Default value__: `0`
+        /// </summary>
+        [JsonProperty("position", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Position { get; set; }
+
+        /// <summary>
+        /// A desired number of ticks, for axes visualizing quantitative scales. The resulting number
+        /// may be different so that values are "nice" (multiples of 2, 5, 10) and lie within the
+        /// underlying scale's range.
+        /// </summary>
+        [JsonProperty("tickCount", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TickCount { get; set; }
+
+        /// <summary>
+        /// Boolean value that determines whether the axis should include ticks.
+        /// </summary>
+        [JsonProperty("ticks", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Ticks { get; set; }
+
+        /// <summary>
+        /// The size in pixels of axis ticks.
+        /// </summary>
+        [JsonProperty("tickSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? TickSize { get; set; }
+
+        /// <summary>
+        /// A title for the field. If `null`, the title will be removed.
+        ///
+        /// __Default value:__  derived from the field's name and transformation function
+        /// (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the
+        /// function is displayed as a part of the title (e.g., `"Sum of Profit"`). If the field is
+        /// binned or has a time unit applied, the applied function will be denoted in parentheses
+        /// (e.g., `"Profit (binned)"`, `"Transaction Date (year-month)"`).  Otherwise, the title is
+        /// simply the field name.
+        ///
+        /// __Note__: You can customize the default field title format by providing the [`fieldTitle`
+        /// property in the [config](config.html) or [`fieldTitle` function via the `compile`
+        /// function's options](compile.html#field-title).
+        /// </summary>
+        [JsonProperty("title")]
+        public string? Title { get; set; }
+
+        /// <summary>
+        /// Max length for axis title if the title is automatically generated from the field's
+        /// description.
+        /// </summary>
+        [JsonProperty("titleMaxLength", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitleMaxLength { get; set; }
+
+        /// <summary>
+        /// The padding, in pixels, between title and axis.
+        /// </summary>
+        [JsonProperty("titlePadding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? TitlePadding { get; set; }
+
+        /// <summary>
+        /// Explicitly set the visible axis tick values.
+        /// </summary>
+        [JsonProperty("values", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AxisValue[]? Values { get; set; }
+
+        /// <summary>
+        /// A non-positive integer indicating z-index of the axis.
+        /// If zindex is 0, axes should be drawn behind all chart elements.
+        /// To put them in front, use `"zindex = 1"`.
+        ///
+        /// __Default value:__ `1` (in front of the marks) for actual axis and `0` (behind the marks)
+        /// for grids.
+        /// </summary>
+        [JsonProperty("zindex", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Zindex { get; set; }
+    }
+
+    /// <summary>
+    /// X2 coordinates for ranged  `"area"`, `"bar"`, `"rect"`, and  `"rule"`.
+    ///
+    /// Y2 coordinates for ranged  `"area"`, `"bar"`, `"rect"`, and  `"rule"`.
+    ///
+    /// Definition object for a data field, its type and transformation of an encoding channel.
+    ///
+    /// Definition object for a constant value of an encoding channel.
+    /// </summary>
+    public partial record X2Class
+    {
+        /// <summary>
+        /// Aggregation function for the field
+        /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregateOp? Aggregate { get; set; }
+
+        /// <summary>
+        /// A flag for binning a `quantitative` field, or [an object defining binning
+        /// parameters](bin.html#params).
+        /// If `true`, default [binning parameters](bin.html) will be applied.
+        ///
+        /// __Default value:__ `false`
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// __Required.__ A string defining the name of the field from which to pull a data value
+        /// or an object defining iterated values from the [`repeat`](repeat.html) operator.
+        ///
+        /// __Note:__ Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects
+        /// (e.g., `"field": "foo.bar"` and `"field": "foo['bar']"`).
+        /// If field names contain dots or brackets but are not nested, you can use `\\` to escape
+        /// dots and brackets (e.g., `"a\\.b"` and `"a\\[0\\]"`).
+        /// See more details about escaping in the [field documentation](field.html).
+        ///
+        /// __Note:__ `field` is not required if `aggregate` is `count`.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Field? Field { get; set; }
+
+        /// <summary>
+        /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+        /// or [a temporal field that gets casted as ordinal](type.html#cast).
+        ///
+        /// __Default value:__ `undefined` (None)
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+        /// `"nominal"`).
+        /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+        /// [geographic projection](projection.html) is applied.
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalPredicateValueDefType? Type { get; set; }
+
+        /// <summary>
+        /// A constant value in visual domain (e.g., `"red"` / "#0099ff" for color, values between
+        /// `0` to `1` for opacity).
+        /// </summary>
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ConditionalValueDefValue? Value { get; set; }
+    }
+
+    /// <summary>
+    /// An object that describes mappings between `row` and `column` channels and their field
+    /// definitions.
+    /// </summary>
+    public partial record FacetMapping
+    {
+        /// <summary>
+        /// Horizontal facets for trellis plots.
+        /// </summary>
+        [JsonProperty("column", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FacetFieldDef? Column { get; set; }
+
+        /// <summary>
+        /// Vertical facets for trellis plots.
+        /// </summary>
+        [JsonProperty("row", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FacetFieldDef? Row { get; set; }
+    }
+
+    /// <summary>
+    /// Unit spec that can have a composite mark.
+    /// </summary>
+    public partial record Spec
+    {
+        /// <summary>
+        /// An object describing the data source
+        /// </summary>
+        [JsonProperty("data", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Data? Data { get; set; }
+
+        /// <summary>
+        /// Description of this mark for commenting purpose.
+        /// </summary>
+        [JsonProperty("description", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Description { get; set; }
+
+        /// <summary>
+        /// The height of a visualization.
+        ///
+        /// __Default value:__
+        /// - If a view's [`autosize`](size.html#autosize) type is `"fit"` or its y-channel has a
+        /// [continuous scale](scale.html#continuous), the height will be the value of
+        /// [`config.view.height`](spec.html#config).
+        /// - For y-axis with a band or point scale: if [`rangeStep`](scale.html#band) is a numeric
+        /// value or unspecified, the height is [determined by the range step, paddings, and the
+        /// cardinality of the field mapped to y-channel](scale.html#band). Otherwise, if the
+        /// `rangeStep` is `null`, the height will be the value of
+        /// [`config.view.height`](spec.html#config).
+        /// - If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.
+        ///
+        /// __Note__: For plots with [`row` and `column` channels](encoding.html#facet), this
+        /// represents the height of a single view.
+        ///
+        /// __See also:__ The documentation for [width and height](size.html) contains more examples.
+        /// </summary>
+        [JsonProperty("height", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Height { get; set; }
+
+        /// <summary>
+        /// Layer or single view specifications to be layered.
+        ///
+        /// __Note__: Specifications inside `layer` cannot use `row` and `column` channels as
+        /// layering facet specifications is not allowed.
+        /// </summary>
+        [JsonProperty("layer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LayerSpec[]? Layer { get; set; }
+
+        /// <summary>
+        /// Name of the visualization for later reference.
+        /// </summary>
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Name { get; set; }
+
+        /// <summary>
+        /// Scale, axis, and legend resolutions for layers.
+        ///
+        /// Scale, axis, and legend resolutions for facets.
+        ///
+        /// Scale and legend resolutions for repeated charts.
+        ///
+        /// Scale, axis, and legend resolutions for vertically concatenated charts.
+        ///
+        /// Scale, axis, and legend resolutions for horizontally concatenated charts.
+        /// </summary>
+        [JsonProperty("resolve", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Resolve? Resolve { get; set; }
+
+        /// <summary>
+        /// Title for the plot.
+        /// </summary>
+        [JsonProperty("title", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Title? Title { get; set; }
+
+        /// <summary>
+        /// An array of data transformations such as filter and new field calculation.
+        /// </summary>
+        [JsonProperty("transform", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Transform[]? Transform { get; set; }
+
+        /// <summary>
+        /// The width of a visualization.
+        ///
+        /// __Default value:__ This will be determined by the following rules:
+        ///
+        /// - If a view's [`autosize`](size.html#autosize) type is `"fit"` or its x-channel has a
+        /// [continuous scale](scale.html#continuous), the width will be the value of
+        /// [`config.view.width`](spec.html#config).
+        /// - For x-axis with a band or point scale: if [`rangeStep`](scale.html#band) is a numeric
+        /// value or unspecified, the width is [determined by the range step, paddings, and the
+        /// cardinality of the field mapped to x-channel](scale.html#band).   Otherwise, if the
+        /// `rangeStep` is `null`, the width will be the value of
+        /// [`config.view.width`](spec.html#config).
+        /// - If no field is mapped to `x` channel, the `width` will be the value of
+        /// [`config.scale.textXRangeStep`](size.html#default-width-and-height) for `text` mark and
+        /// the value of `rangeStep` for other marks.
+        ///
+        /// __Note:__ For plots with [`row` and `column` channels](encoding.html#facet), this
+        /// represents the width of a single view.
+        ///
+        /// __See also:__ The documentation for [width and height](size.html) contains more examples.
+        /// </summary>
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Width { get; set; }
+
+        /// <summary>
+        /// A key-value mapping between encoding channels and definition of fields.
+        /// </summary>
+        [JsonProperty("encoding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Encoding? Encoding { get; set; }
+
+        /// <summary>
+        /// A string describing the mark type (one of `"bar"`, `"circle"`, `"square"`, `"tick"`,
+        /// `"line"`,
+        /// * `"area"`, `"point"`, `"rule"`, `"geoshape"`, and `"text"`) or a [mark definition
+        /// object](mark.html#mark-def).
+        /// </summary>
+        [JsonProperty("mark", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AnyMark? Mark { get; set; }
+
+        /// <summary>
+        /// An object defining properties of geographic projection.
+        ///
+        /// Works with `"geoshape"` marks and `"point"` or `"line"` marks that have a channel (one or
+        /// more of `"X"`, `"X2"`, `"Y"`, `"Y2"`) with type `"latitude"`, or `"longitude"`.
+        /// </summary>
+        [JsonProperty("projection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Projection? Projection { get; set; }
+
+        /// <summary>
+        /// A key-value mapping between selection names and definitions.
+        /// </summary>
+        [JsonProperty("selection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Dictionary<string, SelectionDef>? Selection { get; set; }
+
+        /// <summary>
+        /// An object that describes mappings between `row` and `column` channels and their field
+        /// definitions.
+        /// </summary>
+        [JsonProperty("facet", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FacetMapping? Facet { get; set; }
+
+        /// <summary>
+        /// A specification of the view that gets faceted.
+        /// </summary>
+        [JsonProperty("spec", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Spec? SpecSpec { get; set; }
+
+        /// <summary>
+        /// An object that describes what fields should be repeated into views that are laid out as a
+        /// `row` or `column`.
+        /// </summary>
+        [JsonProperty("repeat", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Repeat? Repeat { get; set; }
+
+        /// <summary>
+        /// A list of views that should be concatenated and put into a column.
+        /// </summary>
+        [JsonProperty("vconcat", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Spec[]? Vconcat { get; set; }
+
+        /// <summary>
+        /// A list of views that should be concatenated and put into a row.
+        /// </summary>
+        [JsonProperty("hconcat", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Spec[]? Hconcat { get; set; }
+    }
+
+    /// <summary>
+    /// A key-value mapping between encoding channels and definition of fields.
+    /// </summary>
+    public partial record Encoding
+    {
+        /// <summary>
+        /// Color of the marks – either fill or stroke color based on mark type.
+        /// By default, `color` represents fill color for `"area"`, `"bar"`, `"tick"`,
+        /// `"text"`, `"circle"`, and `"square"` / stroke color for `"line"` and `"point"`.
+        ///
+        /// __Default value:__ If undefined, the default color depends on [mark
+        /// config](config.html#mark)'s `color` property.
+        ///
+        /// _Note:_ See the scale documentation for more information about customizing [color
+        /// scheme](scale.html#scheme).
+        /// </summary>
+        [JsonProperty("color", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkPropDefWithCondition? Color { get; set; }
+
+        /// <summary>
+        /// Additional levels of detail for grouping data in aggregate views and
+        /// in line and area marks without mapping data to a specific visual channel.
+        /// </summary>
+        [JsonProperty("detail", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Detail? Detail { get; set; }
+
+        /// <summary>
+        /// A URL to load upon mouse click.
+        /// </summary>
+        [JsonProperty("href", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public DefWithCondition? Href { get; set; }
+
+        /// <summary>
+        /// Opacity of the marks – either can be a value or a range.
+        ///
+        /// __Default value:__ If undefined, the default opacity depends on [mark
+        /// config](config.html#mark)'s `opacity` property.
+        /// </summary>
+        [JsonProperty("opacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkPropDefWithCondition? Opacity { get; set; }
+
+        /// <summary>
+        /// Stack order for stacked marks or order of data points in line marks for connected scatter
+        /// plots.
+        ///
+        /// __Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating
+        /// additional aggregation grouping.
+        /// </summary>
+        [JsonProperty("order", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Order? Order { get; set; }
+
+        /// <summary>
+        /// For `point` marks the supported values are
+        /// `"circle"` (default), `"square"`, `"cross"`, `"diamond"`, `"triangle-up"`,
+        /// or `"triangle-down"`, or else a custom SVG path string.
+        /// For `geoshape` marks it should be a field definition of the geojson data
+        ///
+        /// __Default value:__ If undefined, the default shape depends on [mark
+        /// config](config.html#point-config)'s `shape` property.
+        /// </summary>
+        [JsonProperty("shape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkPropDefWithCondition? Shape { get; set; }
+
+        /// <summary>
+        /// Size of the mark.
+        /// - For `"point"`, `"square"` and `"circle"`, – the symbol size, or pixel area of the mark.
+        /// - For `"bar"` and `"tick"` – the bar and tick's size.
+        /// - For `"text"` – the text's font size.
+        /// - Size is currently unsupported for `"line"`, `"area"`, and `"rect"`.
+        /// </summary>
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public MarkPropDefWithCondition? Size { get; set; }
+
+        /// <summary>
+        /// Text of the `text` mark.
+        /// </summary>
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TextDefWithCondition? Text { get; set; }
+
+        /// <summary>
+        /// The tooltip text to show upon mouse hover.
+        /// </summary>
+        [JsonProperty("tooltip", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TextDefWithCondition? Tooltip { get; set; }
+
+        /// <summary>
+        /// X coordinates of the marks, or width of horizontal `"bar"` and `"area"`.
+        /// </summary>
+        [JsonProperty("x", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public XClass? X { get; set; }
+
+        /// <summary>
+        /// X2 coordinates for ranged  `"area"`, `"bar"`, `"rect"`, and  `"rule"`.
+        /// </summary>
+        [JsonProperty("x2", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public X2Class? X2 { get; set; }
+
+        /// <summary>
+        /// Y coordinates of the marks, or height of vertical `"bar"` and `"area"`.
+        /// </summary>
+        [JsonProperty("y", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public XClass? Y { get; set; }
+
+        /// <summary>
+        /// Y2 coordinates for ranged  `"area"`, `"bar"`, `"rect"`, and  `"rule"`.
+        /// </summary>
+        [JsonProperty("y2", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public X2Class? Y2 { get; set; }
+    }
+
+    /// <summary>
+    /// Unit spec that can have a composite mark.
+    /// </summary>
+    public partial record LayerSpec
+    {
+        /// <summary>
+        /// An object describing the data source
+        /// </summary>
+        [JsonProperty("data", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Data? Data { get; set; }
+
+        /// <summary>
+        /// Description of this mark for commenting purpose.
+        /// </summary>
+        [JsonProperty("description", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Description { get; set; }
+
+        /// <summary>
+        /// The height of a visualization.
+        ///
+        /// __Default value:__
+        /// - If a view's [`autosize`](size.html#autosize) type is `"fit"` or its y-channel has a
+        /// [continuous scale](scale.html#continuous), the height will be the value of
+        /// [`config.view.height`](spec.html#config).
+        /// - For y-axis with a band or point scale: if [`rangeStep`](scale.html#band) is a numeric
+        /// value or unspecified, the height is [determined by the range step, paddings, and the
+        /// cardinality of the field mapped to y-channel](scale.html#band). Otherwise, if the
+        /// `rangeStep` is `null`, the height will be the value of
+        /// [`config.view.height`](spec.html#config).
+        /// - If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.
+        ///
+        /// __Note__: For plots with [`row` and `column` channels](encoding.html#facet), this
+        /// represents the height of a single view.
+        ///
+        /// __See also:__ The documentation for [width and height](size.html) contains more examples.
+        /// </summary>
+        [JsonProperty("height", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Height { get; set; }
+
+        /// <summary>
+        /// Layer or single view specifications to be layered.
+        ///
+        /// __Note__: Specifications inside `layer` cannot use `row` and `column` channels as
+        /// layering facet specifications is not allowed.
+        /// </summary>
+        [JsonProperty("layer", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LayerSpec[]? Layer { get; set; }
+
+        /// <summary>
+        /// Name of the visualization for later reference.
+        /// </summary>
+        [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Name { get; set; }
+
+        /// <summary>
+        /// Scale, axis, and legend resolutions for layers.
+        /// </summary>
+        [JsonProperty("resolve", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Resolve? Resolve { get; set; }
+
+        /// <summary>
+        /// Title for the plot.
+        /// </summary>
+        [JsonProperty("title", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Title? Title { get; set; }
+
+        /// <summary>
+        /// An array of data transformations such as filter and new field calculation.
+        /// </summary>
+        [JsonProperty("transform", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Transform[]? Transform { get; set; }
+
+        /// <summary>
+        /// The width of a visualization.
+        ///
+        /// __Default value:__ This will be determined by the following rules:
+        ///
+        /// - If a view's [`autosize`](size.html#autosize) type is `"fit"` or its x-channel has a
+        /// [continuous scale](scale.html#continuous), the width will be the value of
+        /// [`config.view.width`](spec.html#config).
+        /// - For x-axis with a band or point scale: if [`rangeStep`](scale.html#band) is a numeric
+        /// value or unspecified, the width is [determined by the range step, paddings, and the
+        /// cardinality of the field mapped to x-channel](scale.html#band).   Otherwise, if the
+        /// `rangeStep` is `null`, the width will be the value of
+        /// [`config.view.width`](spec.html#config).
+        /// - If no field is mapped to `x` channel, the `width` will be the value of
+        /// [`config.scale.textXRangeStep`](size.html#default-width-and-height) for `text` mark and
+        /// the value of `rangeStep` for other marks.
+        ///
+        /// __Note:__ For plots with [`row` and `column` channels](encoding.html#facet), this
+        /// represents the width of a single view.
+        ///
+        /// __See also:__ The documentation for [width and height](size.html) contains more examples.
+        /// </summary>
+        [JsonProperty("width", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Width { get; set; }
+
+        /// <summary>
+        /// A key-value mapping between encoding channels and definition of fields.
+        /// </summary>
+        [JsonProperty("encoding", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Encoding? Encoding { get; set; }
+
+        /// <summary>
+        /// A string describing the mark type (one of `"bar"`, `"circle"`, `"square"`, `"tick"`,
+        /// `"line"`,
+        /// * `"area"`, `"point"`, `"rule"`, `"geoshape"`, and `"text"`) or a [mark definition
+        /// object](mark.html#mark-def).
+        /// </summary>
+        [JsonProperty("mark", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AnyMark? Mark { get; set; }
+
+        /// <summary>
+        /// An object defining properties of geographic projection.
+        ///
+        /// Works with `"geoshape"` marks and `"point"` or `"line"` marks that have a channel (one or
+        /// more of `"X"`, `"X2"`, `"Y"`, `"Y2"`) with type `"latitude"`, or `"longitude"`.
+        /// </summary>
+        [JsonProperty("projection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Projection? Projection { get; set; }
+
+        /// <summary>
+        /// A key-value mapping between selection names and definitions.
+        /// </summary>
+        [JsonProperty("selection", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Dictionary<string, SelectionDef>? Selection { get; set; }
+    }
+
+    public partial record MarkDef
+    {
+        /// <summary>
+        /// The horizontal alignment of the text. One of `"left"`, `"right"`, `"center"`.
+        /// </summary>
+        [JsonProperty("align", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public HorizontalAlign? Align { get; set; }
+
+        /// <summary>
+        /// The rotation angle of the text, in degrees.
+        /// </summary>
+        [JsonProperty("angle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
+        public double? Angle { get; set; }
+
+        /// <summary>
+        /// The vertical alignment of the text. One of `"top"`, `"middle"`, `"bottom"`.
+        ///
+        /// __Default value:__ `"middle"`
+        /// </summary>
+        [JsonProperty("baseline", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VerticalAlign? Baseline { get; set; }
+
+        /// <summary>
+        /// Whether a mark be clipped to the enclosing group’s width and height.
+        /// </summary>
+        [JsonProperty("clip", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Clip { get; set; }
+
+        /// <summary>
+        /// Default color.  Note that `fill` and `stroke` have higher precedence than `color` and
+        /// will override `color`.
+        ///
+        /// __Default value:__ &lt;span style="color: #4682b4;"&gt;&amp;#9632;&lt;/span&gt; `"#4682b4"`
+        ///
+        /// __Note:__ This property cannot be used in a [style config](mark.html#style-config).
+        /// </summary>
+        [JsonProperty("color", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Color { get; set; }
+
+        /// <summary>
+        /// The mouse cursor used over the mark. Any valid [CSS cursor
+        /// type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.
+        /// </summary>
+        [JsonProperty("cursor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Cursor? Cursor { get; set; }
+
+        /// <summary>
+        /// The horizontal offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dx", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dx { get; set; }
+
+        /// <summary>
+        /// The vertical offset, in pixels, between the text label and its anchor point. The offset
+        /// is applied after rotation by the _angle_ property.
+        /// </summary>
+        [JsonProperty("dy", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Dy { get; set; }
+
+        /// <summary>
+        /// Default Fill Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("fill", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Fill { get; set; }
+
+        /// <summary>
+        /// Whether the mark's color should be used as fill color instead of stroke color.
+        ///
+        /// __Default value:__ `true` for all marks except `point` and `false` for `point`.
+        ///
+        /// __Applicable for:__ `bar`, `point`, `circle`, `square`, and `area` marks.
+        ///
+        /// __Note:__ This property cannot be used in a [style config](mark.html#style-config).
+        /// </summary>
+        [JsonProperty("filled", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Filled { get; set; }
+
+        /// <summary>
+        /// The fill opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("fillOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? FillOpacity { get; set; }
+
+        /// <summary>
+        /// The typeface to set the text in (e.g., `"Helvetica Neue"`).
+        /// </summary>
+        [JsonProperty("font", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Font { get; set; }
+
+        /// <summary>
+        /// The font size, in pixels.
+        /// </summary>
+        [JsonProperty("fontSize", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? FontSize { get; set; }
+
+        /// <summary>
+        /// The font style (e.g., `"italic"`).
+        /// </summary>
+        [JsonProperty("fontStyle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontStyle? FontStyle { get; set; }
+
+        /// <summary>
+        /// The font weight (e.g., `"bold"`).
+        /// </summary>
+        [JsonProperty("fontWeight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public FontWeightUnion? FontWeight { get; set; }
+
+        /// <summary>
+        /// A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
+        /// </summary>
+        [JsonProperty("href", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Href { get; set; }
+
+        /// <summary>
+        /// The line interpolation method to use for line and area marks. One of the following:
+        /// - `"linear"`: piecewise linear segments, as in a polyline.
+        /// - `"linear-closed"`: close the linear segments to form a polygon.
+        /// - `"step"`: alternate between horizontal and vertical segments, as in a step function.
+        /// - `"step-before"`: alternate between vertical and horizontal segments, as in a step
+        /// function.
+        /// - `"step-after"`: alternate between horizontal and vertical segments, as in a step
+        /// function.
+        /// - `"basis"`: a B-spline, with control point duplication on the ends.
+        /// - `"basis-open"`: an open B-spline; may not intersect the start or end.
+        /// - `"basis-closed"`: a closed B-spline, as in a loop.
+        /// - `"cardinal"`: a Cardinal spline, with control point duplication on the ends.
+        /// - `"cardinal-open"`: an open Cardinal spline; may not intersect the start or end, but
+        /// will intersect other control points.
+        /// - `"cardinal-closed"`: a closed Cardinal spline, as in a loop.
+        /// - `"bundle"`: equivalent to basis, except the tension parameter is used to straighten the
+        /// spline.
+        /// - `"monotone"`: cubic interpolation that preserves monotonicity in y.
+        /// </summary>
+        [JsonProperty("interpolate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Interpolate? Interpolate { get; set; }
+
+        /// <summary>
+        /// The maximum length of the text mark in pixels (default 0, indicating no limit). The text
+        /// value will be automatically truncated if the rendered size exceeds the limit.
+        /// </summary>
+        [JsonProperty("limit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Limit { get; set; }
+
+        /// <summary>
+        /// The overall opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or
+        /// `square` marks or layered `bar` charts and `1` otherwise.
+        /// </summary>
+        [JsonProperty("opacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Opacity { get; set; }
+
+        /// <summary>
+        /// The orientation of a non-stacked bar, tick, area, and line charts.
+        /// The value is either horizontal (default) or vertical.
+        /// - For bar, rule and tick, this determines whether the size of the bar and tick
+        /// should be applied to x or y dimension.
+        /// - For area, this property determines the orient property of the Vega output.
+        /// - For line, this property determines the sort order of the points in the line
+        /// if `config.sortLineBy` is not specified.
+        /// For stacked charts, this is always determined by the orientation of the stack;
+        /// therefore explicitly specified value will be ignored.
+        /// </summary>
+        [JsonProperty("orient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Orient? Orient { get; set; }
+
+        /// <summary>
+        /// Polar coordinate radial offset, in pixels, of the text label from the origin determined
+        /// by the `x` and `y` properties.
+        /// </summary>
+        [JsonProperty("radius", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Radius { get; set; }
+
+        /// <summary>
+        /// The default symbol shape to use. One of: `"circle"` (default), `"square"`, `"cross"`,
+        /// `"diamond"`, `"triangle-up"`, or `"triangle-down"`, or a custom SVG path.
+        ///
+        /// __Default value:__ `"circle"`
+        /// </summary>
+        [JsonProperty("shape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Shape { get; set; }
+
+        /// <summary>
+        /// The pixel area each the point/circle/square.
+        /// For example: in the case of circles, the radius is determined in part by the square root
+        /// of the size value.
+        ///
+        /// __Default value:__ `30`
+        /// </summary>
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? Size { get; set; }
+
+        /// <summary>
+        /// Default Stroke Color.  This has higher precedence than config.color
+        ///
+        /// __Default value:__ (None)
+        /// </summary>
+        [JsonProperty("stroke", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Stroke { get; set; }
+
+        /// <summary>
+        /// An array of alternating stroke, space lengths for creating dashed or dotted lines.
+        /// </summary>
+        [JsonProperty("strokeDash", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? StrokeDash { get; set; }
+
+        /// <summary>
+        /// The offset (in pixels) into which to begin drawing with the stroke dash array.
+        /// </summary>
+        [JsonProperty("strokeDashOffset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? StrokeDashOffset { get; set; }
+
+        /// <summary>
+        /// The stroke opacity (value between [0,1]).
+        ///
+        /// __Default value:__ `1`
+        /// </summary>
+        [JsonProperty("strokeOpacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? StrokeOpacity { get; set; }
+
+        /// <summary>
+        /// The stroke width, in pixels.
+        /// </summary>
+        [JsonProperty("strokeWidth", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
+        public double? StrokeWidth { get; set; }
+
+        /// <summary>
+        /// A string or array of strings indicating the name of custom styles to apply to the mark. A
+        /// style is a named collection of mark property defaults defined within the [style
+        /// configuration](mark.html#style-config). If style is an array, later styles will override
+        /// earlier styles. Any [mark properties](encoding.html#mark-prop) explicitly defined within
+        /// the `encoding` will override a style default.
+        ///
+        /// __Default value:__ The mark's name.  For example, a bar mark will have style `"bar"` by
+        /// default.
+        /// __Note:__ Any specified style will augment the default style. For example, a bar mark
+        /// with `"style": "foo"` will receive from `config.style.bar` and `config.style.foo` (the
+        /// specified style `"foo"` has higher precedence).
+        /// </summary>
+        [JsonProperty("style", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Style? Style { get; set; }
+
+        /// <summary>
+        /// Depending on the interpolation type, sets the tension parameter (for line and area marks).
+        /// </summary>
+        [JsonProperty("tension", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
+        public double? Tension { get; set; }
+
+        /// <summary>
+        /// Placeholder text if the `text` channel is not specified
+        /// </summary>
+        [JsonProperty("text", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Text { get; set; }
+
+        /// <summary>
+        /// Polar coordinate angle, in radians, of the text label from the origin determined by the
+        /// `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark
+        /// `startAngle` and `endAngle` properties: angles are measured in radians, with `0`
+        /// indicating "north".
+        /// </summary>
+        [JsonProperty("theta", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Theta { get; set; }
+
+        /// <summary>
+        /// The mark type.
+        /// One of `"bar"`, `"circle"`, `"square"`, `"tick"`, `"line"`,
+        /// `"area"`, `"point"`, `"geoshape"`, `"rule"`, and `"text"`.
+        /// </summary>
+        [JsonProperty("type", Required = Required.Always)]
+        public Mark Type { get; set; }
+    }
+
+    /// <summary>
+    /// An object defining properties of geographic projection.
+    ///
+    /// Works with `"geoshape"` marks and `"point"` or `"line"` marks that have a channel (one or
+    /// more of `"X"`, `"X2"`, `"Y"`, `"Y2"`) with type `"latitude"`, or `"longitude"`.
+    /// </summary>
+    public partial record Projection
+    {
+        /// <summary>
+        /// Sets the projection’s center to the specified center, a two-element array of longitude
+        /// and latitude in degrees.
+        ///
+        /// __Default value:__ `[0, 0]`
+        /// </summary>
+        [JsonProperty("center", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? Center { get; set; }
+
+        /// <summary>
+        /// Sets the projection’s clipping circle radius to the specified angle in degrees. If
+        /// `null`, switches to [antimeridian](http://bl.ocks.org/mbostock/3788999) cutting rather
+        /// than small-circle clipping.
+        /// </summary>
+        [JsonProperty("clipAngle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? ClipAngle { get; set; }
+
+        /// <summary>
+        /// Sets the projection’s viewport clip extent to the specified bounds in pixels. The extent
+        /// bounds are specified as an array `[[x0, y0], [x1, y1]]`, where `x0` is the left-side of
+        /// the viewport, `y0` is the top, `x1` is the right and `y1` is the bottom. If `null`, no
+        /// viewport clipping is performed.
+        /// </summary>
+        [JsonProperty("clipExtent", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[][]? ClipExtent { get; set; }
+
+        [JsonProperty("coefficient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Coefficient { get; set; }
+
+        [JsonProperty("distance", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Distance { get; set; }
+
+        [JsonProperty("fraction", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Fraction { get; set; }
+
+        [JsonProperty("lobes", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Lobes { get; set; }
+
+        [JsonProperty("parallel", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Parallel { get; set; }
+
+        /// <summary>
+        /// Sets the threshold for the projection’s [adaptive
+        /// resampling](http://bl.ocks.org/mbostock/3795544) to the specified value in pixels. This
+        /// value corresponds to the [Douglas–Peucker
+        /// distance](http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm).
+        /// If precision is not specified, returns the projection’s current resampling precision
+        /// which defaults to `√0.5 ≅ 0.70710…`.
+        /// </summary>
+        [JsonProperty("precision", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Dictionary<string, TitleFontWeight>? Precision { get; set; }
+
+        [JsonProperty("radius", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Radius { get; set; }
+
+        [JsonProperty("ratio", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Ratio { get; set; }
+
+        /// <summary>
+        /// Sets the projection’s three-axis rotation to the specified angles, which must be a two-
+        /// or three-element array of numbers [`lambda`, `phi`, `gamma`] specifying the rotation
+        /// angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.)
+        ///
+        /// __Default value:__ `[0, 0, 0]`
+        /// </summary>
+        [JsonProperty("rotate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double[]? Rotate { get; set; }
+
+        [JsonProperty("spacing", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Spacing { get; set; }
+
+        [JsonProperty("tilt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Tilt { get; set; }
+
+        /// <summary>
+        /// The cartographic projection to use. This value is case-insensitive, for example
+        /// `"albers"` and `"Albers"` indicate the same projection type. You can find all valid
+        /// projection types [in the
+        /// documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).
+        ///
+        /// __Default value:__ `mercator`
+        /// </summary>
+        [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public VgProjectionType? Type { get; set; }
+    }
+
+    /// <summary>
+    /// Scale, axis, and legend resolutions for layers.
+    ///
+    /// Defines how scales, axes, and legends from different specs should be combined. Resolve is
+    /// a mapping from `scale`, `axis`, and `legend` to a mapping from channels to resolutions.
+    ///
+    /// Scale, axis, and legend resolutions for facets.
+    ///
+    /// Scale and legend resolutions for repeated charts.
+    ///
+    /// Scale, axis, and legend resolutions for vertically concatenated charts.
+    ///
+    /// Scale, axis, and legend resolutions for horizontally concatenated charts.
+    /// </summary>
+    public partial record Resolve
+    {
+        [JsonProperty("axis", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AxisResolveMap? Axis { get; set; }
+
+        [JsonProperty("legend", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LegendResolveMap? Legend { get; set; }
+
+        [JsonProperty("scale", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ScaleResolveMap? Scale { get; set; }
+    }
+
+    public partial record AxisResolveMap
+    {
+        [JsonProperty("x", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? X { get; set; }
+
+        [JsonProperty("y", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? Y { get; set; }
+    }
+
+    public partial record LegendResolveMap
+    {
+        [JsonProperty("color", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? Color { get; set; }
+
+        [JsonProperty("opacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? Opacity { get; set; }
+
+        [JsonProperty("shape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? Shape { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? Size { get; set; }
+    }
+
+    public partial record ScaleResolveMap
+    {
+        [JsonProperty("color", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? Color { get; set; }
+
+        [JsonProperty("opacity", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? Opacity { get; set; }
+
+        [JsonProperty("shape", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? Shape { get; set; }
+
+        [JsonProperty("size", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? Size { get; set; }
+
+        [JsonProperty("x", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? X { get; set; }
+
+        [JsonProperty("y", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public ResolveMode? Y { get; set; }
+    }
+
+    public partial record SelectionDef
+    {
+        /// <summary>
+        /// Establish a two-way binding between a single selection and input elements
+        /// (also known as dynamic query widgets). A binding takes the form of
+        /// Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)
+        /// or can be a mapping between projected field/encodings and binding definitions.
+        ///
+        /// See the [bind transform](bind.html) documentation for more information.
+        ///
+        /// Establishes a two-way binding between the interval selection and the scales
+        /// used within the same view. This allows a user to interactively pan and
+        /// zoom the view.
+        /// </summary>
+        [JsonProperty("bind", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public BindUnion? Bind { get; set; }
+
+        /// <summary>
+        /// By default, all data values are considered to lie within an empty selection.
+        /// When set to `none`, empty selections contain no data values.
+        /// </summary>
+        [JsonProperty("empty", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Empty? Empty { get; set; }
+
+        /// <summary>
+        /// An array of encoding channels. The corresponding data field values
+        /// must match for a data tuple to fall within the selection.
+        /// </summary>
+        [JsonProperty("encodings", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SingleDefChannel[]? Encodings { get; set; }
+
+        /// <summary>
+        /// An array of field names whose values must match for a data tuple to
+        /// fall within the selection.
+        /// </summary>
+        [JsonProperty("fields", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Fields { get; set; }
+
+        /// <summary>
+        /// When true, an invisible voronoi diagram is computed to accelerate discrete
+        /// selection. The data value _nearest_ the mouse cursor is added to the selection.
+        ///
+        /// See the [nearest transform](nearest.html) documentation for more information.
+        /// </summary>
+        [JsonProperty("nearest", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Nearest { get; set; }
+
+        /// <summary>
+        /// A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or
+        /// selector) that triggers the selection.
+        /// For interval selections, the event stream must specify a [start and
+        /// end](https://vega.github.io/vega/docs/event-streams/#between-filters).
+        /// </summary>
+        [JsonProperty("on")]
+        public object? On { get; set; }
+
+        /// <summary>
+        /// With layered and multi-view displays, a strategy that determines how
+        /// selections' data queries are resolved when applied in a filter transform,
+        /// conditional encoding rule, or scale domain.
+        /// </summary>
+        [JsonProperty("resolve", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public SelectionResolution? Resolve { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public SelectionDefType Type { get; set; }
+
+        /// <summary>
+        /// Controls whether data values should be toggled or only ever inserted into
+        /// multi selections. Can be `true`, `false` (for insertion only), or a
+        /// [Vega expression](https://vega.github.io/vega/docs/expressions/).
+        ///
+        /// __Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,
+        /// data values are toggled when a user interacts with the shift-key pressed).
+        ///
+        /// See the [toggle transform](toggle.html) documentation for more information.
+        /// </summary>
+        [JsonProperty("toggle", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Translate? Toggle { get; set; }
+
+        /// <summary>
+        /// An interval selection also adds a rectangle mark to depict the
+        /// extents of the interval. The `mark` property can be used to customize the
+        /// appearance of the mark.
+        /// </summary>
+        [JsonProperty("mark", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public BrushConfig? Mark { get; set; }
+
+        /// <summary>
+        /// When truthy, allows a user to interactively move an interval selection
+        /// back-and-forth. Can be `true`, `false` (to disable panning), or a
+        /// [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)
+        /// which must include a start and end event to trigger continuous panning.
+        ///
+        /// __Default value:__ `true`, which corresponds to
+        /// `[mousedown, window:mouseup] &gt; window:mousemove!` which corresponds to
+        /// clicks and dragging within an interval selection to reposition it.
+        /// </summary>
+        [JsonProperty("translate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Translate? Translate { get; set; }
+
+        /// <summary>
+        /// When truthy, allows a user to interactively resize an interval selection.
+        /// Can be `true`, `false` (to disable zooming), or a [Vega event stream
+        /// definition](https://vega.github.io/vega/docs/event-streams/). Currently,
+        /// only `wheel` events are supported.
+        ///
+        ///
+        /// __Default value:__ `true`, which corresponds to `wheel!`.
+        /// </summary>
+        [JsonProperty("zoom", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Translate? Zoom { get; set; }
+    }
+
+    public partial record TitleParams
+    {
+        /// <summary>
+        /// The anchor position for placing the title. One of `"start"`, `"middle"`, or `"end"`. For
+        /// example, with an orientation of top these anchor positions map to a left-, center-, or
+        /// right-aligned title.
+        ///
+        /// __Default value:__ `"middle"` for [single](spec.html) and [layered](layer.html) views.
+        /// `"start"` for other composite views.
+        ///
+        /// __Note:__ [For now](https://github.com/vega/vega-lite/issues/2875), `anchor` is only
+        /// customizable only for [single](spec.html) and [layered](layer.html) views.  For other
+        /// composite views, `anchor` is always `"start"`.
+        /// </summary>
+        [JsonProperty("anchor", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Anchor? Anchor { get; set; }
+
+        /// <summary>
+        /// The orthogonal offset in pixels by which to displace the title from its position along
+        /// the edge of the chart.
+        /// </summary>
+        [JsonProperty("offset", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public double? Offset { get; set; }
+
+        /// <summary>
+        /// The orientation of the title relative to the chart. One of `"top"` (the default),
+        /// `"bottom"`, `"left"`, or `"right"`.
+        /// </summary>
+        [JsonProperty("orient", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TitleOrient? Orient { get; set; }
+
+        /// <summary>
+        /// A [mark style property](config.html#style) to apply to the title text mark.
+        ///
+        /// __Default value:__ `"group-title"`.
+        /// </summary>
+        [JsonProperty("style", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Style? Style { get; set; }
+
+        /// <summary>
+        /// The title text.
+        /// </summary>
+        [JsonProperty("text", Required = Required.Always)]
+        public string Text { get; set; }
+    }
+
+    public partial record Transform
+    {
+        /// <summary>
+        /// The `filter` property must be one of the predicate definitions:
+        /// (1) an [expression](types.html#expression) string,
+        /// where `datum` can be used to refer to the current data object;
+        /// (2) one of the field predicates: [equal predicate](filter.html#equal-predicate);
+        /// [range predicate](filter.html#range-predicate), [one-of
+        /// predicate](filter.html#one-of-predicate);
+        /// (3) a [selection predicate](filter.html#selection-predicate);
+        /// or (4) a logical operand that combines (1), (2), or (3).
+        /// </summary>
+        [JsonProperty("filter", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LogicalOperandPredicate? Filter { get; set; }
+
+        /// <summary>
+        /// The field for storing the computed formula value.
+        ///
+        /// The field or fields for storing the computed formula value.
+        /// If `from.fields` is specified, the transform will use the same names for `as`.
+        /// If `from.fields` is not specified, `as` has to be a string and we put the whole object
+        /// into the data under the specified name.
+        ///
+        /// The output fields at which to write the start and end bin values.
+        ///
+        /// The output field to write the timeUnit value.
+        /// </summary>
+        [JsonProperty("as", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Style? As { get; set; }
+
+        /// <summary>
+        /// A [expression](types.html#expression) string. Use the variable `datum` to refer to the
+        /// current data object.
+        /// </summary>
+        [JsonProperty("calculate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Calculate { get; set; }
+
+        /// <summary>
+        /// The default value to use if lookup fails.
+        ///
+        /// __Default value:__ `null`
+        /// </summary>
+        [JsonProperty("default", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Default { get; set; }
+
+        /// <summary>
+        /// Secondary data reference.
+        /// </summary>
+        [JsonProperty("from", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LookupData? From { get; set; }
+
+        /// <summary>
+        /// Key in primary data source.
+        /// </summary>
+        [JsonProperty("lookup", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Lookup { get; set; }
+
+        /// <summary>
+        /// An object indicating bin properties, or simply `true` for using default bin parameters.
+        /// </summary>
+        [JsonProperty("bin", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public Bin? Bin { get; set; }
+
+        /// <summary>
+        /// The data field to bin.
+        ///
+        /// The data field to apply time unit.
+        /// </summary>
+        [JsonProperty("field", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Field { get; set; }
+
+        /// <summary>
+        /// The timeUnit.
+        /// </summary>
+        [JsonProperty("timeUnit", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public TimeUnit? TimeUnit { get; set; }
+
+        /// <summary>
+        /// Array of objects that define fields to aggregate.
+        /// </summary>
+        [JsonProperty("aggregate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public AggregatedFieldDef[]? Aggregate { get; set; }
+
+        /// <summary>
+        /// The data fields to group by. If not specified, a single group containing all data objects
+        /// will be used.
+        /// </summary>
+        [JsonProperty("groupby", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Groupby { get; set; }
+    }
+
+    public partial record AggregatedFieldDef
+    {
+        /// <summary>
+        /// The output field names to use for each aggregated field.
+        /// </summary>
+        [JsonProperty("as", Required = Required.Always)]
+        public string As { get; set; }
+
+        /// <summary>
+        /// The data field for which to compute aggregate function.
+        /// </summary>
+        [JsonProperty("field", Required = Required.Always)]
+        public string Field { get; set; }
+
+        /// <summary>
+        /// The aggregation operations to apply to the fields, such as sum, average or count.
+        /// See the [full list of supported aggregation
+        /// operations](https://vega.github.io/vega-lite/docs/aggregate.html#ops)
+        /// for more information.
+        /// </summary>
+        [JsonProperty("op", Required = Required.Always)]
+        public AggregateOp Op { get; set; }
+    }
+
+    /// <summary>
+    /// Secondary data reference.
+    /// </summary>
+    public partial record LookupData
+    {
+        /// <summary>
+        /// Secondary data source to lookup in.
+        /// </summary>
+        [JsonProperty("data", Required = Required.Always)]
+        public Data Data { get; set; }
+
+        /// <summary>
+        /// Fields in foreign data to lookup.
+        /// If not specified, the entire object is queried.
+        /// </summary>
+        [JsonProperty("fields", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Fields { get; set; }
+
+        /// <summary>
+        /// Key in data to lookup.
+        /// </summary>
+        [JsonProperty("key", Required = Required.Always)]
+        public string Key { get; set; }
+    }
+
+    /// <summary>
+    /// An object that describes what fields should be repeated into views that are laid out as a
+    /// `row` or `column`.
+    /// </summary>
+    public partial record Repeat
+    {
+        /// <summary>
+        /// Horizontal repeated views.
+        /// </summary>
+        [JsonProperty("column", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Column { get; set; }
+
+        /// <summary>
+        /// Vertical repeated views.
+        /// </summary>
+        [JsonProperty("row", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string[]? Row { get; set; }
+    }
+
+    /// <summary>
+    /// The sizing format type. One of `"pad"`, `"fit"` or `"none"`. See the [autosize
+    /// type](https://vega.github.io/vega-lite/docs/size.html#autosize) documentation for
+    /// descriptions of each.
+    ///
+    /// __Default value__: `"pad"`
+    /// </summary>
+    public enum AutosizeType { Pad, Fit, None };
+
+    /// <summary>
+    /// Determines how size calculation should be performed, one of `"content"` or `"padding"`.
+    /// The default setting (`"content"`) interprets the width and height settings as the data
+    /// rectangle (plotting) dimensions, to which padding is then added. In contrast, the
+    /// `"padding"` setting includes the padding within the view size calculations, such that the
+    /// width and height settings indicate the **total** intended size of the view.
+    ///
+    /// __Default value__: `"content"`
+    /// </summary>
+    public enum Contains { Content, Padding };
+
+    /// <summary>
+    /// The horizontal alignment of the text. One of `"left"`, `"right"`, `"center"`.
+    /// </summary>
+    public enum HorizontalAlign { Left, Right, Center };
+
+    /// <summary>
+    /// The vertical alignment of the text. One of `"top"`, `"middle"`, `"bottom"`.
+    ///
+    /// __Default value:__ `"middle"`
+    ///
+    /// Vertical text baseline for title text.
+    /// </summary>
+    public enum VerticalAlign { Top, Middle, Bottom };
+
+    /// <summary>
+    /// The mouse cursor used over the mark. Any valid [CSS cursor
+    /// type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.
+    /// </summary>
+    public enum Cursor { Auto, Default, None, ContextMenu, Help, Pointer, Progress, Wait, Cell, Crosshair, Text, VerticalText, Alias, Copy, Move, NoDrop, NotAllowed, EResize, NResize, NeResize, NwResize, SResize, SeResize, SwResize, WResize, EwResize, NsResize, NeswResize, NwseResize, ColResize, RowResize, AllScroll, ZoomIn, ZoomOut, Grab, Grabbing };
+
+    /// <summary>
+    /// The font style (e.g., `"italic"`).
+    /// </summary>
+    public enum FontStyle { Normal, Italic };
+
+    public enum FontWeight { Normal, Bold };
+
+    /// <summary>
+    /// The line interpolation method to use for line and area marks. One of the following:
+    /// - `"linear"`: piecewise linear segments, as in a polyline.
+    /// - `"linear-closed"`: close the linear segments to form a polygon.
+    /// - `"step"`: alternate between horizontal and vertical segments, as in a step function.
+    /// - `"step-before"`: alternate between vertical and horizontal segments, as in a step
+    /// function.
+    /// - `"step-after"`: alternate between horizontal and vertical segments, as in a step
+    /// function.
+    /// - `"basis"`: a B-spline, with control point duplication on the ends.
+    /// - `"basis-open"`: an open B-spline; may not intersect the start or end.
+    /// - `"basis-closed"`: a closed B-spline, as in a loop.
+    /// - `"cardinal"`: a Cardinal spline, with control point duplication on the ends.
+    /// - `"cardinal-open"`: an open Cardinal spline; may not intersect the start or end, but
+    /// will intersect other control points.
+    /// - `"cardinal-closed"`: a closed Cardinal spline, as in a loop.
+    /// - `"bundle"`: equivalent to basis, except the tension parameter is used to straighten the
+    /// spline.
+    /// - `"monotone"`: cubic interpolation that preserves monotonicity in y.
+    /// </summary>
+    public enum Interpolate { Linear, LinearClosed, Step, StepBefore, StepAfter, Basis, BasisOpen, BasisClosed, Cardinal, CardinalOpen, CardinalClosed, Bundle, Monotone };
+
+    /// <summary>
+    /// The orientation of a non-stacked bar, tick, area, and line charts.
+    /// The value is either horizontal (default) or vertical.
+    /// - For bar, rule and tick, this determines whether the size of the bar and tick
+    /// should be applied to x or y dimension.
+    /// - For area, this property determines the orient property of the Vega output.
+    /// - For line, this property determines the sort order of the points in the line
+    /// if `config.sortLineBy` is not specified.
+    /// For stacked charts, this is always determined by the orientation of the stack;
+    /// therefore explicitly specified value will be ignored.
+    /// </summary>
+    public enum Orient { Horizontal, Vertical };
+
+    public enum LabelOverlapEnum { Parity, Greedy };
+
+    /// <summary>
+    /// Defines how Vega-Lite generates title for fields.  There are three possible styles:
+    ///
+    /// - `"verbal"` (Default) - displays function in a verbal style (e.g., "Sum of field",
+    /// "Year-month of date", "field (binned)").
+    /// - `"function"` - displays function using parentheses and capitalized texts (e.g.,
+    /// "SUM(field)", "YEARMONTH(date)", "BIN(field)").
+    /// - `"plain"` - displays only the field name without functions (e.g., "field", "date",
+    /// "field").
+    /// </summary>
+    public enum FieldTitle { Verbal, Functional, Plain };
+
+    /// <summary>
+    /// Defines how Vega-Lite should handle invalid values (`null` and `NaN`).
+    /// - If set to `"filter"` (default), all data items with null values are filtered.
+    /// - If `null`, all data items are included. In this case, invalid values will be
+    /// interpreted as zeroes.
+    /// </summary>
+    public enum InvalidValues { Filter };
+
+    /// <summary>
+    /// The orientation of the legend, which determines how the legend is positioned within the
+    /// scene. One of "left", "right", "top-left", "top-right", "bottom-left", "bottom-right",
+    /// "none".
+    ///
+    /// __Default value:__ `"right"`
+    /// </summary>
+    public enum LegendOrient { Left, Right, TopLeft, TopRight, BottomLeft, BottomRight, None };
+
+    /// <summary>
+    /// The cartographic projection to use. This value is case-insensitive, for example
+    /// `"albers"` and `"Albers"` indicate the same projection type. You can find all valid
+    /// projection types [in the
+    /// documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).
+    ///
+    /// __Default value:__ `mercator`
+    /// </summary>
+    public enum VgProjectionType { Albers, AlbersUsa, AzimuthalEqualArea, AzimuthalEquidistant, ConicConformal, ConicEqualArea, ConicEquidistant, Equirectangular, Gnomonic, Mercator, Orthographic, Stereographic, TransverseMercator };
+
+    /// <summary>
+    /// Establishes a two-way binding between the interval selection and the scales
+    /// used within the same view. This allows a user to interactively pan and
+    /// zoom the view.
+    /// </summary>
+    public enum BindEnum { Scales };
+
+    /// <summary>
+    /// By default, all data values are considered to lie within an empty selection.
+    /// When set to `none`, empty selections contain no data values.
+    /// </summary>
+    public enum Empty { All, None };
+
+    public enum SingleDefChannel { X, Y, X2, Y2, Row, Column, Size, Shape, Color, Opacity, Text, Tooltip, Href };
+
+    /// <summary>
+    /// With layered and multi-view displays, a strategy that determines how
+    /// selections' data queries are resolved when applied in a filter transform,
+    /// conditional encoding rule, or scale domain.
+    /// </summary>
+    public enum SelectionResolution { Global, Union, Intersect };
+
+    /// <summary>
+    /// Default stack offset for stackable mark.
+    /// </summary>
+    public enum StackOffset { Zero, Center, Normalize };
+
+    /// <summary>
+    /// The anchor position for placing the title. One of `"start"`, `"middle"`, or `"end"`. For
+    /// example, with an orientation of top these anchor positions map to a left-, center-, or
+    /// right-aligned title.
+    ///
+    /// __Default value:__ `"middle"` for [single](spec.html) and [layered](layer.html) views.
+    /// `"start"` for other composite views.
+    ///
+    /// __Note:__ [For now](https://github.com/vega/vega-lite/issues/2875), `anchor` is only
+    /// customizable only for [single](spec.html) and [layered](layer.html) views.  For other
+    /// composite views, `anchor` is always `"start"`.
+    /// </summary>
+    public enum Anchor { Start, Middle, End };
+
+    /// <summary>
+    /// Default title orientation ("top", "bottom", "left", or "right")
+    ///
+    /// The orientation of the title relative to the chart. One of `"top"` (the default),
+    /// `"bottom"`, `"left"`, or `"right"`.
+    ///
+    /// The orientation of the axis. One of `"top"`, `"bottom"`, `"left"` or `"right"`. The
+    /// orientation can be used to further specialize the axis type (e.g., a y axis oriented for
+    /// the right edge of the chart).
+    ///
+    /// __Default value:__ `"bottom"` for x-axes and `"left"` for y-axes.
+    /// </summary>
+    public enum TitleOrient { Top, Bottom, Left, Right };
+
+    public enum ParseEnum { Auto };
+
+    /// <summary>
+    /// Type of input data: `"json"`, `"csv"`, `"tsv"`.
+    /// The default format type is determined by the extension of the file URL.
+    /// If no extension is detected, `"json"` will be used by default.
+    /// </summary>
+    public enum DataFormatType { Csv, Tsv, Json, Topojson };
+
+    /// <summary>
+    /// Aggregation function for the field
+    /// (e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).
+    ///
+    /// __Default value:__ `undefined` (None)
+    ///
+    /// An [aggregate operation](aggregate.html#ops) to perform on the field prior to sorting
+    /// (e.g., `"count"`, `"mean"` and `"median"`).
+    /// This property is required in cases where the sort field and the data reference field do
+    /// not match.
+    /// The input data objects will be aggregated, grouped by the encoded data field.
+    ///
+    /// For a full list of operations, please see the documentation for
+    /// [aggregate](aggregate.html#ops).
+    ///
+    /// The aggregation operations to apply to the fields, such as sum, average or count.
+    /// See the [full list of supported aggregation
+    /// operations](https://vega.github.io/vega-lite/docs/aggregate.html#ops)
+    /// for more information.
+    /// </summary>
+    public enum AggregateOp { Argmax, Argmin, Average, Count, Distinct, Max, Mean, Median, Min, Missing, Q1, Q3, Ci0, Ci1, Stdev, Stdevp, Sum, Valid, Values, Variance, Variancep };
+
+    /// <summary>
+    /// Time unit for the field to be filtered.
+    ///
+    /// time unit for the field to be filtered.
+    ///
+    /// Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.
+    /// or [a temporal field that gets casted as ordinal](type.html#cast).
+    ///
+    /// __Default value:__ `undefined` (None)
+    ///
+    /// The timeUnit.
+    /// </summary>
+    public enum TimeUnit { Year, Quarter, Month, Day, Date, Hours, Minutes, Seconds, Milliseconds, Utcyear, Utcquarter, Utcmonth, Utcday, Utcdate, Utchours, Utcminutes, Utcseconds, Utcmilliseconds, Yearquarter, Yearquartermonth, Yearmonth, Yearmonthdate, Yearmonthdatehours, Yearmonthdatehoursminutes, Yearmonthdatehoursminutesseconds, Quartermonth, Monthdate, Hoursminutes, Hoursminutesseconds, Minutesseconds, Secondsmilliseconds, Utcyearquarter, Utcyearquartermonth, Utcyearmonth, Utcyearmonthdate, Utcyearmonthdatehours, Utcyearmonthdatehoursminutes, Utcyearmonthdatehoursminutesseconds, Utcquartermonth, Utcmonthdate, Utchoursminutes, Utchoursminutesseconds, Utcminutesseconds, Utcsecondsmilliseconds };
+
+    public enum RepeatEnum { Row, Column };
+
+    /// <summary>
+    /// The type of the legend. Use `"symbol"` to create a discrete legend and `"gradient"` for a
+    /// continuous color gradient.
+    ///
+    /// __Default value:__ `"gradient"` for non-binned quantitative fields and temporal fields;
+    /// `"symbol"` otherwise.
+    /// </summary>
+    public enum LegendType { Symbol, Gradient };
+
+    public enum Domain { Unaggregated };
+
+    public enum InterpolateParamsType { Rgb, Cubehelix, CubehelixLong };
+
+    public enum NiceTime { Second, Minute, Hour, Day, Week, Month, Year };
+
+    /// <summary>
+    /// The type of scale.  Vega-Lite supports the following categories of scale types:
+    ///
+    /// 1) [**Continuous Scales**](scale.html#continuous) -- mapping continuous domains to
+    /// continuous output ranges ([`"linear"`](scale.html#linear), [`"pow"`](scale.html#pow),
+    /// [`"sqrt"`](scale.html#sqrt), [`"log"`](scale.html#log), [`"time"`](scale.html#time),
+    /// [`"utc"`](scale.html#utc), [`"sequential"`](scale.html#sequential)).
+    ///
+    /// 2) [**Discrete Scales**](scale.html#discrete) -- mapping discrete domains to discrete
+    /// ([`"ordinal"`](scale.html#ordinal)) or continuous ([`"band"`](scale.html#band) and
+    /// [`"point"`](scale.html#point)) output ranges.
+    ///
+    /// 3) [**Discretizing Scales**](scale.html#discretizing) -- mapping continuous domains to
+    /// discrete output ranges ([`"bin-linear"`](scale.html#bin-linear) and
+    /// [`"bin-ordinal"`](scale.html#bin-ordinal)).
+    ///
+    /// __Default value:__ please see the [scale type table](scale.html#type).
+    /// </summary>
+    public enum ScaleType { Linear, BinLinear, Log, Pow, Sqrt, Time, Utc, Sequential, Ordinal, BinOrdinal, Point, Band };
+
+    public enum SortEnum { Ascending, Descending };
+
+    /// <summary>
+    /// The encoded field's type of measurement (`"quantitative"`, `"temporal"`, `"ordinal"`, or
+    /// `"nominal"`).
+    /// It can also be a geo type (`"latitude"`, `"longitude"`, and `"geojson"`) when a
+    /// [geographic projection](projection.html) is applied.
+    ///
+    /// Constants and utilities for data type
+    /// Data type based on level of measurement
+    /// </summary>
+    public enum ConditionalPredicateValueDefType { Quantitative, Ordinal, Temporal, Nominal, Latitude, Longitude, Geojson };
+
+    /// <summary>
+    /// All types of primitive marks.
+    ///
+    /// The mark type.
+    /// One of `"bar"`, `"circle"`, `"square"`, `"tick"`, `"line"`,
+    /// `"area"`, `"point"`, `"geoshape"`, `"rule"`, and `"text"`.
+    /// </summary>
+    public enum Mark { Area, Bar, Line, Point, Text, Tick, Rect, Rule, Circle, Square, Geoshape };
+
+    public enum ResolveMode { Independent, Shared };
+
+    public enum SelectionDefType { Single, Multi, Interval };
+
+    /// <summary>
+    /// Sets how the visualization size should be determined. If a string, should be one of
+    /// `"pad"`, `"fit"` or `"none"`.
+    /// Object values can additionally specify parameters for content sizing and automatic
+    /// resizing.
+    /// `"fit"` is only supported for single and layered views that don't use `rangeStep`.
+    ///
+    /// __Default value__: `pad`
+    /// </summary>
+    public partial struct Autosize
+    {
+        public AutoSizeParams? AutoSizeParams;
+        public AutosizeType? Enum;
+
+        public static implicit operator Autosize(AutoSizeParams AutoSizeParams) => new Autosize { AutoSizeParams = AutoSizeParams };
+        public static implicit operator Autosize(AutosizeType Enum) => new Autosize { Enum = Enum };
+    }
+
+    /// <summary>
+    /// The font weight (e.g., `"bold"`).
+    ///
+    /// Font weight for title text.
+    /// </summary>
+    public partial struct FontWeightUnion
+    {
+        public double? Double;
+        public FontWeight? Enum;
+
+        public static implicit operator FontWeightUnion(double Double) => new FontWeightUnion { Double = Double };
+        public static implicit operator FontWeightUnion(FontWeight Enum) => new FontWeightUnion { Enum = Enum };
+    }
+
+    /// <summary>
+    /// Indicates if labels should be hidden if they exceed the axis range. If `false `(the
+    /// default) no bounds overlap analysis is performed. If `true`, labels will be hidden if
+    /// they exceed the axis range by more than 1 pixel. If this property is a number, it
+    /// specifies the pixel tolerance: the maximum amount by which a label bounding box may
+    /// exceed the axis range.
+    ///
+    /// __Default value:__ `false`.
+    ///
+    /// Indicates if the first and last axis labels should be aligned flush with the scale range.
+    /// Flush alignment for a horizontal axis will left-align the first label and right-align the
+    /// last label. For vertical axes, bottom and top text baselines are applied instead. If this
+    /// property is a number, it also indicates the number of pixels by which to offset the first
+    /// and last labels; for example, a value of 2 will flush-align the first and last labels and
+    /// also push them 2 pixels outward from the center of the axis. The additional adjustment
+    /// can sometimes help the labels better visually group with corresponding axis ticks.
+    ///
+    /// __Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.
+    /// </summary>
+    public partial struct Label
+    {
+        public bool? Bool;
+        public double? Double;
+
+        public static implicit operator Label(bool Bool) => new Label { Bool = Bool };
+        public static implicit operator Label(double Double) => new Label { Double = Double };
+    }
+
+    public partial struct LabelOverlapUnion
+    {
+        public bool? Bool;
+        public LabelOverlapEnum? Enum;
+
+        public static implicit operator LabelOverlapUnion(bool Bool) => new LabelOverlapUnion { Bool = Bool };
+        public static implicit operator LabelOverlapUnion(LabelOverlapEnum Enum) => new LabelOverlapUnion { Enum = Enum };
+    }
+
+    /// <summary>
+    /// Font weight of the title. (e.g., `"bold"`).
+    ///
+    /// The font weight of the legend title.
+    /// </summary>
+    public partial struct TitleFontWeight
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator TitleFontWeight(double Double) => new TitleFontWeight { Double = Double };
+        public static implicit operator TitleFontWeight(string String) => new TitleFontWeight { String = String };
+    }
+
+    /// <summary>
+    /// The default visualization padding, in pixels, from the edge of the visualization canvas
+    /// to the data rectangle.  If a number, specifies padding for all sides.
+    /// If an object, the value should have the format `{"left": 5, "top": 5, "right": 5,
+    /// "bottom": 5}` to specify padding for each side of the visualization.
+    ///
+    /// __Default value__: `5`
+    /// </summary>
+    public partial struct Padding
+    {
+        public double? Double;
+        public PaddingClass? PaddingClass;
+
+        public static implicit operator Padding(double Double) => new Padding { Double = Double };
+        public static implicit operator Padding(PaddingClass PaddingClass) => new Padding { PaddingClass = PaddingClass };
+    }
+
+    public partial struct RangeConfigValue
+    {
+        public TitleFontWeight[]? AnythingArray;
+        public VgScheme? VgScheme;
+
+        public static implicit operator RangeConfigValue(TitleFontWeight[] AnythingArray) => new RangeConfigValue { AnythingArray = AnythingArray };
+        public static implicit operator RangeConfigValue(VgScheme VgScheme) => new RangeConfigValue { VgScheme = VgScheme };
+    }
+
+    /// <summary>
+    /// When truthy, allows a user to interactively move an interval selection
+    /// back-and-forth. Can be `true`, `false` (to disable panning), or a
+    /// [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)
+    /// which must include a start and end event to trigger continuous panning.
+    ///
+    /// __Default value:__ `true`, which corresponds to
+    /// `[mousedown, window:mouseup] &gt; window:mousemove!` which corresponds to
+    /// clicks and dragging within an interval selection to reposition it.
+    ///
+    /// When truthy, allows a user to interactively resize an interval selection.
+    /// Can be `true`, `false` (to disable zooming), or a [Vega event stream
+    /// definition](https://vega.github.io/vega/docs/event-streams/). Currently,
+    /// only `wheel` events are supported.
+    ///
+    ///
+    /// __Default value:__ `true`, which corresponds to `wheel!`.
+    ///
+    /// Controls whether data values should be toggled or only ever inserted into
+    /// multi selections. Can be `true`, `false` (for insertion only), or a
+    /// [Vega expression](https://vega.github.io/vega/docs/expressions/).
+    ///
+    /// __Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,
+    /// data values are toggled when a user interacts with the shift-key pressed).
+    ///
+    /// See the [toggle transform](toggle.html) documentation for more information.
+    /// </summary>
+    public partial struct Translate
+    {
+        public bool? Bool;
+        public string? String;
+
+        public static implicit operator Translate(bool Bool) => new Translate { Bool = Bool };
+        public static implicit operator Translate(string String) => new Translate { String = String };
+    }
+
+    public partial struct ParseUnion
+    {
+        public Dictionary<string, object>? AnythingMap;
+        public ParseEnum? Enum;
+
+        public static implicit operator ParseUnion(Dictionary<string, object> AnythingMap) => new ParseUnion { AnythingMap = AnythingMap };
+        public static implicit operator ParseUnion(ParseEnum Enum) => new ParseUnion { Enum = Enum };
+    }
+
+    public partial struct ValuesValue
+    {
+        public Dictionary<string, object>? AnythingMap;
+        public bool? Bool;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator ValuesValue(Dictionary<string, object> AnythingMap) => new ValuesValue { AnythingMap = AnythingMap };
+        public static implicit operator ValuesValue(bool Bool) => new ValuesValue { Bool = Bool };
+        public static implicit operator ValuesValue(double Double) => new ValuesValue { Double = Double };
+        public static implicit operator ValuesValue(string String) => new ValuesValue { String = String };
+    }
+
+    /// <summary>
+    /// The full data set, included inline. This can be an array of objects or primitive values
+    /// or a string.
+    /// Arrays of primitive values are ingested as objects with a `data` property. Strings are
+    /// parsed according to the specified format type.
+    /// </summary>
+    public partial struct Values
+    {
+        public ValuesValue[]? AnythingArray;
+        public Dictionary<string, object>? AnythingMap;
+        public string? String;
+
+        public static implicit operator Values(ValuesValue[] AnythingArray) => new Values { AnythingArray = AnythingArray };
+        public static implicit operator Values(Dictionary<string, object> AnythingMap) => new Values { AnythingMap = AnythingMap };
+        public static implicit operator Values(string String) => new Values { String = String };
+    }
+
+    public partial struct Bin
+    {
+        public BinParams? BinParams;
+        public bool? Bool;
+
+        public static implicit operator Bin(BinParams BinParams) => new Bin { BinParams = BinParams };
+        public static implicit operator Bin(bool Bool) => new Bin { Bool = Bool };
+    }
+
+    /// <summary>
+    /// Filter using a selection name.
+    ///
+    /// A [selection name](selection.html), or a series of [composed
+    /// selections](selection.html#compose).
+    /// </summary>
+    public partial struct SelectionOperand
+    {
+        public Selection? Selection;
+        public string? String;
+
+        public static implicit operator SelectionOperand(Selection Selection) => new SelectionOperand { Selection = Selection };
+        public static implicit operator SelectionOperand(string String) => new SelectionOperand { String = String };
+    }
+
+    /// <summary>
+    /// The `filter` property must be one of the predicate definitions:
+    /// (1) an [expression](types.html#expression) string,
+    /// where `datum` can be used to refer to the current data object;
+    /// (2) one of the field predicates: [equal predicate](filter.html#equal-predicate);
+    /// [range predicate](filter.html#range-predicate), [one-of
+    /// predicate](filter.html#one-of-predicate);
+    /// (3) a [selection predicate](filter.html#selection-predicate);
+    /// or (4) a logical operand that combines (1), (2), or (3).
+    /// </summary>
+    public partial struct LogicalOperandPredicate
+    {
+        public Predicate? Predicate;
+        public string? String;
+
+        public static implicit operator LogicalOperandPredicate(Predicate Predicate) => new LogicalOperandPredicate { Predicate = Predicate };
+        public static implicit operator LogicalOperandPredicate(string String) => new LogicalOperandPredicate { String = String };
+    }
+
+    /// <summary>
+    /// Value representing the day of a week.  This can be one of: (1) integer value -- `1`
+    /// represents Monday; (2) case-insensitive day name (e.g., `"Monday"`);  (3)
+    /// case-insensitive, 3-character short day name (e.g., `"Mon"`).   &lt;br/&gt; **Warning:** A
+    /// DateTime definition object with `day`** should not be combined with `year`, `quarter`,
+    /// `month`, or `date`.
+    /// </summary>
+    public partial struct Day
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Day(double Double) => new Day { Double = Double };
+        public static implicit operator Day(string String) => new Day { String = String };
+    }
+
+    /// <summary>
+    /// One of: (1) integer value representing the month from `1`-`12`. `1` represents January;
+    /// (2) case-insensitive month name (e.g., `"January"`);  (3) case-insensitive, 3-character
+    /// short month name (e.g., `"Jan"`).
+    /// </summary>
+    public partial struct Month
+    {
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Month(double Double) => new Month { Double = Double };
+        public static implicit operator Month(string String) => new Month { String = String };
+    }
+
+    /// <summary>
+    /// The value that the field should be equal to.
+    /// </summary>
+    public partial struct Equal
+    {
+        public bool? Bool;
+        public DateTime? DateTime;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator Equal(bool Bool) => new Equal { Bool = Bool };
+        public static implicit operator Equal(DateTime DateTime) => new Equal { DateTime = DateTime };
+        public static implicit operator Equal(double Double) => new Equal { Double = Double };
+        public static implicit operator Equal(string String) => new Equal { String = String };
+    }
+
+    public partial struct RangeElement
+    {
+        public DateTime? DateTime;
+        public double? Double;
+
+        public static implicit operator RangeElement(DateTime DateTime) => new RangeElement { DateTime = DateTime };
+        public static implicit operator RangeElement(double Double) => new RangeElement { Double = Double };
+        public bool IsNull => DateTime == null && Double == null;
+    }
+
+    /// <summary>
+    /// A constant value in visual domain (e.g., `"red"` / "#0099ff" for color, values between
+    /// `0` to `1` for opacity).
+    ///
+    /// A constant value in visual domain.
+    /// </summary>
+    public partial struct ConditionalValueDefValue
+    {
+        public bool? Bool;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator ConditionalValueDefValue(bool Bool) => new ConditionalValueDefValue { Bool = Bool };
+        public static implicit operator ConditionalValueDefValue(double Double) => new ConditionalValueDefValue { Double = Double };
+        public static implicit operator ConditionalValueDefValue(string String) => new ConditionalValueDefValue { String = String };
+    }
+
+    public partial struct Field
+    {
+        public RepeatRef? RepeatRef;
+        public string? String;
+
+        public static implicit operator Field(RepeatRef RepeatRef) => new Field { RepeatRef = RepeatRef };
+        public static implicit operator Field(string String) => new Field { String = String };
+    }
+
+    public partial struct LegendValue
+    {
+        public DateTime? DateTime;
+        public double? Double;
+        public string? String;
+
+        public static implicit operator LegendValue(DateTime DateTime) => new LegendValue { DateTime = DateTime };
+        public static implicit operator LegendValue(double Double) => new LegendValue { Double = Double };
+        public static implicit operator LegendValue(string String) => new LegendValue { String = String };
+    }
+
+    /// <summary>
+    /// Customized domain values.
+    ///
+    /// For _quantitative_ fields, `domain` can take the form of a two-element array with minimum
+    /// and maximum values.  [Piecewise scales](scale.html#piecewise) can be created by providing
+    /// a `domain` with more than two entries.
+    /// If the input field is aggregated, `domain` can also be a string value `"unaggregated"`,
+    /// indicating that the domain should include the raw data values prior to the aggregation.
+    ///
+    /// For _temporal_ fields, `domain` can be a two-element array minimum and maximum values, in
+    /// the form of either timestamps or the [DateTime definition objects](types.html#datetime).
+    ///
+    /// For _ordinal_ and _nominal_ fields, `domain` can be an array that lists valid input
+    /// values.
+    ///
+    /// The `selection` property can be used to [interactively
+    /// determine](selection.html#scale-domains) the scale domain.
+    /// </summary>
+    public partial struct DomainUnion
+    {
+        public Equal[]? AnythingArray;
+        public DomainClass? DomainClass;
+        public Domain? Enum;
+
+        public static implicit operator DomainUnion(Equal[] AnythingArray) => new DomainUnion { AnythingArray = AnythingArray };
+        public static implicit operator DomainUnion(DomainClass DomainClass) => new DomainUnion { DomainClass = DomainClass };
+        public static implicit operator DomainUnion(Domain Enum) => new DomainUnion { Enum = Enum };
+    }
+
+    /// <summary>
+    /// The interpolation method for range values. By default, a general interpolator for
+    /// numbers, dates, strings and colors (in RGB space) is used. For color ranges, this
+    /// property allows interpolation in alternative color spaces. Legal values include `rgb`,
+    /// `hsl`, `hsl-long`, `lab`, `hcl`, `hcl-long`, `cubehelix` and `cubehelix-long` ('-long'
+    /// variants use longer paths in polar coordinate spaces). If object-valued, this property
+    /// accepts an object with a string-valued _type_ property and an optional numeric _gamma_
+    /// property applicable to rgb and cubehelix interpolators. For more, see the [d3-interpolate
+    /// documentation](https://github.com/d3/d3-interpolate).
+    ///
+    /// __Note:__ Sequential scales do not support `interpolate` as they have a fixed
+    /// interpolator.  Since Vega-Lite uses sequential scales for quantitative fields by default,
+    /// you have to set the scale `type` to other quantitative scale type such as `"linear"` to
+    /// customize `interpolate`.
+    /// </summary>
+    public partial struct InterpolateUnion
+    {
+        public Interpolate? Enum;
+        public InterpolateParams? InterpolateParams;
+
+        public static implicit operator InterpolateUnion(Interpolate Enum) => new InterpolateUnion { Enum = Enum };
+        public static implicit operator InterpolateUnion(InterpolateParams InterpolateParams) => new InterpolateUnion { InterpolateParams = InterpolateParams };
+    }
+
+    /// <summary>
+    /// Extending the domain so that it starts and ends on nice round values. This method
+    /// typically modifies the scale’s domain, and may only extend the bounds to the nearest
+    /// round value. Nicing is useful if the domain is computed from data and may be irregular.
+    /// For example, for a domain of _[0.201479…, 0.996679…]_, a nice domain might be _[0.2,
+    /// 1.0]_.
+    ///
+    /// For quantitative scales such as linear, `nice` can be either a boolean flag or a number.
+    /// If `nice` is a number, it will represent a desired tick count. This allows greater
+    /// control over the step size used to extend the bounds, guaranteeing that the returned
+    /// ticks will exactly cover the domain.
+    ///
+    /// For temporal fields with time and utc scales, the `nice` value can be a string indicating
+    /// the desired time interval. Legal values are `"millisecond"`, `"second"`, `"minute"`,
+    /// `"hour"`, `"day"`, `"week"`, `"month"`, and `"year"`. Alternatively, `time` and `utc`
+    /// scales can accept an object-valued interval specifier of the form `{"interval": "month",
+    /// "step": 3}`, which includes a desired number of interval steps. Here, the domain would
+    /// snap to quarter (Jan, Apr, Jul, Oct) boundaries.
+    ///
+    /// __Default value:__ `true` for unbinned _quantitative_ fields; `false` otherwise.
+    /// </summary>
+    public partial struct NiceUnion
+    {
+        public bool? Bool;
+        public double? Double;
+        public NiceTime? Enum;
+        public NiceClass? NiceClass;
+
+        public static implicit operator NiceUnion(bool Bool) => new NiceUnion { Bool = Bool };
+        public static implicit operator NiceUnion(double Double) => new NiceUnion { Double = Double };
+        public static implicit operator NiceUnion(NiceTime Enum) => new NiceUnion { Enum = Enum };
+        public static implicit operator NiceUnion(NiceClass NiceClass) => new NiceUnion { NiceClass = NiceClass };
+    }
+
+    /// <summary>
+    /// The range of the scale. One of:
+    ///
+    /// - A string indicating a [pre-defined named scale range](scale.html#range-config) (e.g.,
+    /// example, `"symbol"`, or `"diverging"`).
+    ///
+    /// - For [continuous scales](scale.html#continuous), two-element array indicating  minimum
+    /// and maximum values, or an array with more than two entries for specifying a [piecewise
+    /// scale](scale.html#piecewise).
+    ///
+    /// - For [discrete](scale.html#discrete) and [discretizing](scale.html#discretizing) scales,
+    /// an array of desired output values.
+    ///
+    /// __Notes:__
+    ///
+    /// 1) For [sequential](scale.html#sequential), [ordinal](scale.html#ordinal), and
+    /// discretizing color scales, you can also specify a color [`scheme`](scale.html#scheme)
+    /// instead of `range`.
+    ///
+    /// 2) Any directly specified `range` for `x` and `y` channels will be ignored. Range can be
+    /// customized via the view's corresponding [size](size.html) (`width` and `height`) or via
+    /// [range steps and paddings properties](#range-step) for [band](#band) and [point](#point)
+    /// scales.
+    /// </summary>
+    public partial struct ScaleRange
+    {
+        public TitleFontWeight[]? AnythingArray;
+        public string? String;
+
+        public static implicit operator ScaleRange(TitleFontWeight[] AnythingArray) => new ScaleRange { AnythingArray = AnythingArray };
+        public static implicit operator ScaleRange(string String) => new ScaleRange { String = String };
+    }
+
+    /// <summary>
+    /// A string indicating a color [scheme](scale.html#scheme) name (e.g., `"category10"` or
+    /// `"viridis"`) or a [scheme parameter object](scale.html#scheme-params).
+    ///
+    /// Discrete color schemes may be used with [discrete](scale.html#discrete) or
+    /// [discretizing](scale.html#discretizing) scales. Continuous color schemes are intended for
+    /// use with [sequential](scales.html#sequential) scales.
+    ///
+    /// For the full list of supported scheme, please refer to the [Vega
+    /// Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.
+    /// </summary>
+    public partial struct Scheme
+    {
+        public SchemeParams? SchemeParams;
+        public string? String;
+
+        public static implicit operator Scheme(SchemeParams SchemeParams) => new Scheme { SchemeParams = SchemeParams };
+        public static implicit operator Scheme(string String) => new Scheme { String = String };
+    }
+
+    public partial struct SortUnion
+    {
+        public SortEnum? Enum;
+        public SortField? SortField;
+
+        public static implicit operator SortUnion(SortEnum Enum) => new SortUnion { Enum = Enum };
+        public static implicit operator SortUnion(SortField SortField) => new SortUnion { SortField = SortField };
+        public bool IsNull => SortField == null && Enum == null;
+    }
+
+    public partial struct ColorCondition
+    {
+        public ConditionalPredicateMarkPropFieldDefClass? ConditionalPredicateMarkPropFieldDefClass;
+        public ConditionalValueDef[]? ConditionalValueDefArray;
+
+        public static implicit operator ColorCondition(ConditionalPredicateMarkPropFieldDefClass ConditionalPredicateMarkPropFieldDefClass) => new ColorCondition { ConditionalPredicateMarkPropFieldDefClass = ConditionalPredicateMarkPropFieldDefClass };
+        public static implicit operator ColorCondition(ConditionalValueDef[] ConditionalValueDefArray) => new ColorCondition { ConditionalValueDefArray = ConditionalValueDefArray };
+    }
+
+    public partial struct Detail
+    {
+        public FieldDef? FieldDef;
+        public FieldDef[]? FieldDefArray;
+
+        public static implicit operator Detail(FieldDef FieldDef) => new Detail { FieldDef = FieldDef };
+        public static implicit operator Detail(FieldDef[] FieldDefArray) => new Detail { FieldDefArray = FieldDefArray };
+    }
+
+    public partial struct HrefCondition
+    {
+        public ConditionalPredicateFieldDefClass? ConditionalPredicateFieldDefClass;
+        public ConditionalValueDef[]? ConditionalValueDefArray;
+
+        public static implicit operator HrefCondition(ConditionalPredicateFieldDefClass ConditionalPredicateFieldDefClass) => new HrefCondition { ConditionalPredicateFieldDefClass = ConditionalPredicateFieldDefClass };
+        public static implicit operator HrefCondition(ConditionalValueDef[] ConditionalValueDefArray) => new HrefCondition { ConditionalValueDefArray = ConditionalValueDefArray };
+    }
+
+    public partial struct Order
+    {
+        public OrderFieldDef? OrderFieldDef;
+        public OrderFieldDef[]? OrderFieldDefArray;
+
+        public static implicit operator Order(OrderFieldDef OrderFieldDef) => new Order { OrderFieldDef = OrderFieldDef };
+        public static implicit operator Order(OrderFieldDef[] OrderFieldDefArray) => new Order { OrderFieldDefArray = OrderFieldDefArray };
+    }
+
+    public partial struct TextCondition
+    {
+        public ConditionalPredicateTextFieldDefClass? ConditionalPredicateTextFieldDefClass;
+        public ConditionalValueDef[]? ConditionalValueDefArray;
+
+        public static implicit operator TextCondition(ConditionalPredicateTextFieldDefClass ConditionalPredicateTextFieldDefClass) => new TextCondition { ConditionalPredicateTextFieldDefClass = ConditionalPredicateTextFieldDefClass };
+        public static implicit operator TextCondition(ConditionalValueDef[] ConditionalValueDefArray) => new TextCondition { ConditionalValueDefArray = ConditionalValueDefArray };
+    }
+
+    public partial struct AxisValue
+    {
+        public DateTime? DateTime;
+        public double? Double;
+
+        public static implicit operator AxisValue(DateTime DateTime) => new AxisValue { DateTime = DateTime };
+        public static implicit operator AxisValue(double Double) => new AxisValue { Double = Double };
+    }
+
+    /// <summary>
+    /// A string or array of strings indicating the name of custom styles to apply to the mark. A
+    /// style is a named collection of mark property defaults defined within the [style
+    /// configuration](mark.html#style-config). If style is an array, later styles will override
+    /// earlier styles. Any [mark properties](encoding.html#mark-prop) explicitly defined within
+    /// the `encoding` will override a style default.
+    ///
+    /// __Default value:__ The mark's name.  For example, a bar mark will have style `"bar"` by
+    /// default.
+    /// __Note:__ Any specified style will augment the default style. For example, a bar mark
+    /// with `"style": "foo"` will receive from `config.style.bar` and `config.style.foo` (the
+    /// specified style `"foo"` has higher precedence).
+    ///
+    /// A [mark style property](config.html#style) to apply to the title text mark.
+    ///
+    /// __Default value:__ `"group-title"`.
+    /// </summary>
+    public partial struct Style
+    {
+        public string? String;
+        public string[]? StringArray;
+
+        public static implicit operator Style(string String) => new Style { String = String };
+        public static implicit operator Style(string[] StringArray) => new Style { StringArray = StringArray };
+    }
+
+    /// <summary>
+    /// A string describing the mark type (one of `"bar"`, `"circle"`, `"square"`, `"tick"`,
+    /// `"line"`,
+    /// * `"area"`, `"point"`, `"rule"`, `"geoshape"`, and `"text"`) or a [mark definition
+    /// object](mark.html#mark-def).
+    /// </summary>
+    public partial struct AnyMark
+    {
+        public Mark? Enum;
+        public MarkDef? MarkDef;
+
+        public static implicit operator AnyMark(Mark Enum) => new AnyMark { Enum = Enum };
+        public static implicit operator AnyMark(MarkDef MarkDef) => new AnyMark { MarkDef = MarkDef };
+    }
+
+    public partial struct BindUnion
+    {
+        public BindEnum? Enum;
+        public Dictionary<string, VgBinding>? VgBindingMap;
+
+        public static implicit operator BindUnion(BindEnum Enum) => new BindUnion { Enum = Enum };
+        public static implicit operator BindUnion(Dictionary<string, VgBinding> VgBindingMap) => new BindUnion { VgBindingMap = VgBindingMap };
+    }
+
+    public partial struct Title
+    {
+        public string? String;
+        public TitleParams? TitleParams;
+
+        public static implicit operator Title(string String) => new Title { String = String };
+        public static implicit operator Title(TitleParams TitleParams) => new Title { TitleParams = TitleParams };
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                AutosizeConverter.Singleton,
+                ContainsConverter.Singleton,
+                AutosizeTypeConverter.Singleton,
+                HorizontalAlignConverter.Singleton,
+                VerticalAlignConverter.Singleton,
+                CursorConverter.Singleton,
+                FontStyleConverter.Singleton,
+                FontWeightUnionConverter.Singleton,
+                FontWeightConverter.Singleton,
+                InterpolateConverter.Singleton,
+                OrientConverter.Singleton,
+                LabelConverter.Singleton,
+                LabelOverlapUnionConverter.Singleton,
+                LabelOverlapEnumConverter.Singleton,
+                TitleFontWeightConverter.Singleton,
+                FieldTitleConverter.Singleton,
+                InvalidValuesConverter.Singleton,
+                LegendOrientConverter.Singleton,
+                PaddingConverter.Singleton,
+                VgProjectionTypeConverter.Singleton,
+                RangeConfigValueConverter.Singleton,
+                BindEnumConverter.Singleton,
+                EmptyConverter.Singleton,
+                SingleDefChannelConverter.Singleton,
+                SelectionResolutionConverter.Singleton,
+                TranslateConverter.Singleton,
+                StackOffsetConverter.Singleton,
+                AnchorConverter.Singleton,
+                TitleOrientConverter.Singleton,
+                ParseUnionConverter.Singleton,
+                ParseEnumConverter.Singleton,
+                DataFormatTypeConverter.Singleton,
+                ValuesConverter.Singleton,
+                ValuesValueConverter.Singleton,
+                AggregateOpConverter.Singleton,
+                BinConverter.Singleton,
+                ColorConditionConverter.Singleton,
+                SelectionOperandConverter.Singleton,
+                LogicalOperandPredicateConverter.Singleton,
+                EqualConverter.Singleton,
+                DayConverter.Singleton,
+                MonthConverter.Singleton,
+                RangeElementConverter.Singleton,
+                TimeUnitConverter.Singleton,
+                ConditionalValueDefValueConverter.Singleton,
+                FieldConverter.Singleton,
+                RepeatEnumConverter.Singleton,
+                LegendTypeConverter.Singleton,
+                LegendValueConverter.Singleton,
+                DomainUnionConverter.Singleton,
+                DomainConverter.Singleton,
+                InterpolateUnionConverter.Singleton,
+                InterpolateParamsTypeConverter.Singleton,
+                NiceUnionConverter.Singleton,
+                NiceTimeConverter.Singleton,
+                ScaleRangeConverter.Singleton,
+                SchemeConverter.Singleton,
+                ScaleTypeConverter.Singleton,
+                SortUnionConverter.Singleton,
+                SortEnumConverter.Singleton,
+                ConditionalPredicateValueDefTypeConverter.Singleton,
+                DetailConverter.Singleton,
+                HrefConditionConverter.Singleton,
+                OrderConverter.Singleton,
+                TextConditionConverter.Singleton,
+                AxisValueConverter.Singleton,
+                AnyMarkConverter.Singleton,
+                StyleConverter.Singleton,
+                MarkConverter.Singleton,
+                ResolveModeConverter.Singleton,
+                BindUnionConverter.Singleton,
+                SelectionDefTypeConverter.Singleton,
+                TitleConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class AutosizeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Autosize) || t == typeof(Autosize?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    switch (stringValue)
+                    {
+                        case "pad":
+                            return new Autosize { Enum = AutosizeType.Pad };
+                        case "fit":
+                            return new Autosize { Enum = AutosizeType.Fit };
+                        case "none":
+                            return new Autosize { Enum = AutosizeType.None };
+                    }
+                    break;
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<AutoSizeParams>(reader);
+                    return new Autosize { AutoSizeParams = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Autosize");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Autosize)untypedValue;
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case AutosizeType.Pad:
+                        serializer.Serialize(writer, "pad");
+                        return;
+                    case AutosizeType.Fit:
+                        serializer.Serialize(writer, "fit");
+                        return;
+                    case AutosizeType.None:
+                        serializer.Serialize(writer, "none");
+                        return;
+                }
+            }
+            if (value.AutoSizeParams != null)
+            {
+                serializer.Serialize(writer, value.AutoSizeParams);
+                return;
+            }
+            throw new Exception("Cannot marshal type Autosize");
+        }
+
+        public static readonly AutosizeConverter Singleton = new AutosizeConverter();
+    }
+
+    internal class ContainsConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Contains) || t == typeof(Contains?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "content":
+                    return Contains.Content;
+                case "padding":
+                    return Contains.Padding;
+            }
+            throw new Exception("Cannot unmarshal type Contains");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Contains)untypedValue;
+            switch (value)
+            {
+                case Contains.Content:
+                    serializer.Serialize(writer, "content");
+                    return;
+                case Contains.Padding:
+                    serializer.Serialize(writer, "padding");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Contains");
+        }
+
+        public static readonly ContainsConverter Singleton = new ContainsConverter();
+    }
+
+    internal class AutosizeTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AutosizeType) || t == typeof(AutosizeType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "pad":
+                    return AutosizeType.Pad;
+                case "fit":
+                    return AutosizeType.Fit;
+                case "none":
+                    return AutosizeType.None;
+            }
+            throw new Exception("Cannot unmarshal type AutosizeType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (AutosizeType)untypedValue;
+            switch (value)
+            {
+                case AutosizeType.Pad:
+                    serializer.Serialize(writer, "pad");
+                    return;
+                case AutosizeType.Fit:
+                    serializer.Serialize(writer, "fit");
+                    return;
+                case AutosizeType.None:
+                    serializer.Serialize(writer, "none");
+                    return;
+            }
+            throw new Exception("Cannot marshal type AutosizeType");
+        }
+
+        public static readonly AutosizeTypeConverter Singleton = new AutosizeTypeConverter();
+    }
+
+    internal class HorizontalAlignConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(HorizontalAlign) || t == typeof(HorizontalAlign?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "left":
+                    return HorizontalAlign.Left;
+                case "right":
+                    return HorizontalAlign.Right;
+                case "center":
+                    return HorizontalAlign.Center;
+            }
+            throw new Exception("Cannot unmarshal type HorizontalAlign");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (HorizontalAlign)untypedValue;
+            switch (value)
+            {
+                case HorizontalAlign.Left:
+                    serializer.Serialize(writer, "left");
+                    return;
+                case HorizontalAlign.Right:
+                    serializer.Serialize(writer, "right");
+                    return;
+                case HorizontalAlign.Center:
+                    serializer.Serialize(writer, "center");
+                    return;
+            }
+            throw new Exception("Cannot marshal type HorizontalAlign");
+        }
+
+        public static readonly HorizontalAlignConverter Singleton = new HorizontalAlignConverter();
+    }
+
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 0 && value <= 360)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 0 && value <= 360)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
+    internal class VerticalAlignConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(VerticalAlign) || t == typeof(VerticalAlign?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "top":
+                    return VerticalAlign.Top;
+                case "middle":
+                    return VerticalAlign.Middle;
+                case "bottom":
+                    return VerticalAlign.Bottom;
+            }
+            throw new Exception("Cannot unmarshal type VerticalAlign");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (VerticalAlign)untypedValue;
+            switch (value)
+            {
+                case VerticalAlign.Top:
+                    serializer.Serialize(writer, "top");
+                    return;
+                case VerticalAlign.Middle:
+                    serializer.Serialize(writer, "middle");
+                    return;
+                case VerticalAlign.Bottom:
+                    serializer.Serialize(writer, "bottom");
+                    return;
+            }
+            throw new Exception("Cannot marshal type VerticalAlign");
+        }
+
+        public static readonly VerticalAlignConverter Singleton = new VerticalAlignConverter();
+    }
+
+    internal class CursorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Cursor) || t == typeof(Cursor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "auto":
+                    return Cursor.Auto;
+                case "default":
+                    return Cursor.Default;
+                case "none":
+                    return Cursor.None;
+                case "context-menu":
+                    return Cursor.ContextMenu;
+                case "help":
+                    return Cursor.Help;
+                case "pointer":
+                    return Cursor.Pointer;
+                case "progress":
+                    return Cursor.Progress;
+                case "wait":
+                    return Cursor.Wait;
+                case "cell":
+                    return Cursor.Cell;
+                case "crosshair":
+                    return Cursor.Crosshair;
+                case "text":
+                    return Cursor.Text;
+                case "vertical-text":
+                    return Cursor.VerticalText;
+                case "alias":
+                    return Cursor.Alias;
+                case "copy":
+                    return Cursor.Copy;
+                case "move":
+                    return Cursor.Move;
+                case "no-drop":
+                    return Cursor.NoDrop;
+                case "not-allowed":
+                    return Cursor.NotAllowed;
+                case "e-resize":
+                    return Cursor.EResize;
+                case "n-resize":
+                    return Cursor.NResize;
+                case "ne-resize":
+                    return Cursor.NeResize;
+                case "nw-resize":
+                    return Cursor.NwResize;
+                case "s-resize":
+                    return Cursor.SResize;
+                case "se-resize":
+                    return Cursor.SeResize;
+                case "sw-resize":
+                    return Cursor.SwResize;
+                case "w-resize":
+                    return Cursor.WResize;
+                case "ew-resize":
+                    return Cursor.EwResize;
+                case "ns-resize":
+                    return Cursor.NsResize;
+                case "nesw-resize":
+                    return Cursor.NeswResize;
+                case "nwse-resize":
+                    return Cursor.NwseResize;
+                case "col-resize":
+                    return Cursor.ColResize;
+                case "row-resize":
+                    return Cursor.RowResize;
+                case "all-scroll":
+                    return Cursor.AllScroll;
+                case "zoom-in":
+                    return Cursor.ZoomIn;
+                case "zoom-out":
+                    return Cursor.ZoomOut;
+                case "grab":
+                    return Cursor.Grab;
+                case "grabbing":
+                    return Cursor.Grabbing;
+            }
+            throw new Exception("Cannot unmarshal type Cursor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Cursor)untypedValue;
+            switch (value)
+            {
+                case Cursor.Auto:
+                    serializer.Serialize(writer, "auto");
+                    return;
+                case Cursor.Default:
+                    serializer.Serialize(writer, "default");
+                    return;
+                case Cursor.None:
+                    serializer.Serialize(writer, "none");
+                    return;
+                case Cursor.ContextMenu:
+                    serializer.Serialize(writer, "context-menu");
+                    return;
+                case Cursor.Help:
+                    serializer.Serialize(writer, "help");
+                    return;
+                case Cursor.Pointer:
+                    serializer.Serialize(writer, "pointer");
+                    return;
+                case Cursor.Progress:
+                    serializer.Serialize(writer, "progress");
+                    return;
+                case Cursor.Wait:
+                    serializer.Serialize(writer, "wait");
+                    return;
+                case Cursor.Cell:
+                    serializer.Serialize(writer, "cell");
+                    return;
+                case Cursor.Crosshair:
+                    serializer.Serialize(writer, "crosshair");
+                    return;
+                case Cursor.Text:
+                    serializer.Serialize(writer, "text");
+                    return;
+                case Cursor.VerticalText:
+                    serializer.Serialize(writer, "vertical-text");
+                    return;
+                case Cursor.Alias:
+                    serializer.Serialize(writer, "alias");
+                    return;
+                case Cursor.Copy:
+                    serializer.Serialize(writer, "copy");
+                    return;
+                case Cursor.Move:
+                    serializer.Serialize(writer, "move");
+                    return;
+                case Cursor.NoDrop:
+                    serializer.Serialize(writer, "no-drop");
+                    return;
+                case Cursor.NotAllowed:
+                    serializer.Serialize(writer, "not-allowed");
+                    return;
+                case Cursor.EResize:
+                    serializer.Serialize(writer, "e-resize");
+                    return;
+                case Cursor.NResize:
+                    serializer.Serialize(writer, "n-resize");
+                    return;
+                case Cursor.NeResize:
+                    serializer.Serialize(writer, "ne-resize");
+                    return;
+                case Cursor.NwResize:
+                    serializer.Serialize(writer, "nw-resize");
+                    return;
+                case Cursor.SResize:
+                    serializer.Serialize(writer, "s-resize");
+                    return;
+                case Cursor.SeResize:
+                    serializer.Serialize(writer, "se-resize");
+                    return;
+                case Cursor.SwResize:
+                    serializer.Serialize(writer, "sw-resize");
+                    return;
+                case Cursor.WResize:
+                    serializer.Serialize(writer, "w-resize");
+                    return;
+                case Cursor.EwResize:
+                    serializer.Serialize(writer, "ew-resize");
+                    return;
+                case Cursor.NsResize:
+                    serializer.Serialize(writer, "ns-resize");
+                    return;
+                case Cursor.NeswResize:
+                    serializer.Serialize(writer, "nesw-resize");
+                    return;
+                case Cursor.NwseResize:
+                    serializer.Serialize(writer, "nwse-resize");
+                    return;
+                case Cursor.ColResize:
+                    serializer.Serialize(writer, "col-resize");
+                    return;
+                case Cursor.RowResize:
+                    serializer.Serialize(writer, "row-resize");
+                    return;
+                case Cursor.AllScroll:
+                    serializer.Serialize(writer, "all-scroll");
+                    return;
+                case Cursor.ZoomIn:
+                    serializer.Serialize(writer, "zoom-in");
+                    return;
+                case Cursor.ZoomOut:
+                    serializer.Serialize(writer, "zoom-out");
+                    return;
+                case Cursor.Grab:
+                    serializer.Serialize(writer, "grab");
+                    return;
+                case Cursor.Grabbing:
+                    serializer.Serialize(writer, "grabbing");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Cursor");
+        }
+
+        public static readonly CursorConverter Singleton = new CursorConverter();
+    }
+
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 0 && value <= 1)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 0 && value <= 1)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
+    }
+
+    internal class TentacledMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 0)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 0)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly TentacledMinMaxValueCheckConverter Singleton = new TentacledMinMaxValueCheckConverter();
+    }
+
+    internal class FontStyleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FontStyle) || t == typeof(FontStyle?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "normal":
+                    return FontStyle.Normal;
+                case "italic":
+                    return FontStyle.Italic;
+            }
+            throw new Exception("Cannot unmarshal type FontStyle");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FontStyle)untypedValue;
+            switch (value)
+            {
+                case FontStyle.Normal:
+                    serializer.Serialize(writer, "normal");
+                    return;
+                case FontStyle.Italic:
+                    serializer.Serialize(writer, "italic");
+                    return;
+            }
+            throw new Exception("Cannot marshal type FontStyle");
+        }
+
+        public static readonly FontStyleConverter Singleton = new FontStyleConverter();
+    }
+
+    internal class FontWeightUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FontWeightUnion) || t == typeof(FontWeightUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new FontWeightUnion { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    switch (stringValue)
+                    {
+                        case "normal":
+                            return new FontWeightUnion { Enum = FontWeight.Normal };
+                        case "bold":
+                            return new FontWeightUnion { Enum = FontWeight.Bold };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type FontWeightUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (FontWeightUnion)untypedValue;
+            if (value.Double != null)
+            {
+                var converter = StickyMinMaxValueCheckConverter.Singleton;
+                converter.WriteJson(writer, value.Double.Value, serializer);
+                return;
+            }
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case FontWeight.Normal:
+                        serializer.Serialize(writer, "normal");
+                        return;
+                    case FontWeight.Bold:
+                        serializer.Serialize(writer, "bold");
+                        return;
+                }
+            }
+            throw new Exception("Cannot marshal type FontWeightUnion");
+        }
+
+        public static readonly FontWeightUnionConverter Singleton = new FontWeightUnionConverter();
+    }
+
+    internal class StickyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 100 && value <= 900)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 100 && value <= 900)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly StickyMinMaxValueCheckConverter Singleton = new StickyMinMaxValueCheckConverter();
+    }
+
+    internal class FontWeightConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FontWeight) || t == typeof(FontWeight?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "normal":
+                    return FontWeight.Normal;
+                case "bold":
+                    return FontWeight.Bold;
+            }
+            throw new Exception("Cannot unmarshal type FontWeight");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FontWeight)untypedValue;
+            switch (value)
+            {
+                case FontWeight.Normal:
+                    serializer.Serialize(writer, "normal");
+                    return;
+                case FontWeight.Bold:
+                    serializer.Serialize(writer, "bold");
+                    return;
+            }
+            throw new Exception("Cannot marshal type FontWeight");
+        }
+
+        public static readonly FontWeightConverter Singleton = new FontWeightConverter();
+    }
+
+    internal class InterpolateConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Interpolate) || t == typeof(Interpolate?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "linear":
+                    return Interpolate.Linear;
+                case "linear-closed":
+                    return Interpolate.LinearClosed;
+                case "step":
+                    return Interpolate.Step;
+                case "step-before":
+                    return Interpolate.StepBefore;
+                case "step-after":
+                    return Interpolate.StepAfter;
+                case "basis":
+                    return Interpolate.Basis;
+                case "basis-open":
+                    return Interpolate.BasisOpen;
+                case "basis-closed":
+                    return Interpolate.BasisClosed;
+                case "cardinal":
+                    return Interpolate.Cardinal;
+                case "cardinal-open":
+                    return Interpolate.CardinalOpen;
+                case "cardinal-closed":
+                    return Interpolate.CardinalClosed;
+                case "bundle":
+                    return Interpolate.Bundle;
+                case "monotone":
+                    return Interpolate.Monotone;
+            }
+            throw new Exception("Cannot unmarshal type Interpolate");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Interpolate)untypedValue;
+            switch (value)
+            {
+                case Interpolate.Linear:
+                    serializer.Serialize(writer, "linear");
+                    return;
+                case Interpolate.LinearClosed:
+                    serializer.Serialize(writer, "linear-closed");
+                    return;
+                case Interpolate.Step:
+                    serializer.Serialize(writer, "step");
+                    return;
+                case Interpolate.StepBefore:
+                    serializer.Serialize(writer, "step-before");
+                    return;
+                case Interpolate.StepAfter:
+                    serializer.Serialize(writer, "step-after");
+                    return;
+                case Interpolate.Basis:
+                    serializer.Serialize(writer, "basis");
+                    return;
+                case Interpolate.BasisOpen:
+                    serializer.Serialize(writer, "basis-open");
+                    return;
+                case Interpolate.BasisClosed:
+                    serializer.Serialize(writer, "basis-closed");
+                    return;
+                case Interpolate.Cardinal:
+                    serializer.Serialize(writer, "cardinal");
+                    return;
+                case Interpolate.CardinalOpen:
+                    serializer.Serialize(writer, "cardinal-open");
+                    return;
+                case Interpolate.CardinalClosed:
+                    serializer.Serialize(writer, "cardinal-closed");
+                    return;
+                case Interpolate.Bundle:
+                    serializer.Serialize(writer, "bundle");
+                    return;
+                case Interpolate.Monotone:
+                    serializer.Serialize(writer, "monotone");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Interpolate");
+        }
+
+        public static readonly InterpolateConverter Singleton = new InterpolateConverter();
+    }
+
+    internal class OrientConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Orient) || t == typeof(Orient?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "horizontal":
+                    return Orient.Horizontal;
+                case "vertical":
+                    return Orient.Vertical;
+            }
+            throw new Exception("Cannot unmarshal type Orient");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Orient)untypedValue;
+            switch (value)
+            {
+                case Orient.Horizontal:
+                    serializer.Serialize(writer, "horizontal");
+                    return;
+                case Orient.Vertical:
+                    serializer.Serialize(writer, "vertical");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Orient");
+        }
+
+        public static readonly OrientConverter Singleton = new OrientConverter();
+    }
+
+    internal class IndigoMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= -360 && value <= 360)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= -360 && value <= 360)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly IndigoMinMaxValueCheckConverter Singleton = new IndigoMinMaxValueCheckConverter();
+    }
+
+    internal class LabelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Label) || t == typeof(Label?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Label { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Label { Bool = boolValue };
+            }
+            throw new Exception("Cannot unmarshal type Label");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Label)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            throw new Exception("Cannot marshal type Label");
+        }
+
+        public static readonly LabelConverter Singleton = new LabelConverter();
+    }
+
+    internal class LabelOverlapUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LabelOverlapUnion) || t == typeof(LabelOverlapUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new LabelOverlapUnion { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    switch (stringValue)
+                    {
+                        case "parity":
+                            return new LabelOverlapUnion { Enum = LabelOverlapEnum.Parity };
+                        case "greedy":
+                            return new LabelOverlapUnion { Enum = LabelOverlapEnum.Greedy };
+                    }
+                    break;
+            }
+            throw new Exception("Cannot unmarshal type LabelOverlapUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LabelOverlapUnion)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case LabelOverlapEnum.Parity:
+                        serializer.Serialize(writer, "parity");
+                        return;
+                    case LabelOverlapEnum.Greedy:
+                        serializer.Serialize(writer, "greedy");
+                        return;
+                }
+            }
+            throw new Exception("Cannot marshal type LabelOverlapUnion");
+        }
+
+        public static readonly LabelOverlapUnionConverter Singleton = new LabelOverlapUnionConverter();
+    }
+
+    internal class LabelOverlapEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LabelOverlapEnum) || t == typeof(LabelOverlapEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "parity":
+                    return LabelOverlapEnum.Parity;
+                case "greedy":
+                    return LabelOverlapEnum.Greedy;
+            }
+            throw new Exception("Cannot unmarshal type LabelOverlapEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (LabelOverlapEnum)untypedValue;
+            switch (value)
+            {
+                case LabelOverlapEnum.Parity:
+                    serializer.Serialize(writer, "parity");
+                    return;
+                case LabelOverlapEnum.Greedy:
+                    serializer.Serialize(writer, "greedy");
+                    return;
+            }
+            throw new Exception("Cannot marshal type LabelOverlapEnum");
+        }
+
+        public static readonly LabelOverlapEnumConverter Singleton = new LabelOverlapEnumConverter();
+    }
+
+    internal class TitleFontWeightConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TitleFontWeight) || t == typeof(TitleFontWeight?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new TitleFontWeight { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new TitleFontWeight { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type TitleFontWeight");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TitleFontWeight)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type TitleFontWeight");
+        }
+
+        public static readonly TitleFontWeightConverter Singleton = new TitleFontWeightConverter();
+    }
+
+    internal class FieldTitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(FieldTitle) || t == typeof(FieldTitle?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "verbal":
+                    return FieldTitle.Verbal;
+                case "functional":
+                    return FieldTitle.Functional;
+                case "plain":
+                    return FieldTitle.Plain;
+            }
+            throw new Exception("Cannot unmarshal type FieldTitle");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (FieldTitle)untypedValue;
+            switch (value)
+            {
+                case FieldTitle.Verbal:
+                    serializer.Serialize(writer, "verbal");
+                    return;
+                case FieldTitle.Functional:
+                    serializer.Serialize(writer, "functional");
+                    return;
+                case FieldTitle.Plain:
+                    serializer.Serialize(writer, "plain");
+                    return;
+            }
+            throw new Exception("Cannot marshal type FieldTitle");
+        }
+
+        public static readonly FieldTitleConverter Singleton = new FieldTitleConverter();
+    }
+
+    internal class InvalidValuesConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(InvalidValues) || t == typeof(InvalidValues?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "filter")
+            {
+                return InvalidValues.Filter;
+            }
+            throw new Exception("Cannot unmarshal type InvalidValues");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (InvalidValues)untypedValue;
+            if (value == InvalidValues.Filter)
+            {
+                serializer.Serialize(writer, "filter");
+                return;
+            }
+            throw new Exception("Cannot marshal type InvalidValues");
+        }
+
+        public static readonly InvalidValuesConverter Singleton = new InvalidValuesConverter();
+    }
+
+    internal class LegendOrientConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LegendOrient) || t == typeof(LegendOrient?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "left":
+                    return LegendOrient.Left;
+                case "right":
+                    return LegendOrient.Right;
+                case "top-left":
+                    return LegendOrient.TopLeft;
+                case "top-right":
+                    return LegendOrient.TopRight;
+                case "bottom-left":
+                    return LegendOrient.BottomLeft;
+                case "bottom-right":
+                    return LegendOrient.BottomRight;
+                case "none":
+                    return LegendOrient.None;
+            }
+            throw new Exception("Cannot unmarshal type LegendOrient");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (LegendOrient)untypedValue;
+            switch (value)
+            {
+                case LegendOrient.Left:
+                    serializer.Serialize(writer, "left");
+                    return;
+                case LegendOrient.Right:
+                    serializer.Serialize(writer, "right");
+                    return;
+                case LegendOrient.TopLeft:
+                    serializer.Serialize(writer, "top-left");
+                    return;
+                case LegendOrient.TopRight:
+                    serializer.Serialize(writer, "top-right");
+                    return;
+                case LegendOrient.BottomLeft:
+                    serializer.Serialize(writer, "bottom-left");
+                    return;
+                case LegendOrient.BottomRight:
+                    serializer.Serialize(writer, "bottom-right");
+                    return;
+                case LegendOrient.None:
+                    serializer.Serialize(writer, "none");
+                    return;
+            }
+            throw new Exception("Cannot marshal type LegendOrient");
+        }
+
+        public static readonly LegendOrientConverter Singleton = new LegendOrientConverter();
+    }
+
+    internal class PaddingConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Padding) || t == typeof(Padding?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Padding { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<PaddingClass>(reader);
+                    return new Padding { PaddingClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Padding");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Padding)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.PaddingClass != null)
+            {
+                serializer.Serialize(writer, value.PaddingClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type Padding");
+        }
+
+        public static readonly PaddingConverter Singleton = new PaddingConverter();
+    }
+
+    internal class VgProjectionTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(VgProjectionType) || t == typeof(VgProjectionType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "albers":
+                    return VgProjectionType.Albers;
+                case "albersUsa":
+                    return VgProjectionType.AlbersUsa;
+                case "azimuthalEqualArea":
+                    return VgProjectionType.AzimuthalEqualArea;
+                case "azimuthalEquidistant":
+                    return VgProjectionType.AzimuthalEquidistant;
+                case "conicConformal":
+                    return VgProjectionType.ConicConformal;
+                case "conicEqualArea":
+                    return VgProjectionType.ConicEqualArea;
+                case "conicEquidistant":
+                    return VgProjectionType.ConicEquidistant;
+                case "equirectangular":
+                    return VgProjectionType.Equirectangular;
+                case "gnomonic":
+                    return VgProjectionType.Gnomonic;
+                case "mercator":
+                    return VgProjectionType.Mercator;
+                case "orthographic":
+                    return VgProjectionType.Orthographic;
+                case "stereographic":
+                    return VgProjectionType.Stereographic;
+                case "transverseMercator":
+                    return VgProjectionType.TransverseMercator;
+            }
+            throw new Exception("Cannot unmarshal type VgProjectionType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (VgProjectionType)untypedValue;
+            switch (value)
+            {
+                case VgProjectionType.Albers:
+                    serializer.Serialize(writer, "albers");
+                    return;
+                case VgProjectionType.AlbersUsa:
+                    serializer.Serialize(writer, "albersUsa");
+                    return;
+                case VgProjectionType.AzimuthalEqualArea:
+                    serializer.Serialize(writer, "azimuthalEqualArea");
+                    return;
+                case VgProjectionType.AzimuthalEquidistant:
+                    serializer.Serialize(writer, "azimuthalEquidistant");
+                    return;
+                case VgProjectionType.ConicConformal:
+                    serializer.Serialize(writer, "conicConformal");
+                    return;
+                case VgProjectionType.ConicEqualArea:
+                    serializer.Serialize(writer, "conicEqualArea");
+                    return;
+                case VgProjectionType.ConicEquidistant:
+                    serializer.Serialize(writer, "conicEquidistant");
+                    return;
+                case VgProjectionType.Equirectangular:
+                    serializer.Serialize(writer, "equirectangular");
+                    return;
+                case VgProjectionType.Gnomonic:
+                    serializer.Serialize(writer, "gnomonic");
+                    return;
+                case VgProjectionType.Mercator:
+                    serializer.Serialize(writer, "mercator");
+                    return;
+                case VgProjectionType.Orthographic:
+                    serializer.Serialize(writer, "orthographic");
+                    return;
+                case VgProjectionType.Stereographic:
+                    serializer.Serialize(writer, "stereographic");
+                    return;
+                case VgProjectionType.TransverseMercator:
+                    serializer.Serialize(writer, "transverseMercator");
+                    return;
+            }
+            throw new Exception("Cannot marshal type VgProjectionType");
+        }
+
+        public static readonly VgProjectionTypeConverter Singleton = new VgProjectionTypeConverter();
+    }
+
+    internal class RangeConfigValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RangeConfigValue) || t == typeof(RangeConfigValue?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<VgScheme>(reader);
+                    return new RangeConfigValue { VgScheme = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<TitleFontWeight[]>(reader);
+                    return new RangeConfigValue { AnythingArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type RangeConfigValue");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RangeConfigValue)untypedValue;
+            if (value.AnythingArray != null)
+            {
+                serializer.Serialize(writer, value.AnythingArray);
+                return;
+            }
+            if (value.VgScheme != null)
+            {
+                serializer.Serialize(writer, value.VgScheme);
+                return;
+            }
+            throw new Exception("Cannot marshal type RangeConfigValue");
+        }
+
+        public static readonly RangeConfigValueConverter Singleton = new RangeConfigValueConverter();
+    }
+
+    internal class BindEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(BindEnum) || t == typeof(BindEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "scales")
+            {
+                return BindEnum.Scales;
+            }
+            throw new Exception("Cannot unmarshal type BindEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (BindEnum)untypedValue;
+            if (value == BindEnum.Scales)
+            {
+                serializer.Serialize(writer, "scales");
+                return;
+            }
+            throw new Exception("Cannot marshal type BindEnum");
+        }
+
+        public static readonly BindEnumConverter Singleton = new BindEnumConverter();
+    }
+
+    internal class EmptyConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Empty) || t == typeof(Empty?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "all":
+                    return Empty.All;
+                case "none":
+                    return Empty.None;
+            }
+            throw new Exception("Cannot unmarshal type Empty");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Empty)untypedValue;
+            switch (value)
+            {
+                case Empty.All:
+                    serializer.Serialize(writer, "all");
+                    return;
+                case Empty.None:
+                    serializer.Serialize(writer, "none");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Empty");
+        }
+
+        public static readonly EmptyConverter Singleton = new EmptyConverter();
+    }
+
+    internal class SingleDefChannelConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SingleDefChannel) || t == typeof(SingleDefChannel?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "x":
+                    return SingleDefChannel.X;
+                case "y":
+                    return SingleDefChannel.Y;
+                case "x2":
+                    return SingleDefChannel.X2;
+                case "y2":
+                    return SingleDefChannel.Y2;
+                case "row":
+                    return SingleDefChannel.Row;
+                case "column":
+                    return SingleDefChannel.Column;
+                case "size":
+                    return SingleDefChannel.Size;
+                case "shape":
+                    return SingleDefChannel.Shape;
+                case "color":
+                    return SingleDefChannel.Color;
+                case "opacity":
+                    return SingleDefChannel.Opacity;
+                case "text":
+                    return SingleDefChannel.Text;
+                case "tooltip":
+                    return SingleDefChannel.Tooltip;
+                case "href":
+                    return SingleDefChannel.Href;
+            }
+            throw new Exception("Cannot unmarshal type SingleDefChannel");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SingleDefChannel)untypedValue;
+            switch (value)
+            {
+                case SingleDefChannel.X:
+                    serializer.Serialize(writer, "x");
+                    return;
+                case SingleDefChannel.Y:
+                    serializer.Serialize(writer, "y");
+                    return;
+                case SingleDefChannel.X2:
+                    serializer.Serialize(writer, "x2");
+                    return;
+                case SingleDefChannel.Y2:
+                    serializer.Serialize(writer, "y2");
+                    return;
+                case SingleDefChannel.Row:
+                    serializer.Serialize(writer, "row");
+                    return;
+                case SingleDefChannel.Column:
+                    serializer.Serialize(writer, "column");
+                    return;
+                case SingleDefChannel.Size:
+                    serializer.Serialize(writer, "size");
+                    return;
+                case SingleDefChannel.Shape:
+                    serializer.Serialize(writer, "shape");
+                    return;
+                case SingleDefChannel.Color:
+                    serializer.Serialize(writer, "color");
+                    return;
+                case SingleDefChannel.Opacity:
+                    serializer.Serialize(writer, "opacity");
+                    return;
+                case SingleDefChannel.Text:
+                    serializer.Serialize(writer, "text");
+                    return;
+                case SingleDefChannel.Tooltip:
+                    serializer.Serialize(writer, "tooltip");
+                    return;
+                case SingleDefChannel.Href:
+                    serializer.Serialize(writer, "href");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SingleDefChannel");
+        }
+
+        public static readonly SingleDefChannelConverter Singleton = new SingleDefChannelConverter();
+    }
+
+    internal class SelectionResolutionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SelectionResolution) || t == typeof(SelectionResolution?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "global":
+                    return SelectionResolution.Global;
+                case "union":
+                    return SelectionResolution.Union;
+                case "intersect":
+                    return SelectionResolution.Intersect;
+            }
+            throw new Exception("Cannot unmarshal type SelectionResolution");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SelectionResolution)untypedValue;
+            switch (value)
+            {
+                case SelectionResolution.Global:
+                    serializer.Serialize(writer, "global");
+                    return;
+                case SelectionResolution.Union:
+                    serializer.Serialize(writer, "union");
+                    return;
+                case SelectionResolution.Intersect:
+                    serializer.Serialize(writer, "intersect");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SelectionResolution");
+        }
+
+        public static readonly SelectionResolutionConverter Singleton = new SelectionResolutionConverter();
+    }
+
+    internal class TranslateConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Translate) || t == typeof(Translate?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Translate { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Translate { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Translate");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Translate)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Translate");
+        }
+
+        public static readonly TranslateConverter Singleton = new TranslateConverter();
+    }
+
+    internal class StackOffsetConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(StackOffset) || t == typeof(StackOffset?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "zero":
+                    return StackOffset.Zero;
+                case "center":
+                    return StackOffset.Center;
+                case "normalize":
+                    return StackOffset.Normalize;
+            }
+            throw new Exception("Cannot unmarshal type StackOffset");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (StackOffset)untypedValue;
+            switch (value)
+            {
+                case StackOffset.Zero:
+                    serializer.Serialize(writer, "zero");
+                    return;
+                case StackOffset.Center:
+                    serializer.Serialize(writer, "center");
+                    return;
+                case StackOffset.Normalize:
+                    serializer.Serialize(writer, "normalize");
+                    return;
+            }
+            throw new Exception("Cannot marshal type StackOffset");
+        }
+
+        public static readonly StackOffsetConverter Singleton = new StackOffsetConverter();
+    }
+
+    internal class AnchorConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Anchor) || t == typeof(Anchor?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "start":
+                    return Anchor.Start;
+                case "middle":
+                    return Anchor.Middle;
+                case "end":
+                    return Anchor.End;
+            }
+            throw new Exception("Cannot unmarshal type Anchor");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Anchor)untypedValue;
+            switch (value)
+            {
+                case Anchor.Start:
+                    serializer.Serialize(writer, "start");
+                    return;
+                case Anchor.Middle:
+                    serializer.Serialize(writer, "middle");
+                    return;
+                case Anchor.End:
+                    serializer.Serialize(writer, "end");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Anchor");
+        }
+
+        public static readonly AnchorConverter Singleton = new AnchorConverter();
+    }
+
+    internal class TitleOrientConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TitleOrient) || t == typeof(TitleOrient?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "top":
+                    return TitleOrient.Top;
+                case "bottom":
+                    return TitleOrient.Bottom;
+                case "left":
+                    return TitleOrient.Left;
+                case "right":
+                    return TitleOrient.Right;
+            }
+            throw new Exception("Cannot unmarshal type TitleOrient");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TitleOrient)untypedValue;
+            switch (value)
+            {
+                case TitleOrient.Top:
+                    serializer.Serialize(writer, "top");
+                    return;
+                case TitleOrient.Bottom:
+                    serializer.Serialize(writer, "bottom");
+                    return;
+                case TitleOrient.Left:
+                    serializer.Serialize(writer, "left");
+                    return;
+                case TitleOrient.Right:
+                    serializer.Serialize(writer, "right");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TitleOrient");
+        }
+
+        public static readonly TitleOrientConverter Singleton = new TitleOrientConverter();
+    }
+
+    internal class ParseUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ParseUnion) || t == typeof(ParseUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    if (stringValue == "auto")
+                    {
+                        return new ParseUnion { Enum = ParseEnum.Auto };
+                    }
+                    break;
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, object>>(reader);
+                    return new ParseUnion { AnythingMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ParseUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ParseUnion)untypedValue;
+            if (value.Enum != null)
+            {
+                if (value.Enum == ParseEnum.Auto)
+                {
+                    serializer.Serialize(writer, "auto");
+                    return;
+                }
+            }
+            if (value.AnythingMap != null)
+            {
+                serializer.Serialize(writer, value.AnythingMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type ParseUnion");
+        }
+
+        public static readonly ParseUnionConverter Singleton = new ParseUnionConverter();
+    }
+
+    internal class ParseEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ParseEnum) || t == typeof(ParseEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "auto")
+            {
+                return ParseEnum.Auto;
+            }
+            throw new Exception("Cannot unmarshal type ParseEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ParseEnum)untypedValue;
+            if (value == ParseEnum.Auto)
+            {
+                serializer.Serialize(writer, "auto");
+                return;
+            }
+            throw new Exception("Cannot marshal type ParseEnum");
+        }
+
+        public static readonly ParseEnumConverter Singleton = new ParseEnumConverter();
+    }
+
+    internal class DataFormatTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DataFormatType) || t == typeof(DataFormatType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "csv":
+                    return DataFormatType.Csv;
+                case "tsv":
+                    return DataFormatType.Tsv;
+                case "json":
+                    return DataFormatType.Json;
+                case "topojson":
+                    return DataFormatType.Topojson;
+            }
+            throw new Exception("Cannot unmarshal type DataFormatType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (DataFormatType)untypedValue;
+            switch (value)
+            {
+                case DataFormatType.Csv:
+                    serializer.Serialize(writer, "csv");
+                    return;
+                case DataFormatType.Tsv:
+                    serializer.Serialize(writer, "tsv");
+                    return;
+                case DataFormatType.Json:
+                    serializer.Serialize(writer, "json");
+                    return;
+                case DataFormatType.Topojson:
+                    serializer.Serialize(writer, "topojson");
+                    return;
+            }
+            throw new Exception("Cannot marshal type DataFormatType");
+        }
+
+        public static readonly DataFormatTypeConverter Singleton = new DataFormatTypeConverter();
+    }
+
+    internal class ValuesConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Values) || t == typeof(Values?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Values { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, object>>(reader);
+                    return new Values { AnythingMap = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<ValuesValue[]>(reader);
+                    return new Values { AnythingArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Values");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Values)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.AnythingArray != null)
+            {
+                serializer.Serialize(writer, value.AnythingArray);
+                return;
+            }
+            if (value.AnythingMap != null)
+            {
+                serializer.Serialize(writer, value.AnythingMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type Values");
+        }
+
+        public static readonly ValuesConverter Singleton = new ValuesConverter();
+    }
+
+    internal class ValuesValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ValuesValue) || t == typeof(ValuesValue?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new ValuesValue { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new ValuesValue { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new ValuesValue { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, object>>(reader);
+                    return new ValuesValue { AnythingMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type ValuesValue");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ValuesValue)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.AnythingMap != null)
+            {
+                serializer.Serialize(writer, value.AnythingMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type ValuesValue");
+        }
+
+        public static readonly ValuesValueConverter Singleton = new ValuesValueConverter();
+    }
+
+    internal class AggregateOpConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AggregateOp) || t == typeof(AggregateOp?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "argmax":
+                    return AggregateOp.Argmax;
+                case "argmin":
+                    return AggregateOp.Argmin;
+                case "average":
+                    return AggregateOp.Average;
+                case "count":
+                    return AggregateOp.Count;
+                case "distinct":
+                    return AggregateOp.Distinct;
+                case "max":
+                    return AggregateOp.Max;
+                case "mean":
+                    return AggregateOp.Mean;
+                case "median":
+                    return AggregateOp.Median;
+                case "min":
+                    return AggregateOp.Min;
+                case "missing":
+                    return AggregateOp.Missing;
+                case "q1":
+                    return AggregateOp.Q1;
+                case "q3":
+                    return AggregateOp.Q3;
+                case "ci0":
+                    return AggregateOp.Ci0;
+                case "ci1":
+                    return AggregateOp.Ci1;
+                case "stdev":
+                    return AggregateOp.Stdev;
+                case "stdevp":
+                    return AggregateOp.Stdevp;
+                case "sum":
+                    return AggregateOp.Sum;
+                case "valid":
+                    return AggregateOp.Valid;
+                case "values":
+                    return AggregateOp.Values;
+                case "variance":
+                    return AggregateOp.Variance;
+                case "variancep":
+                    return AggregateOp.Variancep;
+            }
+            throw new Exception("Cannot unmarshal type AggregateOp");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (AggregateOp)untypedValue;
+            switch (value)
+            {
+                case AggregateOp.Argmax:
+                    serializer.Serialize(writer, "argmax");
+                    return;
+                case AggregateOp.Argmin:
+                    serializer.Serialize(writer, "argmin");
+                    return;
+                case AggregateOp.Average:
+                    serializer.Serialize(writer, "average");
+                    return;
+                case AggregateOp.Count:
+                    serializer.Serialize(writer, "count");
+                    return;
+                case AggregateOp.Distinct:
+                    serializer.Serialize(writer, "distinct");
+                    return;
+                case AggregateOp.Max:
+                    serializer.Serialize(writer, "max");
+                    return;
+                case AggregateOp.Mean:
+                    serializer.Serialize(writer, "mean");
+                    return;
+                case AggregateOp.Median:
+                    serializer.Serialize(writer, "median");
+                    return;
+                case AggregateOp.Min:
+                    serializer.Serialize(writer, "min");
+                    return;
+                case AggregateOp.Missing:
+                    serializer.Serialize(writer, "missing");
+                    return;
+                case AggregateOp.Q1:
+                    serializer.Serialize(writer, "q1");
+                    return;
+                case AggregateOp.Q3:
+                    serializer.Serialize(writer, "q3");
+                    return;
+                case AggregateOp.Ci0:
+                    serializer.Serialize(writer, "ci0");
+                    return;
+                case AggregateOp.Ci1:
+                    serializer.Serialize(writer, "ci1");
+                    return;
+                case AggregateOp.Stdev:
+                    serializer.Serialize(writer, "stdev");
+                    return;
+                case AggregateOp.Stdevp:
+                    serializer.Serialize(writer, "stdevp");
+                    return;
+                case AggregateOp.Sum:
+                    serializer.Serialize(writer, "sum");
+                    return;
+                case AggregateOp.Valid:
+                    serializer.Serialize(writer, "valid");
+                    return;
+                case AggregateOp.Values:
+                    serializer.Serialize(writer, "values");
+                    return;
+                case AggregateOp.Variance:
+                    serializer.Serialize(writer, "variance");
+                    return;
+                case AggregateOp.Variancep:
+                    serializer.Serialize(writer, "variancep");
+                    return;
+            }
+            throw new Exception("Cannot marshal type AggregateOp");
+        }
+
+        public static readonly AggregateOpConverter Singleton = new AggregateOpConverter();
+    }
+
+    internal class BinConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Bin) || t == typeof(Bin?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Bin { Bool = boolValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<BinParams>(reader);
+                    return new Bin { BinParams = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Bin");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Bin)untypedValue;
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.BinParams != null)
+            {
+                serializer.Serialize(writer, value.BinParams);
+                return;
+            }
+            throw new Exception("Cannot marshal type Bin");
+        }
+
+        public static readonly BinConverter Singleton = new BinConverter();
+    }
+
+    internal class IndecentMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 2)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 2)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly IndecentMinMaxValueCheckConverter Singleton = new IndecentMinMaxValueCheckConverter();
+    }
+
+    internal class ColorConditionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ColorCondition) || t == typeof(ColorCondition?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ConditionalPredicateMarkPropFieldDefClass>(reader);
+                    return new ColorCondition { ConditionalPredicateMarkPropFieldDefClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<ConditionalValueDef[]>(reader);
+                    return new ColorCondition { ConditionalValueDefArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type ColorCondition");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ColorCondition)untypedValue;
+            if (value.ConditionalValueDefArray != null)
+            {
+                serializer.Serialize(writer, value.ConditionalValueDefArray);
+                return;
+            }
+            if (value.ConditionalPredicateMarkPropFieldDefClass != null)
+            {
+                serializer.Serialize(writer, value.ConditionalPredicateMarkPropFieldDefClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type ColorCondition");
+        }
+
+        public static readonly ColorConditionConverter Singleton = new ColorConditionConverter();
+    }
+
+    internal class SelectionOperandConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SelectionOperand) || t == typeof(SelectionOperand?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new SelectionOperand { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Selection>(reader);
+                    return new SelectionOperand { Selection = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SelectionOperand");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SelectionOperand)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Selection != null)
+            {
+                serializer.Serialize(writer, value.Selection);
+                return;
+            }
+            throw new Exception("Cannot marshal type SelectionOperand");
+        }
+
+        public static readonly SelectionOperandConverter Singleton = new SelectionOperandConverter();
+    }
+
+    internal class LogicalOperandPredicateConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LogicalOperandPredicate) || t == typeof(LogicalOperandPredicate?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LogicalOperandPredicate { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Predicate>(reader);
+                    return new LogicalOperandPredicate { Predicate = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LogicalOperandPredicate");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LogicalOperandPredicate)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.Predicate != null)
+            {
+                serializer.Serialize(writer, value.Predicate);
+                return;
+            }
+            throw new Exception("Cannot marshal type LogicalOperandPredicate");
+        }
+
+        public static readonly LogicalOperandPredicateConverter Singleton = new LogicalOperandPredicateConverter();
+    }
+
+    internal class EqualConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Equal) || t == typeof(Equal?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Equal { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new Equal { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Equal { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DateTime>(reader);
+                    return new Equal { DateTime = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Equal");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Equal)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.DateTime != null)
+            {
+                serializer.Serialize(writer, value.DateTime);
+                return;
+            }
+            throw new Exception("Cannot marshal type Equal");
+        }
+
+        public static readonly EqualConverter Singleton = new EqualConverter();
+    }
+
+    internal class HilariousMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 1 && value <= 31)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 1 && value <= 31)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly HilariousMinMaxValueCheckConverter Singleton = new HilariousMinMaxValueCheckConverter();
+    }
+
+    internal class DayConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Day) || t == typeof(Day?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Day { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Day { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Day");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Day)untypedValue;
+            if (value.Double != null)
+            {
+                var converter = AmbitiousMinMaxValueCheckConverter.Singleton;
+                converter.WriteJson(writer, value.Double.Value, serializer);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Day");
+        }
+
+        public static readonly DayConverter Singleton = new DayConverter();
+    }
+
+    internal class AmbitiousMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 1 && value <= 7)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 1 && value <= 7)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly AmbitiousMinMaxValueCheckConverter Singleton = new AmbitiousMinMaxValueCheckConverter();
+    }
+
+    internal class CunningMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 0 && value <= 23)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 0 && value <= 23)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly CunningMinMaxValueCheckConverter Singleton = new CunningMinMaxValueCheckConverter();
+    }
+
+    internal class MagentaMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 0 && value <= 999)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 0 && value <= 999)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly MagentaMinMaxValueCheckConverter Singleton = new MagentaMinMaxValueCheckConverter();
+    }
+
+    internal class FriskyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 0 && value <= 59)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 0 && value <= 59)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly FriskyMinMaxValueCheckConverter Singleton = new FriskyMinMaxValueCheckConverter();
+    }
+
+    internal class MonthConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Month) || t == typeof(Month?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new Month { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Month { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type Month");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Month)untypedValue;
+            if (value.Double != null)
+            {
+                var converter = MischievousMinMaxValueCheckConverter.Singleton;
+                converter.WriteJson(writer, value.Double.Value, serializer);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type Month");
+        }
+
+        public static readonly MonthConverter Singleton = new MonthConverter();
+    }
+
+    internal class MischievousMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 1 && value <= 12)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 1 && value <= 12)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly MischievousMinMaxValueCheckConverter Singleton = new MischievousMinMaxValueCheckConverter();
+    }
+
+    internal class BraggadociousMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 1 && value <= 4)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 1 && value <= 4)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly BraggadociousMinMaxValueCheckConverter Singleton = new BraggadociousMinMaxValueCheckConverter();
+    }
+
+    internal class RangeElementConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RangeElement) || t == typeof(RangeElement?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new RangeElement { };
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new RangeElement { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DateTime>(reader);
+                    return new RangeElement { DateTime = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type RangeElement");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (RangeElement)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.DateTime != null)
+            {
+                serializer.Serialize(writer, value.DateTime);
+                return;
+            }
+            throw new Exception("Cannot marshal type RangeElement");
+        }
+
+        public static readonly RangeElementConverter Singleton = new RangeElementConverter();
+    }
+
+    internal class TimeUnitConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TimeUnit) || t == typeof(TimeUnit?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "year":
+                    return TimeUnit.Year;
+                case "quarter":
+                    return TimeUnit.Quarter;
+                case "month":
+                    return TimeUnit.Month;
+                case "day":
+                    return TimeUnit.Day;
+                case "date":
+                    return TimeUnit.Date;
+                case "hours":
+                    return TimeUnit.Hours;
+                case "minutes":
+                    return TimeUnit.Minutes;
+                case "seconds":
+                    return TimeUnit.Seconds;
+                case "milliseconds":
+                    return TimeUnit.Milliseconds;
+                case "utcyear":
+                    return TimeUnit.Utcyear;
+                case "utcquarter":
+                    return TimeUnit.Utcquarter;
+                case "utcmonth":
+                    return TimeUnit.Utcmonth;
+                case "utcday":
+                    return TimeUnit.Utcday;
+                case "utcdate":
+                    return TimeUnit.Utcdate;
+                case "utchours":
+                    return TimeUnit.Utchours;
+                case "utcminutes":
+                    return TimeUnit.Utcminutes;
+                case "utcseconds":
+                    return TimeUnit.Utcseconds;
+                case "utcmilliseconds":
+                    return TimeUnit.Utcmilliseconds;
+                case "yearquarter":
+                    return TimeUnit.Yearquarter;
+                case "yearquartermonth":
+                    return TimeUnit.Yearquartermonth;
+                case "yearmonth":
+                    return TimeUnit.Yearmonth;
+                case "yearmonthdate":
+                    return TimeUnit.Yearmonthdate;
+                case "yearmonthdatehours":
+                    return TimeUnit.Yearmonthdatehours;
+                case "yearmonthdatehoursminutes":
+                    return TimeUnit.Yearmonthdatehoursminutes;
+                case "yearmonthdatehoursminutesseconds":
+                    return TimeUnit.Yearmonthdatehoursminutesseconds;
+                case "quartermonth":
+                    return TimeUnit.Quartermonth;
+                case "monthdate":
+                    return TimeUnit.Monthdate;
+                case "hoursminutes":
+                    return TimeUnit.Hoursminutes;
+                case "hoursminutesseconds":
+                    return TimeUnit.Hoursminutesseconds;
+                case "minutesseconds":
+                    return TimeUnit.Minutesseconds;
+                case "secondsmilliseconds":
+                    return TimeUnit.Secondsmilliseconds;
+                case "utcyearquarter":
+                    return TimeUnit.Utcyearquarter;
+                case "utcyearquartermonth":
+                    return TimeUnit.Utcyearquartermonth;
+                case "utcyearmonth":
+                    return TimeUnit.Utcyearmonth;
+                case "utcyearmonthdate":
+                    return TimeUnit.Utcyearmonthdate;
+                case "utcyearmonthdatehours":
+                    return TimeUnit.Utcyearmonthdatehours;
+                case "utcyearmonthdatehoursminutes":
+                    return TimeUnit.Utcyearmonthdatehoursminutes;
+                case "utcyearmonthdatehoursminutesseconds":
+                    return TimeUnit.Utcyearmonthdatehoursminutesseconds;
+                case "utcquartermonth":
+                    return TimeUnit.Utcquartermonth;
+                case "utcmonthdate":
+                    return TimeUnit.Utcmonthdate;
+                case "utchoursminutes":
+                    return TimeUnit.Utchoursminutes;
+                case "utchoursminutesseconds":
+                    return TimeUnit.Utchoursminutesseconds;
+                case "utcminutesseconds":
+                    return TimeUnit.Utcminutesseconds;
+                case "utcsecondsmilliseconds":
+                    return TimeUnit.Utcsecondsmilliseconds;
+            }
+            throw new Exception("Cannot unmarshal type TimeUnit");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (TimeUnit)untypedValue;
+            switch (value)
+            {
+                case TimeUnit.Year:
+                    serializer.Serialize(writer, "year");
+                    return;
+                case TimeUnit.Quarter:
+                    serializer.Serialize(writer, "quarter");
+                    return;
+                case TimeUnit.Month:
+                    serializer.Serialize(writer, "month");
+                    return;
+                case TimeUnit.Day:
+                    serializer.Serialize(writer, "day");
+                    return;
+                case TimeUnit.Date:
+                    serializer.Serialize(writer, "date");
+                    return;
+                case TimeUnit.Hours:
+                    serializer.Serialize(writer, "hours");
+                    return;
+                case TimeUnit.Minutes:
+                    serializer.Serialize(writer, "minutes");
+                    return;
+                case TimeUnit.Seconds:
+                    serializer.Serialize(writer, "seconds");
+                    return;
+                case TimeUnit.Milliseconds:
+                    serializer.Serialize(writer, "milliseconds");
+                    return;
+                case TimeUnit.Utcyear:
+                    serializer.Serialize(writer, "utcyear");
+                    return;
+                case TimeUnit.Utcquarter:
+                    serializer.Serialize(writer, "utcquarter");
+                    return;
+                case TimeUnit.Utcmonth:
+                    serializer.Serialize(writer, "utcmonth");
+                    return;
+                case TimeUnit.Utcday:
+                    serializer.Serialize(writer, "utcday");
+                    return;
+                case TimeUnit.Utcdate:
+                    serializer.Serialize(writer, "utcdate");
+                    return;
+                case TimeUnit.Utchours:
+                    serializer.Serialize(writer, "utchours");
+                    return;
+                case TimeUnit.Utcminutes:
+                    serializer.Serialize(writer, "utcminutes");
+                    return;
+                case TimeUnit.Utcseconds:
+                    serializer.Serialize(writer, "utcseconds");
+                    return;
+                case TimeUnit.Utcmilliseconds:
+                    serializer.Serialize(writer, "utcmilliseconds");
+                    return;
+                case TimeUnit.Yearquarter:
+                    serializer.Serialize(writer, "yearquarter");
+                    return;
+                case TimeUnit.Yearquartermonth:
+                    serializer.Serialize(writer, "yearquartermonth");
+                    return;
+                case TimeUnit.Yearmonth:
+                    serializer.Serialize(writer, "yearmonth");
+                    return;
+                case TimeUnit.Yearmonthdate:
+                    serializer.Serialize(writer, "yearmonthdate");
+                    return;
+                case TimeUnit.Yearmonthdatehours:
+                    serializer.Serialize(writer, "yearmonthdatehours");
+                    return;
+                case TimeUnit.Yearmonthdatehoursminutes:
+                    serializer.Serialize(writer, "yearmonthdatehoursminutes");
+                    return;
+                case TimeUnit.Yearmonthdatehoursminutesseconds:
+                    serializer.Serialize(writer, "yearmonthdatehoursminutesseconds");
+                    return;
+                case TimeUnit.Quartermonth:
+                    serializer.Serialize(writer, "quartermonth");
+                    return;
+                case TimeUnit.Monthdate:
+                    serializer.Serialize(writer, "monthdate");
+                    return;
+                case TimeUnit.Hoursminutes:
+                    serializer.Serialize(writer, "hoursminutes");
+                    return;
+                case TimeUnit.Hoursminutesseconds:
+                    serializer.Serialize(writer, "hoursminutesseconds");
+                    return;
+                case TimeUnit.Minutesseconds:
+                    serializer.Serialize(writer, "minutesseconds");
+                    return;
+                case TimeUnit.Secondsmilliseconds:
+                    serializer.Serialize(writer, "secondsmilliseconds");
+                    return;
+                case TimeUnit.Utcyearquarter:
+                    serializer.Serialize(writer, "utcyearquarter");
+                    return;
+                case TimeUnit.Utcyearquartermonth:
+                    serializer.Serialize(writer, "utcyearquartermonth");
+                    return;
+                case TimeUnit.Utcyearmonth:
+                    serializer.Serialize(writer, "utcyearmonth");
+                    return;
+                case TimeUnit.Utcyearmonthdate:
+                    serializer.Serialize(writer, "utcyearmonthdate");
+                    return;
+                case TimeUnit.Utcyearmonthdatehours:
+                    serializer.Serialize(writer, "utcyearmonthdatehours");
+                    return;
+                case TimeUnit.Utcyearmonthdatehoursminutes:
+                    serializer.Serialize(writer, "utcyearmonthdatehoursminutes");
+                    return;
+                case TimeUnit.Utcyearmonthdatehoursminutesseconds:
+                    serializer.Serialize(writer, "utcyearmonthdatehoursminutesseconds");
+                    return;
+                case TimeUnit.Utcquartermonth:
+                    serializer.Serialize(writer, "utcquartermonth");
+                    return;
+                case TimeUnit.Utcmonthdate:
+                    serializer.Serialize(writer, "utcmonthdate");
+                    return;
+                case TimeUnit.Utchoursminutes:
+                    serializer.Serialize(writer, "utchoursminutes");
+                    return;
+                case TimeUnit.Utchoursminutesseconds:
+                    serializer.Serialize(writer, "utchoursminutesseconds");
+                    return;
+                case TimeUnit.Utcminutesseconds:
+                    serializer.Serialize(writer, "utcminutesseconds");
+                    return;
+                case TimeUnit.Utcsecondsmilliseconds:
+                    serializer.Serialize(writer, "utcsecondsmilliseconds");
+                    return;
+            }
+            throw new Exception("Cannot marshal type TimeUnit");
+        }
+
+        public static readonly TimeUnitConverter Singleton = new TimeUnitConverter();
+    }
+
+    internal class ConditionalValueDefValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ConditionalValueDefValue) || t == typeof(ConditionalValueDefValue?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new ConditionalValueDefValue { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new ConditionalValueDefValue { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new ConditionalValueDefValue { String = stringValue };
+            }
+            throw new Exception("Cannot unmarshal type ConditionalValueDefValue");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ConditionalValueDefValue)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            throw new Exception("Cannot marshal type ConditionalValueDefValue");
+        }
+
+        public static readonly ConditionalValueDefValueConverter Singleton = new ConditionalValueDefValueConverter();
+    }
+
+    internal class FieldConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Field) || t == typeof(Field?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Field { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<RepeatRef>(reader);
+                    return new Field { RepeatRef = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Field");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Field)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.RepeatRef != null)
+            {
+                serializer.Serialize(writer, value.RepeatRef);
+                return;
+            }
+            throw new Exception("Cannot marshal type Field");
+        }
+
+        public static readonly FieldConverter Singleton = new FieldConverter();
+    }
+
+    internal class RepeatEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(RepeatEnum) || t == typeof(RepeatEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "row":
+                    return RepeatEnum.Row;
+                case "column":
+                    return RepeatEnum.Column;
+            }
+            throw new Exception("Cannot unmarshal type RepeatEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (RepeatEnum)untypedValue;
+            switch (value)
+            {
+                case RepeatEnum.Row:
+                    serializer.Serialize(writer, "row");
+                    return;
+                case RepeatEnum.Column:
+                    serializer.Serialize(writer, "column");
+                    return;
+            }
+            throw new Exception("Cannot marshal type RepeatEnum");
+        }
+
+        public static readonly RepeatEnumConverter Singleton = new RepeatEnumConverter();
+    }
+
+    internal class LegendTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LegendType) || t == typeof(LegendType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "symbol":
+                    return LegendType.Symbol;
+                case "gradient":
+                    return LegendType.Gradient;
+            }
+            throw new Exception("Cannot unmarshal type LegendType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (LegendType)untypedValue;
+            switch (value)
+            {
+                case LegendType.Symbol:
+                    serializer.Serialize(writer, "symbol");
+                    return;
+                case LegendType.Gradient:
+                    serializer.Serialize(writer, "gradient");
+                    return;
+            }
+            throw new Exception("Cannot marshal type LegendType");
+        }
+
+        public static readonly LegendTypeConverter Singleton = new LegendTypeConverter();
+    }
+
+    internal class LegendValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(LegendValue) || t == typeof(LegendValue?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new LegendValue { Double = doubleValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new LegendValue { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DateTime>(reader);
+                    return new LegendValue { DateTime = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type LegendValue");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (LegendValue)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.DateTime != null)
+            {
+                serializer.Serialize(writer, value.DateTime);
+                return;
+            }
+            throw new Exception("Cannot marshal type LegendValue");
+        }
+
+        public static readonly LegendValueConverter Singleton = new LegendValueConverter();
+    }
+
+    internal class DomainUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(DomainUnion) || t == typeof(DomainUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    if (stringValue == "unaggregated")
+                    {
+                        return new DomainUnion { Enum = Domain.Unaggregated };
+                    }
+                    break;
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DomainClass>(reader);
+                    return new DomainUnion { DomainClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<Equal[]>(reader);
+                    return new DomainUnion { AnythingArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type DomainUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (DomainUnion)untypedValue;
+            if (value.Enum != null)
+            {
+                if (value.Enum == Domain.Unaggregated)
+                {
+                    serializer.Serialize(writer, "unaggregated");
+                    return;
+                }
+            }
+            if (value.AnythingArray != null)
+            {
+                serializer.Serialize(writer, value.AnythingArray);
+                return;
+            }
+            if (value.DomainClass != null)
+            {
+                serializer.Serialize(writer, value.DomainClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type DomainUnion");
+        }
+
+        public static readonly DomainUnionConverter Singleton = new DomainUnionConverter();
+    }
+
+    internal class DomainConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Domain) || t == typeof(Domain?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            if (value == "unaggregated")
+            {
+                return Domain.Unaggregated;
+            }
+            throw new Exception("Cannot unmarshal type Domain");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Domain)untypedValue;
+            if (value == Domain.Unaggregated)
+            {
+                serializer.Serialize(writer, "unaggregated");
+                return;
+            }
+            throw new Exception("Cannot marshal type Domain");
+        }
+
+        public static readonly DomainConverter Singleton = new DomainConverter();
+    }
+
+    internal class InterpolateUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(InterpolateUnion) || t == typeof(InterpolateUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    switch (stringValue)
+                    {
+                        case "linear":
+                            return new InterpolateUnion { Enum = Interpolate.Linear };
+                        case "linear-closed":
+                            return new InterpolateUnion { Enum = Interpolate.LinearClosed };
+                        case "step":
+                            return new InterpolateUnion { Enum = Interpolate.Step };
+                        case "step-before":
+                            return new InterpolateUnion { Enum = Interpolate.StepBefore };
+                        case "step-after":
+                            return new InterpolateUnion { Enum = Interpolate.StepAfter };
+                        case "basis":
+                            return new InterpolateUnion { Enum = Interpolate.Basis };
+                        case "basis-open":
+                            return new InterpolateUnion { Enum = Interpolate.BasisOpen };
+                        case "basis-closed":
+                            return new InterpolateUnion { Enum = Interpolate.BasisClosed };
+                        case "cardinal":
+                            return new InterpolateUnion { Enum = Interpolate.Cardinal };
+                        case "cardinal-open":
+                            return new InterpolateUnion { Enum = Interpolate.CardinalOpen };
+                        case "cardinal-closed":
+                            return new InterpolateUnion { Enum = Interpolate.CardinalClosed };
+                        case "bundle":
+                            return new InterpolateUnion { Enum = Interpolate.Bundle };
+                        case "monotone":
+                            return new InterpolateUnion { Enum = Interpolate.Monotone };
+                    }
+                    break;
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<InterpolateParams>(reader);
+                    return new InterpolateUnion { InterpolateParams = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type InterpolateUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (InterpolateUnion)untypedValue;
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case Interpolate.Linear:
+                        serializer.Serialize(writer, "linear");
+                        return;
+                    case Interpolate.LinearClosed:
+                        serializer.Serialize(writer, "linear-closed");
+                        return;
+                    case Interpolate.Step:
+                        serializer.Serialize(writer, "step");
+                        return;
+                    case Interpolate.StepBefore:
+                        serializer.Serialize(writer, "step-before");
+                        return;
+                    case Interpolate.StepAfter:
+                        serializer.Serialize(writer, "step-after");
+                        return;
+                    case Interpolate.Basis:
+                        serializer.Serialize(writer, "basis");
+                        return;
+                    case Interpolate.BasisOpen:
+                        serializer.Serialize(writer, "basis-open");
+                        return;
+                    case Interpolate.BasisClosed:
+                        serializer.Serialize(writer, "basis-closed");
+                        return;
+                    case Interpolate.Cardinal:
+                        serializer.Serialize(writer, "cardinal");
+                        return;
+                    case Interpolate.CardinalOpen:
+                        serializer.Serialize(writer, "cardinal-open");
+                        return;
+                    case Interpolate.CardinalClosed:
+                        serializer.Serialize(writer, "cardinal-closed");
+                        return;
+                    case Interpolate.Bundle:
+                        serializer.Serialize(writer, "bundle");
+                        return;
+                    case Interpolate.Monotone:
+                        serializer.Serialize(writer, "monotone");
+                        return;
+                }
+            }
+            if (value.InterpolateParams != null)
+            {
+                serializer.Serialize(writer, value.InterpolateParams);
+                return;
+            }
+            throw new Exception("Cannot marshal type InterpolateUnion");
+        }
+
+        public static readonly InterpolateUnionConverter Singleton = new InterpolateUnionConverter();
+    }
+
+    internal class InterpolateParamsTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(InterpolateParamsType) || t == typeof(InterpolateParamsType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "rgb":
+                    return InterpolateParamsType.Rgb;
+                case "cubehelix":
+                    return InterpolateParamsType.Cubehelix;
+                case "cubehelix-long":
+                    return InterpolateParamsType.CubehelixLong;
+            }
+            throw new Exception("Cannot unmarshal type InterpolateParamsType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (InterpolateParamsType)untypedValue;
+            switch (value)
+            {
+                case InterpolateParamsType.Rgb:
+                    serializer.Serialize(writer, "rgb");
+                    return;
+                case InterpolateParamsType.Cubehelix:
+                    serializer.Serialize(writer, "cubehelix");
+                    return;
+                case InterpolateParamsType.CubehelixLong:
+                    serializer.Serialize(writer, "cubehelix-long");
+                    return;
+            }
+            throw new Exception("Cannot marshal type InterpolateParamsType");
+        }
+
+        public static readonly InterpolateParamsTypeConverter Singleton = new InterpolateParamsTypeConverter();
+    }
+
+    internal class NiceUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(NiceUnion) || t == typeof(NiceUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new NiceUnion { Double = doubleValue };
+                case JsonToken.Boolean:
+                    var boolValue = serializer.Deserialize<bool>(reader);
+                    return new NiceUnion { Bool = boolValue };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    switch (stringValue)
+                    {
+                        case "second":
+                            return new NiceUnion { Enum = NiceTime.Second };
+                        case "minute":
+                            return new NiceUnion { Enum = NiceTime.Minute };
+                        case "hour":
+                            return new NiceUnion { Enum = NiceTime.Hour };
+                        case "day":
+                            return new NiceUnion { Enum = NiceTime.Day };
+                        case "week":
+                            return new NiceUnion { Enum = NiceTime.Week };
+                        case "month":
+                            return new NiceUnion { Enum = NiceTime.Month };
+                        case "year":
+                            return new NiceUnion { Enum = NiceTime.Year };
+                    }
+                    break;
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<NiceClass>(reader);
+                    return new NiceUnion { NiceClass = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type NiceUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (NiceUnion)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.Bool != null)
+            {
+                serializer.Serialize(writer, value.Bool.Value);
+                return;
+            }
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case NiceTime.Second:
+                        serializer.Serialize(writer, "second");
+                        return;
+                    case NiceTime.Minute:
+                        serializer.Serialize(writer, "minute");
+                        return;
+                    case NiceTime.Hour:
+                        serializer.Serialize(writer, "hour");
+                        return;
+                    case NiceTime.Day:
+                        serializer.Serialize(writer, "day");
+                        return;
+                    case NiceTime.Week:
+                        serializer.Serialize(writer, "week");
+                        return;
+                    case NiceTime.Month:
+                        serializer.Serialize(writer, "month");
+                        return;
+                    case NiceTime.Year:
+                        serializer.Serialize(writer, "year");
+                        return;
+                }
+            }
+            if (value.NiceClass != null)
+            {
+                serializer.Serialize(writer, value.NiceClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type NiceUnion");
+        }
+
+        public static readonly NiceUnionConverter Singleton = new NiceUnionConverter();
+    }
+
+    internal class NiceTimeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(NiceTime) || t == typeof(NiceTime?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "second":
+                    return NiceTime.Second;
+                case "minute":
+                    return NiceTime.Minute;
+                case "hour":
+                    return NiceTime.Hour;
+                case "day":
+                    return NiceTime.Day;
+                case "week":
+                    return NiceTime.Week;
+                case "month":
+                    return NiceTime.Month;
+                case "year":
+                    return NiceTime.Year;
+            }
+            throw new Exception("Cannot unmarshal type NiceTime");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (NiceTime)untypedValue;
+            switch (value)
+            {
+                case NiceTime.Second:
+                    serializer.Serialize(writer, "second");
+                    return;
+                case NiceTime.Minute:
+                    serializer.Serialize(writer, "minute");
+                    return;
+                case NiceTime.Hour:
+                    serializer.Serialize(writer, "hour");
+                    return;
+                case NiceTime.Day:
+                    serializer.Serialize(writer, "day");
+                    return;
+                case NiceTime.Week:
+                    serializer.Serialize(writer, "week");
+                    return;
+                case NiceTime.Month:
+                    serializer.Serialize(writer, "month");
+                    return;
+                case NiceTime.Year:
+                    serializer.Serialize(writer, "year");
+                    return;
+            }
+            throw new Exception("Cannot marshal type NiceTime");
+        }
+
+        public static readonly NiceTimeConverter Singleton = new NiceTimeConverter();
+    }
+
+    internal class ScaleRangeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ScaleRange) || t == typeof(ScaleRange?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new ScaleRange { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<TitleFontWeight[]>(reader);
+                    return new ScaleRange { AnythingArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type ScaleRange");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (ScaleRange)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.AnythingArray != null)
+            {
+                serializer.Serialize(writer, value.AnythingArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type ScaleRange");
+        }
+
+        public static readonly ScaleRangeConverter Singleton = new ScaleRangeConverter();
+    }
+
+    internal class SchemeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Scheme) || t == typeof(Scheme?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Scheme { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SchemeParams>(reader);
+                    return new Scheme { SchemeParams = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Scheme");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Scheme)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.SchemeParams != null)
+            {
+                serializer.Serialize(writer, value.SchemeParams);
+                return;
+            }
+            throw new Exception("Cannot marshal type Scheme");
+        }
+
+        public static readonly SchemeConverter Singleton = new SchemeConverter();
+    }
+
+    internal class ScaleTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ScaleType) || t == typeof(ScaleType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "linear":
+                    return ScaleType.Linear;
+                case "bin-linear":
+                    return ScaleType.BinLinear;
+                case "log":
+                    return ScaleType.Log;
+                case "pow":
+                    return ScaleType.Pow;
+                case "sqrt":
+                    return ScaleType.Sqrt;
+                case "time":
+                    return ScaleType.Time;
+                case "utc":
+                    return ScaleType.Utc;
+                case "sequential":
+                    return ScaleType.Sequential;
+                case "ordinal":
+                    return ScaleType.Ordinal;
+                case "bin-ordinal":
+                    return ScaleType.BinOrdinal;
+                case "point":
+                    return ScaleType.Point;
+                case "band":
+                    return ScaleType.Band;
+            }
+            throw new Exception("Cannot unmarshal type ScaleType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ScaleType)untypedValue;
+            switch (value)
+            {
+                case ScaleType.Linear:
+                    serializer.Serialize(writer, "linear");
+                    return;
+                case ScaleType.BinLinear:
+                    serializer.Serialize(writer, "bin-linear");
+                    return;
+                case ScaleType.Log:
+                    serializer.Serialize(writer, "log");
+                    return;
+                case ScaleType.Pow:
+                    serializer.Serialize(writer, "pow");
+                    return;
+                case ScaleType.Sqrt:
+                    serializer.Serialize(writer, "sqrt");
+                    return;
+                case ScaleType.Time:
+                    serializer.Serialize(writer, "time");
+                    return;
+                case ScaleType.Utc:
+                    serializer.Serialize(writer, "utc");
+                    return;
+                case ScaleType.Sequential:
+                    serializer.Serialize(writer, "sequential");
+                    return;
+                case ScaleType.Ordinal:
+                    serializer.Serialize(writer, "ordinal");
+                    return;
+                case ScaleType.BinOrdinal:
+                    serializer.Serialize(writer, "bin-ordinal");
+                    return;
+                case ScaleType.Point:
+                    serializer.Serialize(writer, "point");
+                    return;
+                case ScaleType.Band:
+                    serializer.Serialize(writer, "band");
+                    return;
+            }
+            throw new Exception("Cannot marshal type ScaleType");
+        }
+
+        public static readonly ScaleTypeConverter Singleton = new ScaleTypeConverter();
+    }
+
+    internal class SortUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SortUnion) || t == typeof(SortUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Null:
+                    return new SortUnion { };
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    switch (stringValue)
+                    {
+                        case "ascending":
+                            return new SortUnion { Enum = SortEnum.Ascending };
+                        case "descending":
+                            return new SortUnion { Enum = SortEnum.Descending };
+                    }
+                    break;
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<SortField>(reader);
+                    return new SortUnion { SortField = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type SortUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (SortUnion)untypedValue;
+            if (value.IsNull)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case SortEnum.Ascending:
+                        serializer.Serialize(writer, "ascending");
+                        return;
+                    case SortEnum.Descending:
+                        serializer.Serialize(writer, "descending");
+                        return;
+                }
+            }
+            if (value.SortField != null)
+            {
+                serializer.Serialize(writer, value.SortField);
+                return;
+            }
+            throw new Exception("Cannot marshal type SortUnion");
+        }
+
+        public static readonly SortUnionConverter Singleton = new SortUnionConverter();
+    }
+
+    internal class SortEnumConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SortEnum) || t == typeof(SortEnum?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "ascending":
+                    return SortEnum.Ascending;
+                case "descending":
+                    return SortEnum.Descending;
+            }
+            throw new Exception("Cannot unmarshal type SortEnum");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SortEnum)untypedValue;
+            switch (value)
+            {
+                case SortEnum.Ascending:
+                    serializer.Serialize(writer, "ascending");
+                    return;
+                case SortEnum.Descending:
+                    serializer.Serialize(writer, "descending");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SortEnum");
+        }
+
+        public static readonly SortEnumConverter Singleton = new SortEnumConverter();
+    }
+
+    internal class ConditionalPredicateValueDefTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ConditionalPredicateValueDefType) || t == typeof(ConditionalPredicateValueDefType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "quantitative":
+                    return ConditionalPredicateValueDefType.Quantitative;
+                case "ordinal":
+                    return ConditionalPredicateValueDefType.Ordinal;
+                case "temporal":
+                    return ConditionalPredicateValueDefType.Temporal;
+                case "nominal":
+                    return ConditionalPredicateValueDefType.Nominal;
+                case "latitude":
+                    return ConditionalPredicateValueDefType.Latitude;
+                case "longitude":
+                    return ConditionalPredicateValueDefType.Longitude;
+                case "geojson":
+                    return ConditionalPredicateValueDefType.Geojson;
+            }
+            throw new Exception("Cannot unmarshal type ConditionalPredicateValueDefType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ConditionalPredicateValueDefType)untypedValue;
+            switch (value)
+            {
+                case ConditionalPredicateValueDefType.Quantitative:
+                    serializer.Serialize(writer, "quantitative");
+                    return;
+                case ConditionalPredicateValueDefType.Ordinal:
+                    serializer.Serialize(writer, "ordinal");
+                    return;
+                case ConditionalPredicateValueDefType.Temporal:
+                    serializer.Serialize(writer, "temporal");
+                    return;
+                case ConditionalPredicateValueDefType.Nominal:
+                    serializer.Serialize(writer, "nominal");
+                    return;
+                case ConditionalPredicateValueDefType.Latitude:
+                    serializer.Serialize(writer, "latitude");
+                    return;
+                case ConditionalPredicateValueDefType.Longitude:
+                    serializer.Serialize(writer, "longitude");
+                    return;
+                case ConditionalPredicateValueDefType.Geojson:
+                    serializer.Serialize(writer, "geojson");
+                    return;
+            }
+            throw new Exception("Cannot marshal type ConditionalPredicateValueDefType");
+        }
+
+        public static readonly ConditionalPredicateValueDefTypeConverter Singleton = new ConditionalPredicateValueDefTypeConverter();
+    }
+
+    internal class DetailConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Detail) || t == typeof(Detail?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FieldDef>(reader);
+                    return new Detail { FieldDef = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<FieldDef[]>(reader);
+                    return new Detail { FieldDefArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Detail");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Detail)untypedValue;
+            if (value.FieldDefArray != null)
+            {
+                serializer.Serialize(writer, value.FieldDefArray);
+                return;
+            }
+            if (value.FieldDef != null)
+            {
+                serializer.Serialize(writer, value.FieldDef);
+                return;
+            }
+            throw new Exception("Cannot marshal type Detail");
+        }
+
+        public static readonly DetailConverter Singleton = new DetailConverter();
+    }
+
+    internal class HrefConditionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(HrefCondition) || t == typeof(HrefCondition?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ConditionalPredicateFieldDefClass>(reader);
+                    return new HrefCondition { ConditionalPredicateFieldDefClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<ConditionalValueDef[]>(reader);
+                    return new HrefCondition { ConditionalValueDefArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type HrefCondition");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (HrefCondition)untypedValue;
+            if (value.ConditionalValueDefArray != null)
+            {
+                serializer.Serialize(writer, value.ConditionalValueDefArray);
+                return;
+            }
+            if (value.ConditionalPredicateFieldDefClass != null)
+            {
+                serializer.Serialize(writer, value.ConditionalPredicateFieldDefClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type HrefCondition");
+        }
+
+        public static readonly HrefConditionConverter Singleton = new HrefConditionConverter();
+    }
+
+    internal class OrderConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Order) || t == typeof(Order?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OrderFieldDef>(reader);
+                    return new Order { OrderFieldDef = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<OrderFieldDef[]>(reader);
+                    return new Order { OrderFieldDefArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Order");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Order)untypedValue;
+            if (value.OrderFieldDefArray != null)
+            {
+                serializer.Serialize(writer, value.OrderFieldDefArray);
+                return;
+            }
+            if (value.OrderFieldDef != null)
+            {
+                serializer.Serialize(writer, value.OrderFieldDef);
+                return;
+            }
+            throw new Exception("Cannot marshal type Order");
+        }
+
+        public static readonly OrderConverter Singleton = new OrderConverter();
+    }
+
+    internal class TextConditionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(TextCondition) || t == typeof(TextCondition?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ConditionalPredicateTextFieldDefClass>(reader);
+                    return new TextCondition { ConditionalPredicateTextFieldDefClass = objectValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<ConditionalValueDef[]>(reader);
+                    return new TextCondition { ConditionalValueDefArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type TextCondition");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (TextCondition)untypedValue;
+            if (value.ConditionalValueDefArray != null)
+            {
+                serializer.Serialize(writer, value.ConditionalValueDefArray);
+                return;
+            }
+            if (value.ConditionalPredicateTextFieldDefClass != null)
+            {
+                serializer.Serialize(writer, value.ConditionalPredicateTextFieldDefClass);
+                return;
+            }
+            throw new Exception("Cannot marshal type TextCondition");
+        }
+
+        public static readonly TextConditionConverter Singleton = new TextConditionConverter();
+    }
+
+    internal class AxisValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AxisValue) || t == typeof(AxisValue?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new AxisValue { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<DateTime>(reader);
+                    return new AxisValue { DateTime = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type AxisValue");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AxisValue)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.DateTime != null)
+            {
+                serializer.Serialize(writer, value.DateTime);
+                return;
+            }
+            throw new Exception("Cannot marshal type AxisValue");
+        }
+
+        public static readonly AxisValueConverter Singleton = new AxisValueConverter();
+    }
+
+    internal class AnyMarkConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(AnyMark) || t == typeof(AnyMark?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    switch (stringValue)
+                    {
+                        case "area":
+                            return new AnyMark { Enum = Mark.Area };
+                        case "bar":
+                            return new AnyMark { Enum = Mark.Bar };
+                        case "line":
+                            return new AnyMark { Enum = Mark.Line };
+                        case "point":
+                            return new AnyMark { Enum = Mark.Point };
+                        case "text":
+                            return new AnyMark { Enum = Mark.Text };
+                        case "tick":
+                            return new AnyMark { Enum = Mark.Tick };
+                        case "rect":
+                            return new AnyMark { Enum = Mark.Rect };
+                        case "rule":
+                            return new AnyMark { Enum = Mark.Rule };
+                        case "circle":
+                            return new AnyMark { Enum = Mark.Circle };
+                        case "square":
+                            return new AnyMark { Enum = Mark.Square };
+                        case "geoshape":
+                            return new AnyMark { Enum = Mark.Geoshape };
+                    }
+                    break;
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MarkDef>(reader);
+                    return new AnyMark { MarkDef = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type AnyMark");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (AnyMark)untypedValue;
+            if (value.Enum != null)
+            {
+                switch (value.Enum)
+                {
+                    case Mark.Area:
+                        serializer.Serialize(writer, "area");
+                        return;
+                    case Mark.Bar:
+                        serializer.Serialize(writer, "bar");
+                        return;
+                    case Mark.Line:
+                        serializer.Serialize(writer, "line");
+                        return;
+                    case Mark.Point:
+                        serializer.Serialize(writer, "point");
+                        return;
+                    case Mark.Text:
+                        serializer.Serialize(writer, "text");
+                        return;
+                    case Mark.Tick:
+                        serializer.Serialize(writer, "tick");
+                        return;
+                    case Mark.Rect:
+                        serializer.Serialize(writer, "rect");
+                        return;
+                    case Mark.Rule:
+                        serializer.Serialize(writer, "rule");
+                        return;
+                    case Mark.Circle:
+                        serializer.Serialize(writer, "circle");
+                        return;
+                    case Mark.Square:
+                        serializer.Serialize(writer, "square");
+                        return;
+                    case Mark.Geoshape:
+                        serializer.Serialize(writer, "geoshape");
+                        return;
+                }
+            }
+            if (value.MarkDef != null)
+            {
+                serializer.Serialize(writer, value.MarkDef);
+                return;
+            }
+            throw new Exception("Cannot marshal type AnyMark");
+        }
+
+        public static readonly AnyMarkConverter Singleton = new AnyMarkConverter();
+    }
+
+    internal class StyleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Style) || t == typeof(Style?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Style { String = stringValue };
+                case JsonToken.StartArray:
+                    var arrayValue = serializer.Deserialize<string[]>(reader);
+                    return new Style { StringArray = arrayValue };
+            }
+            throw new Exception("Cannot unmarshal type Style");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Style)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.StringArray != null)
+            {
+                serializer.Serialize(writer, value.StringArray);
+                return;
+            }
+            throw new Exception("Cannot marshal type Style");
+        }
+
+        public static readonly StyleConverter Singleton = new StyleConverter();
+    }
+
+    internal class MarkConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Mark) || t == typeof(Mark?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "area":
+                    return Mark.Area;
+                case "bar":
+                    return Mark.Bar;
+                case "line":
+                    return Mark.Line;
+                case "point":
+                    return Mark.Point;
+                case "text":
+                    return Mark.Text;
+                case "tick":
+                    return Mark.Tick;
+                case "rect":
+                    return Mark.Rect;
+                case "rule":
+                    return Mark.Rule;
+                case "circle":
+                    return Mark.Circle;
+                case "square":
+                    return Mark.Square;
+                case "geoshape":
+                    return Mark.Geoshape;
+            }
+            throw new Exception("Cannot unmarshal type Mark");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Mark)untypedValue;
+            switch (value)
+            {
+                case Mark.Area:
+                    serializer.Serialize(writer, "area");
+                    return;
+                case Mark.Bar:
+                    serializer.Serialize(writer, "bar");
+                    return;
+                case Mark.Line:
+                    serializer.Serialize(writer, "line");
+                    return;
+                case Mark.Point:
+                    serializer.Serialize(writer, "point");
+                    return;
+                case Mark.Text:
+                    serializer.Serialize(writer, "text");
+                    return;
+                case Mark.Tick:
+                    serializer.Serialize(writer, "tick");
+                    return;
+                case Mark.Rect:
+                    serializer.Serialize(writer, "rect");
+                    return;
+                case Mark.Rule:
+                    serializer.Serialize(writer, "rule");
+                    return;
+                case Mark.Circle:
+                    serializer.Serialize(writer, "circle");
+                    return;
+                case Mark.Square:
+                    serializer.Serialize(writer, "square");
+                    return;
+                case Mark.Geoshape:
+                    serializer.Serialize(writer, "geoshape");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Mark");
+        }
+
+        public static readonly MarkConverter Singleton = new MarkConverter();
+    }
+
+    internal class ResolveModeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(ResolveMode) || t == typeof(ResolveMode?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "independent":
+                    return ResolveMode.Independent;
+                case "shared":
+                    return ResolveMode.Shared;
+            }
+            throw new Exception("Cannot unmarshal type ResolveMode");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (ResolveMode)untypedValue;
+            switch (value)
+            {
+                case ResolveMode.Independent:
+                    serializer.Serialize(writer, "independent");
+                    return;
+                case ResolveMode.Shared:
+                    serializer.Serialize(writer, "shared");
+                    return;
+            }
+            throw new Exception("Cannot marshal type ResolveMode");
+        }
+
+        public static readonly ResolveModeConverter Singleton = new ResolveModeConverter();
+    }
+
+    internal class BindUnionConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(BindUnion) || t == typeof(BindUnion?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    if (stringValue == "scales")
+                    {
+                        return new BindUnion { Enum = BindEnum.Scales };
+                    }
+                    break;
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<Dictionary<string, VgBinding>>(reader);
+                    return new BindUnion { VgBindingMap = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type BindUnion");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (BindUnion)untypedValue;
+            if (value.Enum != null)
+            {
+                if (value.Enum == BindEnum.Scales)
+                {
+                    serializer.Serialize(writer, "scales");
+                    return;
+                }
+            }
+            if (value.VgBindingMap != null)
+            {
+                serializer.Serialize(writer, value.VgBindingMap);
+                return;
+            }
+            throw new Exception("Cannot marshal type BindUnion");
+        }
+
+        public static readonly BindUnionConverter Singleton = new BindUnionConverter();
+    }
+
+    internal class SelectionDefTypeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(SelectionDefType) || t == typeof(SelectionDefType?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "single":
+                    return SelectionDefType.Single;
+                case "multi":
+                    return SelectionDefType.Multi;
+                case "interval":
+                    return SelectionDefType.Interval;
+            }
+            throw new Exception("Cannot unmarshal type SelectionDefType");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (SelectionDefType)untypedValue;
+            switch (value)
+            {
+                case SelectionDefType.Single:
+                    serializer.Serialize(writer, "single");
+                    return;
+                case SelectionDefType.Multi:
+                    serializer.Serialize(writer, "multi");
+                    return;
+                case SelectionDefType.Interval:
+                    serializer.Serialize(writer, "interval");
+                    return;
+            }
+            throw new Exception("Cannot marshal type SelectionDefType");
+        }
+
+        public static readonly SelectionDefTypeConverter Singleton = new SelectionDefTypeConverter();
+    }
+
+    internal class TitleConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Title) || t == typeof(Title?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                case JsonToken.Date:
+                    var stringValue = serializer.Deserialize<string>(reader);
+                    return new Title { String = stringValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<TitleParams>(reader);
+                    return new Title { TitleParams = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type Title");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (Title)untypedValue;
+            if (value.String != null)
+            {
+                serializer.Serialize(writer, value.String);
+                return;
+            }
+            if (value.TitleParams != null)
+            {
+                serializer.Serialize(writer, value.TitleParams);
+                return;
+            }
+            throw new Exception("Cannot marshal type Title");
+        }
+
+        public static readonly TitleConverter Singleton = new TitleConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
