diff --git a/src/KubernetesCRDModelGen.Base/CodeGenerator.cs b/src/KubernetesCRDModelGen.Base/CodeGenerator.cs index cf56a8b03..3bbafc290 100644 --- a/src/KubernetesCRDModelGen.Base/CodeGenerator.cs +++ b/src/KubernetesCRDModelGen.Base/CodeGenerator.cs @@ -7,6 +7,7 @@ using System.Text; using System.Text.Json; using System.Text.Json.Nodes; +using System.Text.Json.Serialization; using System.Xml.Linq; namespace KubernetesCRDModelGen.Base; @@ -398,7 +399,7 @@ private string GetOrGenerateType(IOpenApiSchema schema, List"; default: - throw new Exception("Unsupported Type: " + JsonSerializer.Serialize(schema)); + throw new Exception("Unsupported Type: " + JsonSerializer.Serialize(schema, CodeGeneratorSourceGenerationContext.Default.IOpenApiSchema)); } } @@ -663,3 +664,7 @@ public static string RemoveIllegalFileNameCharacters(string fileName) } } +[JsonSerializable(typeof(IOpenApiSchema))] +internal partial class CodeGeneratorSourceGenerationContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/src/KubernetesCRDModelGen.Base/KubernetesCRDModelGen.Base.csproj b/src/KubernetesCRDModelGen.Base/KubernetesCRDModelGen.Base.csproj index ce78759ae..81aebc8b8 100644 --- a/src/KubernetesCRDModelGen.Base/KubernetesCRDModelGen.Base.csproj +++ b/src/KubernetesCRDModelGen.Base/KubernetesCRDModelGen.Base.csproj @@ -22,7 +22,7 @@ - + diff --git a/src/KubernetesCRDModelGen/Generator.cs b/src/KubernetesCRDModelGen/Generator.cs index 09e01609f..90f76c328 100644 --- a/src/KubernetesCRDModelGen/Generator.cs +++ b/src/KubernetesCRDModelGen/Generator.cs @@ -9,7 +9,9 @@ using System.Reflection; using System.Runtime.Loader; using System.Text.Json; +using System.Text.Json.Serialization; using System.Xml; +using static k8s.KubernetesJson; namespace KubernetesCRDModelGen; @@ -121,8 +123,7 @@ private CompilationUnitSyntax GenerateCompilationUnit(V1CustomResourceDefinition var reader = new OpenApiJsonReader(); - var node = JsonSerializer.SerializeToNode(version.Schema.OpenAPIV3Schema); - + var node = JsonSerializer.SerializeToNode(version.Schema.OpenAPIV3Schema, GeneratorSourceGenerationContext.Default.V1JSONSchemaProps); var doc = reader.ReadFragment(node, OpenApiSpecVersion.OpenApi3_0, new OpenApiDocument(), out var diag); if (diag != null && diag.Errors.Count > 0) @@ -155,3 +156,16 @@ private MetadataReference[] GetReferences() return [.. references]; } } + +[JsonSerializable(typeof(V1JSONSchemaProps))] +[JsonSerializable(typeof(Dictionary))] +[JsonSerializable(typeof(byte))] +[JsonSourceGenerationOptions( + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase, + UseStringEnumConverter = true, + Converters = new[] { typeof(Iso8601TimeSpanConverter), typeof(KubernetesDateTimeConverter), typeof(KubernetesDateTimeOffsetConverter)}) +] +internal partial class GeneratorSourceGenerationContext : JsonSerializerContext +{ +} \ No newline at end of file