From 945899c3da6f69ec862eefd3215bc3b8d1265020 Mon Sep 17 00:00:00 2001 From: Ben DeLay Date: Wed, 26 Mar 2025 10:20:30 -0700 Subject: [PATCH 1/2] C#: Adds version 8 and expands nullability to reference types (#1632) --- .../quicktype-core/src/language/CSharp/CSharpRenderer.ts | 2 +- packages/quicktype-core/src/language/CSharp/language.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts index 09cfcc3ca..d07dea90f 100644 --- a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts @@ -125,7 +125,7 @@ export class CSharpRenderer extends ConvenienceRenderer { protected nullableCSType(t: Type, follow: (t: Type) => Type = followTargetType, withIssues = false): Sourcelike { t = followTargetType(t); const csType = this.csType(t, follow, withIssues); - if (isValueType(t)) { + if (isValueType(t) || this._csOptions.version >= 8) { return [csType, "?"]; } else { return csType; diff --git a/packages/quicktype-core/src/language/CSharp/language.ts b/packages/quicktype-core/src/language/CSharp/language.ts index e2b460582..123147d4c 100644 --- a/packages/quicktype-core/src/language/CSharp/language.ts +++ b/packages/quicktype-core/src/language/CSharp/language.ts @@ -16,7 +16,7 @@ export enum Framework { SystemTextJson = "SystemTextJson" } -export type Version = 5 | 6; +export type Version = 5 | 6 | 8; export interface OutputFeatures { attributes: boolean; helpers: boolean; @@ -55,7 +55,8 @@ export const cSharpOptions = { "C# version", [ ["5", 5], - ["6", 6] + ["6", 6], + ["8", 8] ], "6", "secondary" From 7fb43586d90a450bc454554bc8db7978552d20df Mon Sep 17 00:00:00 2001 From: Ben DeLay Date: Sun, 15 Jun 2025 19:46:57 -0700 Subject: [PATCH 2/2] C#: Adds JsonRequired attribute to System.Text.Json classes for required fields --- .../src/language/CSharp/SystemTextJsonCSharpRenderer.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts index 77afed6da..dfede9be4 100644 --- a/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts @@ -217,10 +217,13 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { const isNullable = followTargetType(property.type).isNullable; const isOptional = property.isOptional; - if (isOptional && !isNullable) { + if (!isOptional) { + attributes.push(["[", "JsonRequired", "]"]); + } else if (isOptional && !isNullable) { attributes.push(["[", "JsonIgnore", "(Condition = JsonIgnoreCondition.WhenWritingNull)]"]); } + // const requiredClass = this._options.dense ? "R" : "Required"; // const nullValueHandlingClass = this._options.dense ? "N" : "NullValueHandling"; // const nullValueHandling = isOptional && !isNullable ? [", NullValueHandling = ", nullValueHandlingClass, ".Ignore"] : [];