RSCG – RSCG_JSON2Class
RSCG – RSCG_JSON2Class
name | RSCG_JSON2Class |
nuget | https://www.nuget.org/packages/RSCG_JSON2Class/ |
link | https://github.com/ignatandrei/RSCG_JSON2Class |
author | Andrei Ignat |
transform any json into a class
This is how you can use RSCG_JSON2Class .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <None Remove="testData.json" /> </ItemGroup> <ItemGroup> <AdditionalFiles Include="testData.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </AdditionalFiles> </ItemGroup> <ItemGroup> <PackageReference Include="RSCG_JSON2Class" Version="2024.2.29.807" OutputItemType="Analyzer" ReferenceOutputAssembly="false" /> </ItemGroup> <PropertyGroup> <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath> <GenerateDocumentationFile>True</GenerateDocumentationFile> </PropertyGroup> </Project>
The code that you will use is
using System.Text.Json; var testData = JsonSerializer.Deserialize<JSON2ClassConsole.SettingsJson.testData>(System.IO.File.ReadAllText("testData.json")); ArgumentNullException.ThrowIfNull(testData); Console.WriteLine(testData.Logging.LogLevel.Default); Console.WriteLine(testData.DictData.Number_2);
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "MicrosoftHostingLifetime": "Trace" } }, "PropChars": { "a": "ab'" }, "NoProp": {}, "AllowedHosts": "*", "MyTest": "'aa < >", "DictData": { "Test": { "1234a": [ "1a", "b" ] }, "A": "asdasd", "2": "asdasd", "MyNumber": 10, "55": { "a": "b1", "2": "test1" } } }
The code that is generated is
//------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. // Runtime Version: // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ using System; using System.Collections.Generic; using System.Runtime.Serialization; using appSettingsEditor; namespace JSON2ClassConsole.SettingsJson { //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.24.1940")] public partial class LogLevel { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "DEFAULT": return this.Default ; case "MICROSOFT": return this.Microsoft ; case "MICROSOFTHOSTINGLIFETIME": return this.MicrosoftHostingLifetime ; default: if(returnNull) return null; throw new ArgumentException("cannot found from LogLevel prop "+propName); } } public IEnumerable<string> Properties(){ yield return "Default" ; yield return "Microsoft" ; yield return "MicrosoftHostingLifetime" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("Default")] public string Default { get; set; } [System.Text.Json.Serialization.JsonPropertyName("Microsoft")] public string Microsoft { get; set; } [System.Text.Json.Serialization.JsonPropertyName("MicrosoftHostingLifetime")] public string MicrosoftHostingLifetime { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.24.1940")] public partial class Logging { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "LOGLEVEL": return this.LogLevel ; default: if(returnNull) return null; throw new ArgumentException("cannot found from Logging prop "+propName); } } public IEnumerable<string> Properties(){ yield return "LogLevel" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("LogLevel")] public LogLevel LogLevel { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.24.1940")] public partial class PropChars { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "A": return this.A ; default: if(returnNull) return null; throw new ArgumentException("cannot found from PropChars prop "+propName); } } public IEnumerable<string> Properties(){ yield return "A" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("a")] public string A { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.24.1940")] public partial class NoProp { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ default: if(returnNull) return null; throw new ArgumentException("cannot found from NoProp prop "+propName); } } public IEnumerable<string> Properties(){ yield break; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.24.1940")] public partial class Test { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "NUMBER_1234A": return this.Number_1234a ; default: if(returnNull) return null; throw new ArgumentException("cannot found from Test prop "+propName); } } public IEnumerable<string> Properties(){ yield return "Number_1234a" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("1234a")] public IList<string> Number_1234a { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.24.1940")] public partial class Number_55 { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "A": return this.A ; case "NUMBER_2": return this.Number_2 ; default: if(returnNull) return null; throw new ArgumentException("cannot found from Number_55 prop "+propName); } } public IEnumerable<string> Properties(){ yield return "A" ; yield return "Number_2" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("a")] public string A { get; set; } [System.Text.Json.Serialization.JsonPropertyName("2")] public string Number_2 { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.24.1940")] public partial class DictData { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "TEST": return this.Test ; case "A": return this.A ; case "NUMBER_2": return this.Number_2 ; case "MYNUMBER": return this.MyNumber ; case "NUMBER_55": return this.Number_55 ; default: if(returnNull) return null; throw new ArgumentException("cannot found from DictData prop "+propName); } } public IEnumerable<string> Properties(){ yield return "Test" ; yield return "A" ; yield return "Number_2" ; yield return "MyNumber" ; yield return "Number_55" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("Test")] public Test Test { get; set; } [System.Text.Json.Serialization.JsonPropertyName("A")] public string A { get; set; } [System.Text.Json.Serialization.JsonPropertyName("2")] public string Number_2 { get; set; } [System.Text.Json.Serialization.JsonPropertyName("MyNumber")] public int MyNumber { get; set; } [System.Text.Json.Serialization.JsonPropertyName("55")] public Number_55 Number_55 { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.24.1940")] public partial class test { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "LOGGING": return this.Logging ; case "PROPCHARS": return this.PropChars ; case "NOPROP": return this.NoProp ; case "ALLOWEDHOSTS": return this.AllowedHosts ; case "MYTEST": return this.MyTest ; case "DICTDATA": return this.DictData ; default: if(returnNull) return null; throw new ArgumentException("cannot found from test prop "+propName); } } public IEnumerable<string> Properties(){ yield return "Logging" ; yield return "PropChars" ; yield return "NoProp" ; yield return "AllowedHosts" ; yield return "MyTest" ; yield return "DictData" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("Logging")] public Logging Logging { get; set; } [System.Text.Json.Serialization.JsonPropertyName("PropChars")] public PropChars PropChars { get; set; } [System.Text.Json.Serialization.JsonPropertyName("NoProp")] public NoProp NoProp { get; set; } [System.Text.Json.Serialization.JsonPropertyName("AllowedHosts")] public string AllowedHosts { get; set; } [System.Text.Json.Serialization.JsonPropertyName("MyTest")] public string MyTest { get; set; } [System.Text.Json.Serialization.JsonPropertyName("DictData")] public DictData DictData { get; set; } } }
//------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. // Runtime Version: // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ using System; using System.Collections.Generic; using System.Runtime.Serialization; namespace JSON2ClassConsole.SettingsJson { //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.29.807")] public partial class LogLevel { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "DEFAULT": return this.Default ; case "MICROSOFT": return this.Microsoft ; case "MICROSOFTHOSTINGLIFETIME": return this.MicrosoftHostingLifetime ; default: if(returnNull) return null; throw new ArgumentException("cannot found from LogLevel prop "+propName); } } public IEnumerable<string> Properties(){ yield return "Default" ; yield return "Microsoft" ; yield return "MicrosoftHostingLifetime" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("Default")] public string Default { get; set; } [System.Text.Json.Serialization.JsonPropertyName("Microsoft")] public string Microsoft { get; set; } [System.Text.Json.Serialization.JsonPropertyName("MicrosoftHostingLifetime")] public string MicrosoftHostingLifetime { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.29.807")] public partial class Logging { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "LOGLEVEL": return this.LogLevel ; default: if(returnNull) return null; throw new ArgumentException("cannot found from Logging prop "+propName); } } public IEnumerable<string> Properties(){ yield return "LogLevel" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("LogLevel")] public LogLevel LogLevel { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.29.807")] public partial class PropChars { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "A": return this.A ; default: if(returnNull) return null; throw new ArgumentException("cannot found from PropChars prop "+propName); } } public IEnumerable<string> Properties(){ yield return "A" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("a")] public string A { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.29.807")] public partial class NoProp { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ default: if(returnNull) return null; throw new ArgumentException("cannot found from NoProp prop "+propName); } } public IEnumerable<string> Properties(){ yield break; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.29.807")] public partial class Test { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "NUMBER_1234A": return this.Number_1234a ; default: if(returnNull) return null; throw new ArgumentException("cannot found from Test prop "+propName); } } public IEnumerable<string> Properties(){ yield return "Number_1234a" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("1234a")] public IList<string> Number_1234a { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.29.807")] public partial class Number_55 { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "A": return this.A ; case "NUMBER_2": return this.Number_2 ; default: if(returnNull) return null; throw new ArgumentException("cannot found from Number_55 prop "+propName); } } public IEnumerable<string> Properties(){ yield return "A" ; yield return "Number_2" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("a")] public string A { get; set; } [System.Text.Json.Serialization.JsonPropertyName("2")] public string Number_2 { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.29.807")] public partial class DictData { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "TEST": return this.Test ; case "A": return this.A ; case "NUMBER_2": return this.Number_2 ; case "MYNUMBER": return this.MyNumber ; case "NUMBER_55": return this.Number_55 ; default: if(returnNull) return null; throw new ArgumentException("cannot found from DictData prop "+propName); } } public IEnumerable<string> Properties(){ yield return "Test" ; yield return "A" ; yield return "Number_2" ; yield return "MyNumber" ; yield return "Number_55" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("Test")] public Test Test { get; set; } [System.Text.Json.Serialization.JsonPropertyName("A")] public string A { get; set; } [System.Text.Json.Serialization.JsonPropertyName("2")] public string Number_2 { get; set; } [System.Text.Json.Serialization.JsonPropertyName("MyNumber")] public int MyNumber { get; set; } [System.Text.Json.Serialization.JsonPropertyName("55")] public Number_55 Number_55 { get; set; } } //[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("RSCG_JSON2Class", "2024.2.29.807")] public partial class testData { public object GetFromPropertyName(string propName, bool returnNull =false){ propName=propName?.ToUpper(); switch(propName){ case "LOGGING": return this.Logging ; case "PROPCHARS": return this.PropChars ; case "NOPROP": return this.NoProp ; case "ALLOWEDHOSTS": return this.AllowedHosts ; case "MYTEST": return this.MyTest ; case "DICTDATA": return this.DictData ; default: if(returnNull) return null; throw new ArgumentException("cannot found from testData prop "+propName); } } public IEnumerable<string> Properties(){ yield return "Logging" ; yield return "PropChars" ; yield return "NoProp" ; yield return "AllowedHosts" ; yield return "MyTest" ; yield return "DictData" ; yield break; } [System.Text.Json.Serialization.JsonPropertyName("Logging")] public Logging Logging { get; set; } [System.Text.Json.Serialization.JsonPropertyName("PropChars")] public PropChars PropChars { get; set; } [System.Text.Json.Serialization.JsonPropertyName("NoProp")] public NoProp NoProp { get; set; } [System.Text.Json.Serialization.JsonPropertyName("AllowedHosts")] public string AllowedHosts { get; set; } [System.Text.Json.Serialization.JsonPropertyName("MyTest")] public string MyTest { get; set; } [System.Text.Json.Serialization.JsonPropertyName("DictData")] public DictData DictData { get; set; } } }
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/RSCG_JSON2Class
Leave a Reply